«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #119 Аноним 2020/08/23 18:11:45  №1785871 1
Здесь мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

ОП довольно занят, но постарается ответить на все вопросы. Также, ответы и решения задач можно поискать в архиве тредов phpclub.

Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.

Предыдущий тред был тут: >>1731888 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, можно искать решения и обсуждения задач).

С чего начать

Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.

Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony или Laravel
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра.

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1
- Новости IT на англ. https://news.ycombinator.com/
- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/

Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.

Платиновые вопросы

- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Clone or Download -> Download ZIP, распакуй на рабочий стол и получи личную копию сайта, не требующую интернетов.
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу (ищи в архиве по слову "устроился").
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Оформление кода Аноним 2020/08/23 18:15:28  №1785875 2
grammar.png (56, 500x644)
644x500
Код должен быть аккуратным и оформляться, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

Для этого достаточно вставить код на http://beta.phpformatter.com/ и нажать «format». Робот оформит все как надо. Если ты используешь IDE, то там есть горячая клавиша для этого. Список клавиш для IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть рекомендации PSR-1 и PSR-12. Вот как надо оформлять код:

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
- ставим тайп-хинты на аргументы функций, результат функций и поля классов

Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:

PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
Аноним 2020/08/23 18:19:02  №1785878 3
Если вас пропустили в предыдущем треде, можете напомнить о себе тут. Также, напомню, что код файлообменника https://github.com/deadj/uppu я проверил тут: >>1781062 →
Аноним 2020/08/23 19:12:17  №1785903 4
наконец таки блять перекатили. работаю уже год на галере на всяких говноцмс и битриксе. с начала лета активно осваиваю ларку. когда можно понять что могу свалить в другую галеру и на норм стек и на какой уровень?
пока что был на двух - джун и мидл, оба в отказ ушли
Ответы: >>1786591
Аноним 2020/08/23 19:24:33  №1785913 5
Повторю вопрос о том, как отстоять честь пхп >>1785124 →. Брат - натурал, ебаться не будем.
Ответы: >>1786591
Аноним 2020/08/23 19:52:41  №1785933 6
image.png (20, 644x257)
257x644
>>1781944 →
Спасибо. Насчет autowiring, он точно должен работать на компонентах? Читал о нем еще в твоем гайде по DI, но даже не пытался реализовать, т.к. был уверен что это лютейшая магия, работающая только на полном symfony. Сейчас вот попытался сделать как на пике, но что-то параметры в конструкторы не пробрасываются. Даже на новом голом тестовом проекте с одним лишь DI пробовал, всё равно безуспешно. Больше я бы, конечно, удивился, если бы оно работало.
Ответы: >>1792961
Аноним 2020/08/23 22:37:19  №1785992 7
Стоит создавать отдельный класс в модели для работы с ОРМ ( Доктрина )?
Ответы: >>1786591
Аноним 2020/08/24 05:52:36  №1786072 8
Аноним 2020/08/24 14:21:32  №1786591 9
>>1785903
Тут ты попадаешь в очевидную ловушку, что на цмсках ты программирские скиллы не развиваешь, а дома это делать сложно и поправить тебя некому, когда говнокодишь.
На джуна можно скорее всего когда угодно, потому что котируются не столько навыки, сколько общий интеллект, мотивация и так далее.
Погуглил наборы вопросов на собеседованиях (только нормальные, а не всякое говно типа "что такое функция", "что такое класс"), желательно на миддла и учи, пока не сможешь на них максимально полно ответить.
Ещё сделай пару пет проектов (только по гайдам, скелетонам и так далее) и запули сюда или в любой чат и попроси обосрать.
Ещё имей ввиду, что на джуна нормальный офферрейт - это 1 оффер из 20 собесов.

>>1785913
Зависит от того, что именно делаешь. Если на вордпрессе, джумле или yii что-то формошлёпствуешь, то лучше говори, что в гей-клубе хостесс работаешь. А если симфони, ларавел и какой-то средней руки продукт или аутсорс - то вполне норм, not great, not terrible.

>>1785992
Можешь объявить в модели интерфейсы с геттерами, а реализовать их в классах ОРМки.
Ответы: >>1786660
Аноним 2020/08/24 14:58:49  №1786660 10
>>1786591
>Можешь объявить в модели интерфейсы с геттерами, а реализовать их в классах ОРМки.
Спасибо за ответ, я правильно понял что под классами ОРМ ты подразумеваешь сущность ( Entity )?
Ответы: >>1787643
Аноним 2020/08/24 17:22:02  №1786883 11
>>1785871 (OP)
Сап пехепач. На РАБотке дали задачу создать "программу" для обмена данными между удаленными друг от друга офисами. Они должны заполнять документы в рамках одного дела и передавать их друг другу. Офис1 ставит свои печати (скачивает исходник, обрабатывает, заливает обновленную версию), потом это делают второй, третий и т.д. Все это нужно сделать на php, плюс интерфейс для "операторов пк на уровне пользователя". Я понимаю, что это наверняка крайне тривиальная задача, но сам имею лишь приблизительное представление, как это сделать. Дайте советов мудрых или обоссыте.
Ответы: >>1787095
Аноним 2020/08/24 18:54:29  №1787004 12
Ответы: >>1787643
Аноним 2020/08/24 20:33:13  №1787095 13
>>1786883
google drive чем не подходит?
Аноним 2020/08/25 09:13:31  №1787458 14
Поясните за service provider в laravel.
Это (по сравнению с symfony ^4.0 и его autocofigure+autowire) типа эксплеситный метод описать и заинжектить сервисы и значения в контейнер?
Аноним 2020/08/25 11:35:22  №1787622 15
Есть смысл в пхп вкатываться если в универе гладко с джавой идет?
Хочется в бекенд.
Ответы: >>1787648
Аноним 2020/08/25 11:42:58  №1787643 16
>>1787004
Смотри логи сервера (access log, error log), вероятно, ты пути неправильно прописал в nginx

>>1786660
Да
Аноним 2020/08/25 11:44:41  №1787648 17
>>1787622
Нет, джава намного более обширна как область (даже чисто как бекенл, не вспоминая про мобилки), намного совершеннее, как экосистема (тулчейн, akka, котлин, скалаштуки и тп) и намного денежнее в смысле зарплат.
PHP при всём его прогрессе за последние 10 лет будет для тебя дауншифтингом.
Ответы: >>1787663
Аноним 2020/08/25 11:48:41  №1787656 18
Ананасики посоветуйте куда рыть, нужно с помощью php и js эмулировать действия пользователя. А именно, открыть страницу, проскролить ее, кликнуть по кнопке, получить аяксом форму, заполнить и отправить.
Ответы: >>1787679 >>1787716 >>1788041
Аноним 2020/08/25 11:51:03  №1787663 19
>>1787648
На пыхе можно будет фрилансить в свободное время по выходным.
Ответы: >>1787690
Аноним 2020/08/25 12:06:20  №1787679 20
>>1787656
Ну в puppeteer сделай на жс, нахуя тут два языка?
Ответы: >>1787687
Аноним 2020/08/25 12:10:58  №1787687 21
>>1787679
так в этом и интерес. как это реализовать на php+js, без ноды и плугинов.
Ответы: >>1787694 >>1787709
Аноним 2020/08/25 12:12:04  №1787690 22
>>1787663
Дело конечно твоё, но количество не означает качество. Большинство фрилансеров - это индусы с крайне низким рейтом. Да, стать одним из них легко, но зато трудно прийти к успеху, не говоря уже про конкуренцию.

Приведу пример, ты можешь учиться 5 лет на юриста (может, изредка подрабатывая писарем в суде за 5к) и потом получишь престижную работу за 100к, или можешь пойти в сторожа в пятерочке за 20к прямо сейчас.
Да, в эти пять лет ты в пятерочке будешь получать больше, но и расти тебе некуда, так и останешься охранником (причём с возрастом уйти из охраны будет сложнее, потому что начинать придётся с нуля), а после юриста ты мог бы стать адвокатом, прокурором и тп, всё увеличивая профессионализм и зарплату.

То есть, у тебя выбор между локальным оптимумом и глобальным, дальше выбирай сам. Я бы выбрал второе.
Ответы: >>1787784
Аноним 2020/08/25 12:13:31  №1787694 23
>>1787687
Это невозможно, потому что для того, чтобы эмулировать действия пользователя тебе нужен браузер, где ты будешь исполнять фронтендовый код.
Как альтернатива, можешь расковырять апи сервера и отправлять запрос на сабмит формы прямо из php, но это уже будет не эмуляция.
Ответы: >>1787713
Аноним 2020/08/25 12:32:58  №1787709 24
>>1787687
> +js
И кто этот жс будет исполнять, Пушкин?
А вообще, это не интересная задача и весьма ебучая. Лучше сделать как угодно и избавиться от неё.
Ответы: >>1787713
Аноним 2020/08/25 12:40:16  №1787713 25
>>1787694
просто сабмит не подойдет, нужно именно скрол, клик и тд и тп
>>1787709
так в этом и вопрос, через пых можем получить код страницы, что делать дальше?
Ответы: >>1787715
Аноним 2020/08/25 12:43:00  №1787715 26
>>1787713
Дальше реализуешь на пхп виртуальную машину жс, дом модель документа, ну а там разберешься.
Аноним 2020/08/25 12:46:00  №1787716 27
Аноним 2020/08/25 13:46:06  №1787784 28
>>1787690
Я согласен с тем, что ты говоришь.
Но суть в том, что я хотел бы и в пыхе развиваться как нормальный девелопер. Прокачивать хардскиллзы, писать красивый и правильный код и т.д.
Ну и плюс иметь возможность пофрилансить/поработать удаленку (когда корона закончится и начнут возвращаться в офисы).
Джава захватывает тем, что я в любой момент сейчас могу свернуть в сторону андроида и делать там более-менее интересные проекты (всяко интереснее, чем если я попаду на проект в какой-нибудь банк и буду бекенд софта для местных бухгалтерш писать)
Ответы: >>1787798 >>1787818 >>1787924
Аноним 2020/08/25 13:58:05  №1787798 29
>>1787784
На самом деле пилка андроид приложений наверно самая унылая сфера из всех, даже обычный фронтенд интереснее.
Аноним 2020/08/25 14:08:45  №1787818 30
>>1787784
Фриланс на пыхе это обычно смерть с джумлой и прочим ужасом, конечно можно найти себе какую-нибудь поддержку сайтеца на симфони 2, но такого не очень много. Нормального девелопмента на фрилансе в принципе обычно нет, никаких тестов, ничего нет, файлы кидай архивом и объясняй как установить по скайпу-обычное дело
Аноним 2020/08/25 16:15:12  №1787924 31
>>1787784
Чувак, тебе уже сказали, что джава - она как php (в смысле, можешь делать всё то же самое), но просто совершеннее в смысле тулчейна, экосистемы, зарплат и так далее.
Хочешь говнякать фриланс на симфони - пожалуйста, жизнь твоя, решать тебе.
Ответы: >>1787925
Аноним 2020/08/25 16:15:35  №1787925 32
>>1787924
> Хочешь говнякать фриланс на симфони
Пыхе*
Аноним 2020/08/25 16:47:43  №1787969 33
А на джаве ничего нового не делают, правда? Это в основном огромные легаси проекты, верно? Меня, например, такое не очень интересует.

мимо
Ответы: >>1787998 >>1788043 >>1788846
Аноним 2020/08/25 17:27:07  №1787998 34
>>1787969
Делают новые огромные проекты, которые станут потом тем огромным легаси.
Если интересует прототипное говно для ип чебурек, то это нода, ларавель, джанго, рельсы.
Аноним 2020/08/25 18:39:55  №1788039 35
Аноны, делаю на работе простенький сервис , поэтому решил на слим 3 субственно максимально кастомно все сделать, аутентификацию, валидацию, пагинацию и прочее.
Встрял с тем как отображать в twig флэш сообщения.
В идеале что то типа хелпера, который будет скрывать в себе всю логику флэш сообщений.
По документации на твиг нихуя не понял. И у меня даже почему то addGlobals не заработало.
Ответы: >>1788060
Аноним 2020/08/25 18:42:05  №1788041 36
Аноним 2020/08/25 18:45:10  №1788043 37
>>1787969
Джаву боюсь хоронят так же как пхп или с++. Вечно и постоянно.
Рождены что бы хорониться, лол.
Дальше ток JS , ему желают смерти все, но все понимают что он тупо не умрет никогда.
Аноним 2020/08/25 19:21:56  №1788060 38
>>1788039
>на слим 3
А че не на 2 то сразу, некрофил ебучий.
Аноним 2020/08/26 08:49:25  №1788526 39
Господа. Нужен САМЫЙ КОРОТКИЙ гайд по симфони/ларавель/уии2.
Хуйня в том, что я всю жизнь то фрилансил то подрабатывал на разных цмсях и/или фрейморках, и по итогу оказался в ситуации что могу пользовать всё, но нихуя не знаю. А современному рынку труда очень надо шоб ты знал симфоню. Осваиваю я любое говно быстро, есть план написать на гитхаб проектик на любом распространённом фреймворке шоб пощупать его кишочки, и говорить что знаю его(показывать результат при необходимости).
Ответы: >>1788846
Аноним 2020/08/26 08:49:50  №1788527 40
Пишу небольшой интернет магазин на laravel, сейчас думаю как лучше реализовать фильтр товаров. Аттрибуты каждого товара хранятся в json поле базы в виде:

{"factory": "Восход", "material": "Пластик"}

Как лучше в таком случае реализовать фильтр товаров? Мне в голову пришло только сделать в каталоге формочку, которая отправляет get запрос вида /products?factory=Восход&material=Пластик

Это совсем говно, или сойдет? Ничего страшного в том, что кириллицу передаем в get параметрах, или может есть более элегантное решение?
Ответы: >>1788530
Аноним 2020/08/26 08:54:28  №1788530 41
>>1788527
Ебать ты атрибуты запихнул, конечно.
Я не в курсе за вашу ларавель, но бля. Из такой штуки тупо неудобно их искать же. Медленно через like выходит же.

Ответы: >>1788541
Аноним 2020/08/26 09:07:09  №1788541 42
>>1788530
>Ебать ты атрибуты запихнул, конечно.
Аттрибуты довольно разные, и точный список заранее неизвестен, поэтому нужно что-то гибкое и более-менее масштабируемое. От EAV решил отказаться, а nosql не хочется тащить сюда. Поэтому решил аттрибуты хранить в json и просто прописать их в админке при добавлении товара.

Like не нужен, в mysql завезли же поддержку json полей, искать можно так:

select * from `products` where json_unquote(json_extract(`attributes`, '$."factory"')) = 'Восход'
Ответы: >>1788552 >>1788588
Аноним 2020/08/26 09:23:40  №1788552 43
>>1788541
а ты уверен, что лара так умеет?)
Ответы: >>1788555
Аноним 2020/08/26 09:27:04  №1788555 44
>>1788552
https://laravel.com/docs/7.x/queries#json-where-clauses

DB::table('products')->where('attributes->factory', 'Восход')->get();

Или ты думаешь что json лучше не хранить в mysql? Как тогда лучше поступить, какую струкуру бд выбрать, чтобы без json обойтись?

Аноним 2020/08/26 09:47:27  №1788572 45
maxresdefault[1].jpg (41, 1280x720)
720x1280
Сильно ли отличается Ларавел 5 от 7 ?
А то накачал сливов laracasts и всяких курсов, а там пятёрка.
Может у вас есть ссылки на посвежее?

Алсо, слезаю с иглы Битрикса, есть что-то особенное, что нужно знать при переходе на Ларавел?
Ответы: >>1793467
Аноним 2020/08/26 10:11:22  №1788588 46
>>1788541
>Аттрибуты довольно разные, и точный список заранее неизвестен
Можно создать таблицу в которой у тебя будут поля attribute_name, и attribute_value, и джойнить её.
>Like не нужен, в mysql завезли же поддержку json полей
И ты таки уверен что оно прям быстро работать?
Ответы: >>1788602
Аноним 2020/08/26 10:22:05  №1788602 47
>>1788588
>Можно создать таблицу в которой у тебя будут поля attribute_name, и attribute_value, и джойнить её.
Получается паттерн EAV (Entity-Attribute-Value), про который в гугле плохо пишут.

>И ты таки уверен что оно прям быстро работать?
На хабре статья была, где сравниваниют eav и jsonb, правда там posgresql, а не mysql, можешь глянуть https://habr.com/ru/post/475178/ . Если кратко, то "потери производительности очень незначительные".

Ответы: >>1788608 >>1788899
Аноним 2020/08/26 10:27:46  №1788608 48
>>1788602
>Получается паттерн EAV (Entity-Attribute-Value), про который в гугле плохо пишут.
Ну, плюс-минус все интернет-магазинные cms которые умеют в мультиатрибутность такую реализуют это как раз так.
>Если кратко, то "потери производительности очень незначительные".
Ну, если так, и если тебе так удобнее-вопросов нет. В конце коноцов то что я бы так не делал не значит что так не стоит делать же.)

Аноним 2020/08/26 13:43:22  №1788846 49
>>1788526
Ну а yii в этом ряду откуда тогда? Он вообще рядом не стоит ни по качеству, ни по перспективам.
Симфони - это набор компонент и каждый проект на симфони может отличаться от другого, на самом деле, что-то взяли из симфони, что-то написали своё.
Но и для СИмфони и для Ларавела куча примеров на гитхабе, бери и изучай.

>>1787969
Как везде, пишут новое, поддерживают старое. Так как джаве уже дохера лет, то просто статистически старого больше чем нового, накопилось за годы. В отличие от какого-нибудь го, который очень молод и, чтобы встретить на нём серьёзное легаси надо постараться.

Ответы: >>1790591
Аноним 2020/08/26 14:16:53  №1788899 50
>>1788602
>{"factory": "Восход", "material": "Пластик"}
Ебать я вскекнул. Очередной лопух начитался про jsonb. А хули ты будешь делать если нужно "factory" переименовать? Если у тебя там "fucktory" написано, ты весь миллион товаров апдейтить будешь? Особенно охуенно будет с десятками свойств типа "resolution", которые у каждого тапка свои.

>Получается паттерн EAV (Entity-Attribute-Value), про который в гугле плохо пишут
Ты бы хоть прочитал что такое EAV. EAV это когда вся БАЗА ДАННЫХ создается в виде одной единственной таблицы.
Вот каноничный пример EAV https://dbfiddle.uk/?rdbms=postgres_12&fiddle=1972d91317eeb172ffd647d363b72d1c сразу видно почему он считается антипаттерном. Нужно каждую сущность собирать буквально по частям. Схема данных спрятана внутри самой базы, именно поэтому EAV считается медленней, чем обычная реляционная схема. Нужен минимум один дополнительный шаг чтобы получить схему.

Когда ты строишь каталог, то у тебя есть четкая схема:
Product "DELL UltraSharp U2718Q" <- Type "Monitor" <- Property "Resolution" <- "3840x2160 (16:9)"
Эта схема состоит из нескольких таблиц, полностью реляционна и нормализована. И никакого блядь отношения к EAV она не имеет.
Ответы: >>1788951 >>1788951
Аноним 2020/08/26 15:21:56  №1788951 51
>>1788899
>>1788899
>Когда ты строишь каталог, то у тебя есть четкая схема:
>Product "DELL UltraSharp U2718Q" <- Type "Monitor" <- Property "Resolution" <- "3840x2160 (16:9)"
>Эта схема состоит из нескольких таблиц, полностью реляционна и нормализована. И никакого блядь отношения к EAV она не имеет.

Вот тут нихуя не понял. Из каких таблиц состоит эта схема? Или ты предлагаешь на каждое свойство свою таблицу создавать?
Ответы: >>1789350
Аноним 2020/08/27 06:32:27  №1789350 52
Product-Diagram.png (43, 724x497)
497x724
>>1788951
Важно не из каких таблиц она состоит, это дело десятое. Какие нужны, такие и сделаешь. Важен сам факт того что если у тебя есть схема каталога и она состоит из таблиц, то это не EAV.

Если ты не знаешь как схему каталога составить, то посмотри популярные PIM системы вроде akeneo. Или просто погули "product catalog database scema". Вот тут, например, хорошо расписано https://www.codingblocks.net/programming/database-schema-for-multiple-types-of-products/
Ответы: >>1789381
Аноним 2020/08/27 07:08:55  №1789381 53
>>1789350
Спасибо за инфу, буду разбираться!
Ответы: >>1789409
Аноним 2020/08/27 07:26:46  №1789409 54
>>1789381
И всё-таки, настолько ли плох Json в моем случае? Планируется интернет магазин с тремя категориями товаров, всего товаров не больше 50 штук. Проблема в том, что атрибуты товаров заранее неизвестны. Или всё-таки реляционная и нормализованная бд лучше будет?
Ответы: >>1789461
Аноним 2020/08/27 08:11:59  №1789461 55
>>1789409
Чем меньше каталог, тем меньше причин использовать nosql. Сама структура у тебя сто проц будет реляционная. JSON можно использовать для значений, типа "значение, тип, единицы измерения" https://dbfiddle.uk/?rdbms=postgres_12&fiddle=34f95d845ab52b07b68c8aa37058b522 , и то лучше сделать отдельную таблицу для единиц измерения.
Ответы: >>1789571
Аноним 2020/08/27 09:28:59  №1789571 56
>>1789461
Все понял, спасибо за советы, пойду переделывать все.
Ответы: >>1789610
Аноним 2020/08/27 09:57:03  №1789610 57
>>1789571
Ну и самое главное, если есть возможность выбирать. То используй Postgres, а не mysql. Та же работа с json в mysql 8 это сраная шутка, по сравнению с postgres.
Ответы: >>1789638
Аноним 2020/08/27 10:11:58  №1789638 58
>>1789610
>То используй Postgres, а не mysql
Согласен.
>Та же работа с json в mysql 8 это сраная шутка, по сравнению с postgres.
На правах срача. Если потребовалось работать с json в БД, то ты что-то сделал через жопу. То самый случай когда НИНУЖНО.
Ответы: >>1789689
Аноним 2020/08/27 10:41:59  №1789689 59
>>1789638
Каждого любителя четвертой нормальной формы жизнь рано или поздно ебашит головой об угол стола. И пока он в полубессознательном состоянии сзади его приобнимает dba, приспускает штанишки и шепчет на ухо ДЕНОРМАЛИЗАЦИЯ.
Ответы: >>1789738
Аноним 2020/08/27 11:21:20  №1789738 60
>>1789689
>Денормализовать json-ами
Вернейший способ сделать кривое, неподдерживаемое, нерасширяемое говно. И вишенка на торте - тормозящее.

Работал я как-то у тимлида, который обожал кукареки про быстродействие sql и правильно составленные запросы. Когда выяснилось, что запросы даже с 4 джойнами работают всё ещё быстрее его сраного поиска по jsonнам, жопу ему разнесло как в хиросиме.
Денормализация делается отдельными индексными таблицами, и при ОЧЕНЬ ОСТРОЙ необходимости. Нахуй джсоны.
Ответы: >>1789853
Аноним 2020/08/27 12:37:34  №1789853 61
>>1789738
>запросы даже с 4 джойнами работают всё ещё быстрее его сраного поиска по jsonнам
Четыре LEFT джойна подряд могут занять четрые гб памяти изи. А подзапрос к четвертому джойну может насрать тебе в чай, потому что ты нагло пиздишь про скорость поиска по json'ам. Давай пруфы скорости, маня.

>Денормализация делается отдельными индексными таблицами, и при ОЧЕНЬ ОСТРОЙ необходимости. Нахуй джсоны.
По jsonb полю можно строить индекс. Gin или обычный btree, на любой вкус.
Ответы: >>1789949 >>1790306
Аноним 2020/08/27 13:11:52  №1789949 62
>>1789853
JSON в реляционную базу - минус мать

Я вас пидарасов с жсоном в базе всех сгною нахуй, вы черви-пидоры с говном в голове, пишете свою поебень в монгоебень или сразу в dev/null, быстро пиздец.
Ответы: >>1789969
Аноним 2020/08/27 13:20:40  №1789969 63
>>1789949
Ты своей тупорылой башкой понимаешь зачем вообще нормализуют данные? Текстовые поля тоже нормализуешь, дебич?
Ответы: >>1790055
Аноним 2020/08/27 14:03:25  №1790055 64
>>1789969
Я как раз отлично понимаю.
Если тебе надо сохранять хуиту в базу, которую целиком нужно писать/читать по айди - тебе нахуй не нужна для этого реляционная база, в противном случае, если у этих данных подразумевается структура, то нужна схема и нормализация, то есть не нужно JSON-говно.
JSON в реляционной базе, это как Any в статически типизированном языке.
Ответы: >>1790092
Аноним 2020/08/27 14:08:59  №1790066 65
зачем нужны статические методы?
Ответы: >>1792958
Аноним 2020/08/27 14:30:11  №1790092 66
>>1790055
Еще раз спрашиваю. Ты нормализуешь текстовые поля?
Ответы: >>1790130
Аноним 2020/08/27 15:13:53  №1790130 67
>>1790092
>Ты нормализуешь текстовые поля?
Нормализовать можно таблицу, а не поля.


Тебе из моего ответа непонятно что нормализовать нужно то у чего есть интересующая структура? Если этот текст везде используется целиком (его структура не важна), - он хранится в одном поле, если важны составляющие - они хранятся отдельно.
Ответы: >>1790153
Аноним 2020/08/27 15:27:50  №1790153 68
>>1790130
JSON это блядь строка. Тебе, долбоебу, просто дали возможность эту строку анализировать. LIKE в запросах использовал, а ~ ? Так вот это то же самое.
И никто не хочет ради нескольких приятных фишек поднимать другую базу, мейнтейнить её, ебаться с синхронизацией. Это блядь всем очевидно, топовые разработчики Postgres'а годами работают над удобной и быстрой работой с JSON https://www.youtube.com/watch?v=WtkhZ5P1uA8
Ответы: >>1790172
Аноним 2020/08/27 15:52:51  №1790172 69
>>1790153
>JSON это блядь строка.
А, ясно, ты - дебил. Массив, стало быть, - тоже строка.

JSON в первую очередь подразумевает структуру, с полями и вложеностями (и неявно, так как их и нет - с типами).

Дебилы которые хуярят JSON в реляционную базу делятся на 2 вида:
1. Слегка дебилы. Они сохраняют JSON, структура которого не важна и будет важна. Эти люди скорее всего просто не осведомлены, что писать и читать всякое говно по ключу в реляционку не обязательно, что для этого есть масса других более подходящих инструментов.

2. Критические дебилы. У них просто нет мозга для надлежащего дата-дизайна, поэтому любую мало-мальски сложную структуру они энкодят в JSON и пихают в базу. Нахуя им вообще нужна реляционка, когда есть монгоперделка и другие доступные их имбецильным мозга хэш-таблицы - это остаётся загадкой природы.
Что же происходит когда все эти груды JSON-говна надо наконец захендлить? Ну они пишут горы невменяемого быдлокода с миллионом ифов, где через строчку гадают есть ли такое-то поле, нужного ли оно типа, не лежит ли там нулл, действительно ли существует такой айдишник - подобное вот петушение, которое без крови из глаз читать невозможно. А всё из-за недостатка когнитивных способностей.

Не знаю к какому виду дебилов ты относишься, сначала думал что к первому, но после твоего сравнения JSON с текстом - подозреваю что ко второму.

В любом случае продолжать с тобой разговор бесполезно. Просто выйди в окно - сделай миру хорошее.
Ответы: >>1790173 >>1790174 >>1790180
Аноним 2020/08/27 15:53:49  №1790173 70
>>1790172
>не важна и не будет важна


selffix
Аноним 2020/08/27 15:56:22  №1790174 71
>>1790172
Я видимо к первым отношусь. Пихаю джейсон в виде разных payload полей, которые никак не влияют на работу базы, а используются только бизнес логикой. По мне удобнее, чем нормализовать всю базу под кучу возможных вариантов таких документных записей.
мимо
Аноним 2020/08/27 16:12:28  №1790180 72
>>1790172
>А, ясно, ты - дебил. Массив, стало быть, - тоже строка.
Тухлодырый ты пиздобол. "JSON is a text format" цитата блядь из RFC. Но тебе, хуесосу, конечно виднее что массив, а что текст.

>Эти люди скорее всего просто не осведомлены, что писать и читать всякое говно по ключу в реляционку не обязательно, что для этого есть масса других более подходящих инструментов.
Понятно, ты джун, который нихуя не понимает что такое гетерогенность и её последствия.

>В любом случае продолжать с тобой разговор бесполезно. Просто выйди в окно - сделай миру хорошее.
Тебе ещё и 18 нет.
Все ясно, дело раскрыто. Малолетний долбоеб, который с реальной базой никогда не работал, прочитал в википедии что такое четвертая нормальная форма.
Аноним 2020/08/27 18:51:13  №1790306 73
200827214038.png (8, 1896x332)
332x1896
Screenshot6.png (42, 932x891)
891x932
>>1789853
>Давай пруфы скорости, маня.
Держи.

4 объекта, Data1, Data2, Data3 и Data4.

У каждого есть code, и привязки Data1->Data2, Data2->Data3 и тд.
Использовалась доктрина, но жестко прописывался селект во всех случаях, так что она возвращала массивы.

Делал 10000 выборок на каждый тип запроса.
Самое быстрое как и ожидалось поиск по прямому значению.
4 джойна сделали запрос тяжелее (естественно, лол), но не настолько как ожидалось.

А вот поиск в json оказался самым прожорливым. Причем прошу заметить json был одноуровневый.

Не надо меня деанонить позязя.
Ответы: >>1790372 >>1790428
Аноним 2020/08/27 19:57:19  №1790372 74
>>1790306
Ты кукухой поехал? Где запрос? Где схема базы? Какой нахуй пхп?
Вот тебе песочница https://dbfiddle.uk/?rdbms=postgres_12 напиши запросы по человечески.
Ответы: >>1790384
Аноним 2020/08/27 20:17:10  №1790384 75
>>1790372

Делай сам, лол. Но ты не сделаешь. Криворукий петуч с джсоном в базе (ЕБАТЬ МОЙ ХУЙ ГОВНО КРИВОРУКОЕ КРИВОЖОПОЕ ОТКРЫВАЕТ РОТ БЛЯДЬ) выебывается в треде.
Делать мне больше нехуй как прямые запросы писать.
Ответы: >>1790389
Аноним 2020/08/27 20:19:52  №1790389 76
>>1790384
Это троллинг тупостью? Возьми запрос, который сгенерила доктрина и сделай EXPLAIN. Пиздец, нахуй ты вообще выполз, дегенерат?
Ответы: >>1790398
Аноним 2020/08/27 20:28:03  №1790398 77
>>1790389
Что я получу, когда это сделаю? Твою порванную в клочья сраку окончательно? Зачем мне это?

Если бы ты общался культурно, я бы подумал над этим. Если бы тебе действительно было интересно, ты бы проверил сам. А так я только в лучшем случае добьюсь твоего слива.

Один в один история как с петухом, под руководством которого я работал 3 месяца. Когда он увидел, что я выкинул к хуям весь его код, упростил запросы вдвое и добился прироста производительности, он изошелся на говно.

В нынешней конторе мы просто не суем массивы в базу, всё. Ладно, суем, но только в тех случаях когда там будет хер знает что и по этому хер знает чему не будет никакой сортировки или поиска..
Ответы: >>1790400
Аноним 2020/08/27 20:33:05  №1790400 78
>>1790398
Че ты так порвался? Написать все это на пхп было в сто раз сложнее, чем сделать explain. У меня вообще ощущение, что это был не твой пост, а ты просто мимо проходящий хуеплет.
Ответы: >>1790410
Аноним 2020/08/27 20:46:01  №1790410 79
>>1790400
>Че ты так порвался?
Аргумент "у вас баттхерт" был моветоном уже в 2012. Простите, сэр, но в наше время это безнадежно устарело.
>Написать все это на пхп было в сто раз сложнее, чем сделать explain.
И фикстуры с псевдоданными заполнить, ага. И ключи для связей проставить. И индексы ручками генерить вместо кнопки в админке. Я слишком долго не имел дела с прямыми запросами, что бы ебаться с этим. Спулить 3 бандла и набросать схему мне гораздо проще.

Если бы тебя действительно это интересовало, ты бы сам проверил.

Я занялся этим только из спортивного интереса. Я знаю, как именно работает БД (без совсем уж подробностей, но в общих чертах), поэтому утверждение о том, что поиск в массиве может быть быстрее джойнов заставило меня охуеть. Я просто убедился в том, что я ещё не ебанулся и это говно таки медленнее, как и должно быть. Скриншот скинул для анонов.
Аноним 2020/08/27 21:11:51  №1790428 80
>>1790306

Тут есть небольшой подвох. MySQL кеширует ответы на запросы, потому для чистоты эксперимента стоит добавлять SQL_NO_CACHE ( https://dev.mysql.com/doc/refman/5.6/en/query-cache-in-select.html ) в запрос. У тебя их нет, и если ты запустишь свой код второй раз, возможно, что ответы возьмутся из кеша и не будут отражать действительность.

Вторая проблема в том, что первому запросу может быть тяжелее выполняться, так как на момент его выполнения все данные лежат на диске, а последнему запросу не надо их загружать с диска, они уже в памяти. Чтобы избежать этого, тест можно прогнать первый раз для "прогрева" и второй раз уже для измерения.

Стоит учитывать эти 2 момента, чтобы не получить искаженные результаты.

Ну и то, что джойны тормозят - это не совсем так. Конечно, если джойнить и фильтровать 2 огромные таблицы без индексов, то будет тормозить, но разве джойны в этом виноваты?
Ответы: >>1790444
Аноним 2020/08/27 21:43:06  №1790444 81
>>1790428
>У тебя их нет, и если ты запустишь свой код второй раз, возможно, что ответы возьмутся из кеша и не будут отражать действительность.
У меня кеш по умолчанию отрублен. Ради интереса перепроверил, нихуя не поменялось.
А вот забавный момент - плейсхолдеры дают реальный прирост быстродействия, не ожидал. Конечно, на реальном проекте за 30000 запросов выебут, но тут они дали полуторократный прирост скорости.

>Ну и то, что джойны тормозят - это не совсем так.
Мне ОЧЕНЬ сильно печет жопу то, что с воплями про страшные и ужасные джойны делают кривую структуру БД, которая в результате тормозит сильнее чем изначальные джойны. Видел своими глазами. Данный товарищ со своими массивами просто проехался по старому бугурту.
Ответы: >>1790448
Аноним 2020/08/27 21:48:05  №1790448 82
>>1790444
Какими нахуй массивами, долбоеб? Я вообще всю дорогу говорил про тип данных jsonb в постгресе. Для которого давно есть индексы и язык запросов. Но ты же гений (долбоеб), который генерит запросы с помощью ОРМ без explain'а, и при этом высирающий что-то про тормоза и кривую структуру бд.
Ответы: >>1790456
Аноним 2020/08/27 22:08:17  №1790456 83
>>1790448
>Я вообще всю дорогу говорил про тип данных jsonb в постгресе.
Вот именно его я и использовал.
>Для которого давно есть индексы и язык запросов.
Использовался именно этот запрос.
И оно тормозит.

>Но ты же гений (долбоеб)
Оскорбления от человека, который на полном серьезе засовывает в БД json и рассказывает, как это заебись, не трогают меня, извини. Ты как слюнявый деревенский дурачок со спущенными штанами, который кричит прохожим, что у них грязные волосы. Я просто тыкаю в тебя палкой для собственного веселья, пока мне не надоест. Я потратил на тебя время, в ответ слышал только бессмысленные оскорбления, голословные (и насквозь лживые) утверждения о производительности, которые я опровергнул для себя, и требования предоставить больше данных. Ты этого не заслуживаешь, сори.
Ответы: >>1791393
Аноним 2020/08/28 04:32:34  №1790591 84
>>1788846
>Ну а yii в этом ряду откуда тогда?
Именно 3 указзанных мной фреймворка указаны в вакансиях. Зачастую так же в один ряд. Мол "знаещь хоть один? Пойдёт".
Ответы: >>1791374
Аноним 2020/08/28 16:11:42  №1791329 85
Открыл для себя удивительный мир ПХП:

$a = null;
$b = $a["random_key"]; // $b == null !
$a["another_key"] = 100500; // $a теперь Array!

вы че ебанутые? вы че блять реально ебанутые?
Ответы: >>1791389 >>1791391
Аноним 2020/08/28 16:59:39  №1791374 86
>>1790591
Yii это маркер вакансий уровня "НЕ ЛЕЗЬ, ОНА ТЕБЯ СОЖРЁТ!". Соответственно, не лезь, анон, оно реально тебя сожрёт.
Аноним 2020/08/28 17:12:19  №1791389 87
>>1791329
Переменная на то и переменная
Аноним 2020/08/28 17:14:27  №1791391 88
>>1791329
А что собсна не так?

Конструкция $var[] = 321; добавляет новое значение в массив.
И есть простой вызов $var['random'], который возвращает пустое значение, так как оно пустое. =)
Этим же $var[рандомный индекс] можно брать символы из строки с соответствующим индексом.
Аноним 2020/08/28 17:15:26  №1791393 89
>>1790456
Это каким же долбоебом нужно быть, чтобы писать что-то о производительности запросов используя ссаную ОРМ.

>Да медленнее епты, только запрос я не покажу. Какой нахуй эксплейн? Какой план запроса? Просто лень постить, все там медленнее. Просто это ты хуевый, поэтому запрос я постить не буду. Но там точно медленнее.

Одни из лучших программистов на планете пять лет ебуться чтобы добавить поддержку JSON работающую быстрее чем у оракл и монги. Но долбоебу на двачах нинужно. Ему ебать орм запросы пишет. У него все три таблицы в базе нормализованные, а значит никому больше JSON не нужон.

Ну подставляй ебало, долбоеб. Вот тебе тест производительности https://dbfiddle.uk/?rdbms=postgres_12&fiddle=d41fe5001e04b9f96465de3194c3060b запросы детские, чтобы ты, чмоня, в них разобрался.
Четыре LEFT JOIN' а подряд. Против Json path запроса в одну строчку. По скорости json выигрывает в два раза, по затратам в десять.

Так что, кукаретик, свои запросы запостишь? Какое на этот раз будет оправдание?
Ответы: >>1791894
Аноним 2020/08/29 12:34:28  №1791894 90
>>1791393
Ну давай разбирать по частям тобой написанное.
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=2300a430c9380dd5a5979eb1769a88e4
Вот мы добавляем ещё одно условие и сортировку, и наша быстрота куда-то испаряется, потому что json говно оно и есть говно.
Да, я прекрасно знаю, что у нас теперь разные по факту запросы (проблема в wildcard и and), мне на это похуй. Можешь сам написать как правильно, я в этом не разбираюсь и не желаю разбираться.
Самое главное - в случае join ты получил именно требуемые данные.
В случае выборки json ты выбираешь его целиком. В результате в дереве у тебя пачка элементов, с fifth.id не удовлетворяющими твоему условию. Что ты будешь с ним делать?
Ну то есть я знаю, ты будешь петушить результат выборки перебором в коде, конечно. Muh speed.

>запросы детские
ну это неудивительно, чем сложнее будут запросы тем отсос json говна будет глубже.
Ответы: >>1792057
Аноним 2020/08/29 13:15:55  №1791908 91
В догонку.
Товарищ, который запостил
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=34f95d845ab52b07b68c8aa37058b522
очень глубоко и сильно неправ. Это грубая архитектурная ошибка. Property не должно быть привязано к Product никаким образом. А вот Value привязано к обеим.

Вот это
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=28a2795b841b1879b68413f0e10aea9c
Правильный вариант.

На всякий случай объясняю - что бы просьба отсортировать по диагонали не вызывала безысходный обсер. (У меня тоже не всё заебись, у Property должен быть Type и ссылка на НЕСКОЛЬКО РАЗНЫХ таблиц, в которых может быть INT, STRING и тд в колонке VALUE, а в нынешней схеме виден обсер при сравнении дианонали), но такая структура значительно ближе к рабочему варианту.
Ответы: >>1791909
Аноним 2020/08/29 13:20:15  №1791909 92
>>1791908
Где ты вообще там увидел Product? Там схема ProductType<-Property<-Value. Это вообще все сделано чтобы показать как можно использовать JSON в vaue.
Аноним 2020/08/29 16:24:06  №1792057 93
>>1791894
>Вот мы добавляем ещё одно условие и сортировку, и наша быстрота куда-то испаряется, потому что json говно оно и есть говно.
Криворукий ты обмудок. Кого ты хочешь наебать? Пенек осиновый, ты ведь нихуя не понимаешь почему json тут быстрее, и почему я с самого начала знал что он быстрее.
JSON Path запрос выполняется всего один раз на каждый документ. А джойны генерят записи в геометрической прогрессии, примерно 350К записей по 14 колонок. Снаружи весь этот пиздец может быть не видно, но в память все это попадает перед фильтрацией. И чем больше связей, тем медленнее это будет работать. И никакие индексы тут не помогут, потому что размер индексов приближается к размеру самой таблицы. С каждым новым джойном затраты на Json path будут возрастать линейно, в то время как обычные SQL запросы будут убивать сервер нахуй. Я добавил всего 100К записей на пятый уровень и время увеличилось до секунды, в три раза медленнее чем json path. С миллионом не факт что вообще выполнится, а не отвалится по таймауту.
Это физический предел реляционной модели, манипулировать в запросах иерархиями такой глубины становится просто не выгодно.

https://dbfiddle.uk/?rdbms=postgres_12&fiddle=f8de9cd4c650a284b1c6d3416b2e06d3
Ссу тебе на ебало второй раз. Начинай маневрировать.

>а, я прекрасно знаю, что у нас теперь разные по факту запросы (проблема в wildcard и and), мне на это похуй
Что ты несешь долбоеб криворукий? С какого хуя вдруг они стали разными? Я специально добавил подсчет количества, чтобы было видно что выборка одинаковая. Если запрос составлен правильно, то количество записей будет одинаковое. Это же надо так обосраться, беги читать в википедии как лефт джойны работают.

>В случае выборки json ты выбираешь его целиком. В результате в дереве у тебя пачка элементов, с fifth.id не удовлетворяющими твоему условию. Что ты будешь с ним делать?
Это троллинг тупостью? Это типа не очевидно, что раз можно сделать запрос любой сложности, то и достать нужный кусок тоже можно? Специально для тебя долбоеба добавил запрос, который возвращает только элементы, в которых fifth.id удовлетворяет условию.

Обоссан по всем пунктам. Но ты ловко вильнул сракой и опять не запостил свои запросы, которые сто проц доказывают что json говно. Какое оправдание будет на этот раз?
Ответы: >>1792152
Аноним 2020/08/29 17:18:02  №1792085 94
Как пыхошторму дать понять что у папки src неймспейс App, например?
Ответы: >>1807631
Аноним 2020/08/29 18:50:11  №1792152 95
>>1792057
Ты понимаешь, что этими 2 типами запростов ты решаешь принципиально разную задачу?
При создании массивов через рандом у тебя получается пирамида зависимостей.
Часть элементов пустые, часть заполненные.
https://pastebin.ubuntu.com/p/rBvgGmKG57/
Здесь json из твоей базы, удовлетворяющий условию. Смотри на него внимательно. В нем есть такие шикарные элементы, как third null, к примеру.

Что нам с ними придется делать? Правильно, в коде как мы их получили проверяем.

Фактически, своим json ты решаешь следующую задачу - выбрать ПЯТЫЙ круг, прилинкованные к нему элементы ПЕРВОГО круга (через всю цепь) и все дети ПЕРВОГО круга на похуях. Ну типа потом мы в коде их как - нибудь обработаем.

Не возражаешь, если я так же решу задачу джойнами? Линкуем сразу 5 круг на первый.
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=7dc49b28145f6aa023b5093477c63c86
Смотрим на перфоманс и орем.
Из-за того, что я линковал тир к первому рандомом вместо правильной цепочки, там разное количество элементов. Если линковать правильно будет одинаковое. Можешь заняться.

То есть, я беру твою базу с json и нормализую.
Теперь у меня есть 2 пути.
1. Либо ОЧЕНЬ прожорливый запрос, который тем не менее выдает абсолютно чистые данные, с которыми потом гораздо быстрее работать.
2. Либо запрос, который решает твою задачу, но экономичнее в 100 раз.
Оба пути обладают своими плюсами и минусами. Оба пути позволяют отнести твою json базу туда, где её и место - на помойку.

Давай остановимся на втором варианте? Я ускорил твой запрос в 100 раз. Это достаточно, что бы до тебя дошло, что ты творишь дичь? Я ожидаю новый поток визга и оскорблений, но на этом этапе я просто молча ухожу, считая дальнейшее общение бессмысленным. Оставайся пердолить свой полудохлый сервак, забитый сраным говном, и считать это хайлоадом.


У меня дежа-вю. Красный, потный Олег понимал, что он целый год пилил кривую хуйню, пялился в код, из которого была выкинута его json параша, и который работал в десятки раз быстрее его говна, был свободно расширяем в любом направлении, и судорожно придумывал как бы обосрать, вытаскивал из головы сценарии, которые решались 2 часами моей работы и вообще не прокатывали на его коде, лол.
Ответы: >>1792406
Аноним 2020/08/30 04:11:51  №1792406 96
>>1792152
>Здесь json из твоей базы, удовлетворяющий условию. Смотри на него внимательно. В нем есть такие шикарные элементы, как third null, к примеру.
>Что нам с ними придется делать? Правильно, в коде как мы их получили проверяем.
Ты в натуре ебанутый? Они пустые, потому что я их оставил пустыми, долбобеб. Я блядь своими руками создал этот JSON, убрать их дело двух секунд.

>Не возражаешь, если я так же решу задачу джойнами? Линкуем сразу 5 круг на первый.
Вот тут в голос. Ебать ты гений, лимит 400 поставил. 400 чего? Попугаев? Пиздуй в википедию читать как лефт джойны работают.
На сколько же ты хуевый. Ты продублировал колонку (не денормализация), добавил кучу foreign key'ев (долбоеб, там индексы и так есть), а производительность улучшилась только когда ты выкинул нахуй весь запрос и он теперь выдает рандомную хуйню. Буквально случайный набор цифр и букв.

После своих 20 IQ мувов ты больше не можешь добавлять записи на пятый уровень не зная какой id будет на первом. А как их получить? Да надо блядь опять пройти по всей иерархии, долбобеб. Ты же просто нагенерил случайной хуйни и этот Id просто не соответствует положению элемента в иерархии. Ахахахах, я до этого думал что ты просто джун, но теперь то понятно что ты с базой не работал никогда в своей жизни.

>То есть, я беру твою базу с json и нормализую.
Никто не делает всю базу на json, долбаеб. Ты просто можешь создать копию данных для более удобного поиска по ним. Собственно так и происходит в мое сниппете, слепой ты дегенерат.

>запрос, который решает твою задачу, но экономичнее в 100 раз
Охуенно ускорил, кек. Выдает рандомную хуйню, зато быстро.

>Давай остановимся на втором варианте? Я ускорил твой запрос в 100 раз. Это достаточно, что бы до тебя дошло, что ты творишь дичь?
Что ты ускорил, долбоеб? Ты типа думал я не открою и не посмотрю, или как? Ты серьезно думал что я не увижу лимит? Ты серьезно думал что я не увижу что запрос выдает мусор?

>я просто молча ухожу
А как же твои запросы, которые тебе так было лень показывать? Опять вильнешь сракой и проигноришь? Показывай запросики, хуйлуша.
Аноним 2020/08/30 08:27:12  №1792471 97
что в БД значит INT(10) CHAR(20)?
Ответы: >>1792958
Аноним 2020/08/30 09:22:59  №1792539 98
>>1785871 (OP)
PHP-компонента на нашем сервере периодически плюется ошибками (они размазаны по времени, встречаются у разных юзеров), которые утверждают что AUTH_COOKIE у клиента не найден, параллельно с этим nginx часто выбрасывает ошибку 502 ("no live upstreams"). С хрена ли вдруг кука для аутентификации пропадает?
Мои теории поначалу были в том что пыха не справляется с высокой нагрузкой и поэтому nginx говорит "502", но как объяснить отсутствие куки в запросе где она всяко должна быть?
Ответы: >>1792575 >>1792958
Аноним 2020/08/30 10:00:26  №1792575 99
>>1792539
Ты все скинул в одну кучу. Я читаю властелин колец, почему у меня болит нога, а мой друг периодически обсирается.

1) Я читаю властелин колец
>AUTH_COOKIE у клиента не найден.
Непонятно почему это вдруг стало ошибкой. Куки по определению ненадежное хранилище, и нужно быть готовым к тому что там либо хуйня, либо вообще ничего нет.

2) У меня болит нога
>С хрена ли вдруг кука для аутентификации пропадает?
Куки это часть HTTP запроса, их отправляет браузер. Перед отправкой запроса браузер смотрит домен, путь и время устаревания, и принимает решение отправлять или нет куку в запросе.
Так что кука либо есть в запросе, либо её нет. Кука может быть создана таким образом, что браузер её не отправил. Например домен не совпал или она протухла. А может быть кто-то модифицировал запрос уже после получения. В любом случае нужно смотреть что приходит на nginx непосредственно от пользователя.

3) Мой друг периодически обсирается
>nginx часто выбрасывает ошибку 502 ("no live upstreams")
Эта ошибка легко гуглится. Да, пхп не успевает вовремя ответить. Определяется так же логами nginx.
Ответы: >>1792589
Аноним 2020/08/30 10:15:51  №1792589 100
>>1792575
>Определяется так же логами nginx
Я их анализировал. upstream_response_time везде не превышает 1.5 секунды (таймаут выставлен в 5 секунд), возможно все дело в том что max_fails выставлен в 1

>Куки по определению ненадежное хранилище
Юзер аутентифицировался и кука хранится у него сутки. Потом спустя пару часов он ловит ошибку из-за отсутствия куки, с фига ли?

И опять же: ошибки nginx "no live upstreams" всегда соседствуют с ошибками про отсутствие куки. Совпадение? Какая-то связь точно есть
Ответы: >>1792640
Аноним 2020/08/30 11:20:52  №1792632 101
image.png (51, 1050x261)
261x1050
Есть предложения?
Аноним 2020/08/30 11:26:43  №1792640 102
>>1792589
Так я тебе и пишу чтобы сами запросы смотрел. Главное что на nginx пришло, а не какой друг обосрался.
Аноним 2020/08/30 15:03:18  №1792838 103
$_SESSION это надежная хуйня? Юзверь не может никак подменить ее переменные?
Ответы: >>1792946 >>1792961
Аноним 2020/08/30 16:57:00  №1792946 104
>>1792838
Подменить нет, может спиздить чужую (session hijacking) но ты от этого никак не защитишся, ну кроме наворачивания https и подобного.
Аноним 2020/08/30 17:15:46  №1792958 105
>>1790066

Для вспомогательных функций, которым не нужен объект ($this) и его поля. Например:

- статические конструкторы, когда мы хотим сделать несколько способов создания объекта
- функции-утилиты, паттерн unility class

>>1792471

INT(10) - при выводе числа на экран зарезервировать под него 10 символов. CHAR(20) - строка из ровно 20 символов.

>>1792539

Куки могут отсутсвовать у поисковых роботов.

Аноним 2020/08/30 17:16:53  №1792961 106
>>1792838

Не может, так как данные сессии хранятся в файле на сервере, а у юзера в куке хранится только идентификатор (из которого получается имя) файла.

>>1785933

По идее должен работать как описано в мануале (либо выдавать ошибку с конкретным указанием проблемы).
Аноним 2020/08/30 17:17:25  №1792962 107
>>1770074 →

> Пробовал создавать новые объекты vector через сlone, не получалось

Если ты клонируешь объект, содержащий другие объекты (например, клонируешь Департамент, в котором есть Работники), то основной объект клонируется, а вложенные - нет, просто в объект-клон копируются ссылки на них. Надо использовать магический метод __clone и в нем вручную клонировать вложенные объекты.

Антикризисные меры логичнее сделать в отдельном объекте ("антикризисный комитет"). Так как у каждого класса должна быть своя зона ответственности, а в твоем примере Департамент отвечает и за управление списком работников, и за антикризисные меры. Дальше добавится еще задача, ты ее снова засунешь в Департамент, и получится класс-монстр, который занимается всем на свете.

> dismissEmployee(int $id)

Неудачно сделан аргумент - id - откуда мы его должны брать, он ведь не прописан в Работнике? Логичнее было бы сюда передавать объект-работника и пусть класс сам разбирается, как его найти.

Увольнение инженеров лучше было бы сделать так:

- выбрать всех инженеров (метод в департаменте)
- отсортировать по рангу (usort)
- отрезать первые 40% (array_slice)
- уволить по получившемуся списку

То есть тут можно использовать готовые функции работы с массивами вместо сложных циклов с кучей if внутри.

> $job = get_class($search->getJob());
> $search->setJob(new $job(), $maxRank, true);

Тут стоило сделать метод changeRank() в Employee. Так как этот класс отвечает за хранение и обновление ранга, и код логичнее всего поместить в него. И $e->changeRank(...) проще читать, чем это.

Неудачно сделан учет ранга. Логично иметь объект Job с базовыми (неизменными) ставками, и отдельно поле rank, и при расчете зарплаты учитывать ранг. А ты вместо этого меняешь сами базовые ставки в объекте Job. Если вызвать метод updateJob() несколько раз, то базовая ставка будет многократно увеличена:

$emp->updateJob(3);
$emp->updateJob(3);
$emp->updateJob(3);

То есть этот метод работает некорректно.
Ответы: >>1793026 >>1794773
Аноним 2020/08/30 17:58:12  №1793026 108
>>1792962
Спасибо. Сделаю рефакторинг и отправлю еще раз =)
Аноним 2020/08/31 06:58:35  №1793420 109
Почему меня все ИРЛ отговаривают от пыхи? 7ая пыха на жабу похожа, думаю до джуна смогу сейчас прокачаться за месяца 3 и последний год универа пытаться найти работу. На какой-нибудь джаве я так в жизни не смогу, один только спринг займет полгода плотного вката.
Ответы: >>1793532 >>1794650
Аноним 2020/08/31 07:46:01  №1793467 110
7392.JPG (2071, 3872x2592)
2592x3872
Ответы: >>1793699
Аноним 2020/08/31 08:29:07  №1793532 111
>>1793420
Есть критика от незнающих, типа "ыыы пыха гавно я вот на ноде пишу", на нее похуй. Основные проблемы пхп это то что она в мелкосреднем бизе на говноцмс и среди всяких говношопов популярна, что равняет уровень разработчиков многих с нулем, ну и сама как язык технически ну такое.

Yii и битрикс говно, симфони ок, ларавель зависит от конторы, но это RAD, поэтому тоже может быть мелкосредний биз и говно.

Вкат в симфони это типа вката в спринг на самос деле, там блин чтоб json принять по паттернам пишут ивент листенер
Ответы: >>1793748 >>1794090
Аноним 2020/08/31 11:33:49  №1793699 112
>>1793467
Можешь по документации посмотреть, там есть возможность выбрать версию. Или посмотри по чейнджлогам. Как мне кажется, что-то основное не менялось.
Аноним 2020/08/31 12:07:05  №1793748 113
Ответы: >>1794090
Аноним 2020/08/31 14:18:27  №1793924 114
Челы, а если функция mail() не отправляет письмо с сайта - проблема ведь в хостинге? Обычно если проблема с почтой была - эта функция всё-равно работала и означало это, что кто-то, возможно даже я, где-то обосрался.
спасите меня от битрикса, я начинаю понимать всю его пиздецовость. Ладно сайты на нём делать, я кастомной админкой сейчас занимаюсь и это такая хуйня, что я ебал. Никакой документации, ничего. А ещё в админке битрикса 2016 год стоит, в 2к20...
Ответы: >>1793951 >>1793983
Аноним 2020/08/31 14:38:47  №1793951 115
>>1793924
Чё за функция mail() блять?
По-хорошему нужно почту отправлять через апишку почтового сервиса (mailchimp, mandrill, sendgrid, mailgun etc), желательно с авторизованного ящика/домена, иначе это говно будет фильтроваться большинством почтовых серваков с вероятностью 76%.
Ответы: >>1793956 >>1793983
Аноним 2020/08/31 14:44:19  №1793956 116
>>1793951
> Чё за функция mail() блять?
http://www.php.su/mail()
> будет фильтроваться большинством почтовых серваков с вероятностью 76%.
И попадать в спам. Для меня это не страшно - мне главное, чтобы письмо дошло, а отправляться оно в итоге будет другим образом.
Аноним 2020/08/31 15:04:26  №1793983 117
>>1793924
>Челы, а если функция mail() не отправляет письмо с сайта - проблема ведь в хостинге?
Ты джун? Без обид, просто интересуюсь.
Проверяешь скриптом https://conetix.com.au/support/simple-php-mail-test/. Если не уходит - говоришь, что проблема в хостинге и забиваешь хуй. Количество вещей, которые могут пойти через жопу, огромно, там нужен админ.
>>1793951
Ну это перебор. Это платное ультимативное решение для рассылки собственно спама.
Если ты не шлешь 100 писем про увеличение члена в минуту, просто правильно настроенного smtp хватит.
Хотя на одном проекте я аж тест написал, запускающийся каждые 10 минут с проверкой не забанили ли нам очередной ящик, лол.
Ответы: >>1794005 >>1794041
Аноним 2020/08/31 15:17:51  №1794005 118
>>1793983
> Ты джун?
В пыхе и в бэке в целом - да. У меня задачи в основном фронтовые, бэк обычно одноклеточный на битриксе наверное только такой и есть, так что развития в нем особого нет, пока работу не сменю.
Аноним 2020/08/31 15:37:37  №1794041 119
Аноним 2020/08/31 17:00:52  №1794090 120
>>1793532
Вот этого удваиваю, дело говорит. Но только добавлю, что зачастую действительно ограничения (отсутствие ассинхронности, рожденность, чтобы умирать) языка делают больно, потому что не всё на свете работает по принципу "получил запрос, отдал синхронный ответ и умер".
Для какого-нибудь чтения из очередей или там работы по сокетам приходится городить костыли, появляются всякие roadrunner и так далее, что безусловно решает бизнес-задачу, но всё равно технически больнее, чем если бы в php была нативная поддержка всего этого.

>>1793748
Во-первых, хуёвой архитектурой (огромная связность + костыли), заточенной на статики и повальное использование магических ассоциативных массивов.
В итоге _нормально_ писать на yii очень сложно. Оно конечно лучше битрикса, но только потому, что хуже битрикса сделать продукт просто невозможно.
Ответы: >>1794092
Аноним 2020/08/31 17:04:52  №1794092 121
>>1794090
Кстати, в тему всяких роадраннеров, воркеров, очередей и прочего. Поработав со всеми этими технолагиями я пришёл к выводу, что самое удобный и надёжный подход это (как ни странно) рождать и умирать php на каждый запрос. Делать мини-сервер на go или ноде, который будет вычитывать сообщение и слать его через http на локалхост (ну или куда угодно), где nginx через php-fpm уже запустит php-шный процесс, который обработает запрос и отдаст ответ.
Это позволяет использовать все стандартные инструменты php, не бояться утечек памяти в пхп, не бояться "забивания" очереди десятью тяжелыми задачами и тд и тп
Аноним 2020/08/31 18:33:34  №1794156 122
Нормально ли будет, если в Laravel мешать eloquent и query builder? Например в модель запихнуть метод с фасадом DB внутри? Или так лучше не делать?
Ответы: >>1794164
Аноним 2020/08/31 18:40:46  №1794164 123
>>1794156
Делать чтение билдером/сырым sql, а запись через орм - норма.

Фасады говно, но ларавельщикам сойдет
Ответы: >>1794175
Аноним 2020/08/31 18:55:09  №1794175 124
Аноним 2020/09/01 00:12:36  №1794317 125
2020-09-0103-09-44.png (19, 1132x429)
429x1132
Вот решаю одну из первых задачек, но хочу ещё округлить получившееся число до первых двух знаков после запятой. Что я делаю не так? Переменные нельзя в эту функцию добавить? А как тогда?
Ответы: >>1794320
Аноним 2020/09/01 00:15:37  №1794320 126
2020-09-0103-14-20.png (18, 1153x427)
427x1153
>>1794317
Я ебанько, вот нормальный скрин.
Ответы: >>1794444 >>1794454
Аноним 2020/09/01 05:01:13  №1794444 127
>>1794320
что такое $2 вторым параметром?
Ответы: >>1794524
Аноним 2020/09/01 05:32:29  №1794454 128
>>1794320
Тебе нужно вторым параметрам вставить число, на сколько знаков округлять. Не понятно зачем ты написал туда знак доллара.
Аноним 2020/09/01 07:31:28  №1794499 129
Анончики, подскажите по Laravel. Нормально ли самому добавлять js файлы в resources/js? Или есть какой-то более подходящий способ?
Ответы: >>1794501
Аноним 2020/09/01 07:33:33  №1794501 130
>>1794499
импортируй нужные тебе js в app.js
Аноним 2020/09/01 07:50:36  №1794524 131
Ответы: >>1794585 >>1794792
Аноним 2020/09/01 08:29:46  №1794585 132
>>1794524
какой БОГАТЫЙ синтаксис у языка
Аноним 2020/09/01 09:45:44  №1794650 133
>>1793420
Пехапе это вакансии условно 1-2 левела, а джава 2-3. Вкатиться легче в php, но и говнокода и долбоебов там на порядок больше, а зп в среднем меньше (300к сакраментальные ты вряд ли наберёшь).
В джаву вход сложнее, но там все круче и денег больше.

Так как ты джун на дваче, скорее всего ты решишь, что тебе и 40к норм, зато вкат полегче и будешь в ближайшие 5 лет копаться в говне на битриксе или (при особой удаче) на ларавеле. Жду через пять лет пост от тебя здесь вида "кококо 5 лет прошло, а я до сих пор джун-формошлеп, все работодатели козлы, помогите вкатиться).
Php я не хейчу, если что, а вот любителей лёгких путей - да.
Ответы: >>1809263
Аноним 2020/09/01 11:14:20  №1794766 134
на чем делают картинки для сайта?
Аноним 2020/09/01 11:19:51  №1794773 135
>>1792962
- оставил сериализацию
- сделал увольнение сотрудников по схожести объекта (Если один равен другому - удалить)
- прилепил ко всему встроенные функции, избавился от кучи условий
- зарплата считается на основе данных в классе профессии. (базовая ставка изменяется только для антикризисных мер)

Теперь правда отличаются прошлые данные (с ideone) и текущие.
Прочитал измененный код, вроде все должно быть хорошо =).

https://github.com/Back1ng/vector
Ответы: >>1807633
Аноним 2020/09/01 11:32:46  №1794792 136
>>1794524
Ору, анончик. Ты сделал мой день!
Аноним 2020/09/01 12:48:33  №1794858 137
Верстать обязательно уметь для пыхера? Или общих понятий как работает достаточно? Вкатывался во фронт, но чета разонравилось. Сюда зашел, смотрю а тут тоже нужно HTML/CSS/JS. В чем прикол? Зарплата 50к, а знаний надо как у фуллстека?
Ответы: >>1794910
Аноним 2020/09/01 13:20:00  №1794910 138
>>1794858
У фуллстеков как раз зарплата пониже почему-то, и их многие недолюбливают. Хз почему. Вроде считается что фуллстек нихуя не знает ни фронт, ни бэк.
Аноним 2020/09/01 14:19:09  №1794962 139
Фулстеков придумали рабовладельцы у которых замашки на то что они владельцы компании по разработке дохуя серьезного софта есть, а денег и/или проектов и/или навыков управления командой из специалистов нет. Представление иметь нужно, но если требуют сегодня кодить, завтра верстать, а послезавтра проектировать бд для клона фейсбука - беги оттуда нахуй.
Ответы: >>1795183
Аноним 2020/09/01 14:22:14  №1794968 140
Вместо if (isset($var)) писать if (@var) это дно? Получше же выглядит.
Аноним 2020/09/01 14:23:00  №1794969 141
>>1794968
Доллар забыл, но вы поняли.
Ответы: >>1794974
Аноним 2020/09/01 14:26:03  №1794974 142
>>1794969
Ну вот поэтому в рублях и получаешь.
>>1794968
> Получше же выглядит.
Получше выглядит js, а php это как песок себе в глаза сыпануть. Постепенно есть привыкание, но синтаксис уёбищный.
Ответы: >>1794977 >>1795227
Аноним 2020/09/01 14:36:58  №1794977 143
>>1794974
Каждому свое, наверное. Я понимаю дизайн питона хвалить, но жс это же пиздец.
Аноним 2020/09/01 15:15:24  №1795000 144
>>1794968
Оператор подавления ошибок это вообще причина для увольнения
Ответы: >>1795060
Аноним 2020/09/01 16:58:52  №1795060 145
>>1795000
Ну я как бы спрашиваю, можно ли использовать игрушку дьявола во благо.
Аноним 2020/09/01 20:31:33  №1795160 146
>>1794968

Это ненормально, что у тебя переменная может быть, а может не быть. Скорее всего, этот код плохой и ненадежный.
Аноним 2020/09/01 21:24:09  №1795183 147
Блэт, один чёртов Битрикс в вакансиях попадается, куда ни плюнь - в говнобитрикс попадёшь. Половина ещё и не пишет, что они интеграторы, но зато радостно приглашают всех подряд.
А я Опенкарт\Октябрь и Ларавел\Люмен учил и не хочу вилкой унитазы чистить.

>>1794962
Да смотря что за фуллстеки - если просят глубокое знание обоих технологий, то это как "Глубокая Глотка 15. Растянутый анус.", а если подверстать кнопку\форму, но ещё норм. Но я в любом случае контекст долго переключаю и весь день ебстись с простой задачей из другого набора буду.
Аноним 2020/09/02 04:11:51  №1795227 148
>>1794974
Кек. В жс треде говорят, что жс - говно, а пхп - это новая продвинутая жаба. А тут пишут, что жс выглядит лучше, а пхп - песок в глаза.
Ответы: >>1795244
Аноним 2020/09/02 05:56:29  №1795244 149
>>1795227
В жс треде сидят продвинутые пхпшники, которые пишут на современном пхп, который оче похож на жабу. А сюда ходят юные жсеры, которые нормального пхп и не видели никогда.
Так - наблюдения просто.
Ответы: >>1795343 >>1795454
Аноним 2020/09/02 09:09:39  №1795343 150
>>1795244
> нормального пхп и не видели никогда.
Покеж? А то реально не видел
Ответы: >>1795454
Аноним 2020/09/02 10:06:06  №1795380 151
Чем бек на Symfony принципиально отличается от бека на джаве? На джаве сильно больше кода выходит?
мимо-не видел ни того ни другого
Ответы: >>1795454
Аноним 2020/09/02 12:11:03  №1795454 152
>>1795343
https://symfony.com/

>>1795244
Но только именно php-вторая джава, а не джава-второй php.
И да, про "продвинутость" пыхи по сравнению с джавой могут пиздеть только те, кто эту самую джаву не видел ни разу. В неё, её виртуальную машину и экосистему вложены сотни тысяч человеко-часов. То, что сейчас в php только вводят (аннотации,дженерики), в джаве существует уже много лет и активно используется. Это не вспоминая про треды, корутины, систему типов, диалекты типа скалы и котлина и тому подобное. Про либы я вообще не вспоминаю, за годы их успели отладить, оптимизировать и документировать до очень хорошего уровня.
Джава в отличие от C#, правда, долгое время стагнировала, но сейчас вроде разгоняется, да и колтлиноскалы никуда уходить не собираются и активно развиваются.
PHP в лучшем случае влезет в её нишу, но конкурировать с ней не сможет, пока в него столько же денег и времени не вложат. А смысла вкладываться именно в пыху нет, если можно вложится в ту же джаву, какой-нибудь котлин ну или там раст/го, если хочется особо модненького.

>>1795380
Принципиальные отличия:
- В системе типов (дженерики, вся фигня, сравни rxjava и rxphp какой-нибудь), на джава больше штук за тебя проверит компилятор, больше ограничений/связей можно декларативно указать на уровне кода;
- В виртуальной машине, в jvm можно тюнить сборку мусора как угодно, в итоге джава при желании может быть _очень_ производительной, куда там пехапешному JITу. Да и джавовый JIT больше умеет, насколько я понимаю;
- В подходе/архитектуре, в джава ты можешь работать с сокетами, тредами и прочими промисами нативно, в пехапе это намного большее;

Кода примерно сравнимое количество, но джава, конечно, многословнее. С другой стороны, на джаве в последнее время активно пишут в функциональном стиле, rxjava, вот это всё - и кода выходит реально меньше и выглядит оно изящнее.
Ответы: >>1795456 >>1795537
Аноним 2020/09/02 12:13:10  №1795456 153
>>1795454
> в пехапе это намного большее;
больнее*
Аноним 2020/09/02 13:52:22  №1795537 154
>>1795454
>сотни тысяч человеко-часов
я бы сказал десятки миллионов
Аноним 2020/09/02 13:57:14  №1795543 155
Намного многословнее.
Много бойлерплета.
Ручками заебешься писать
Ответы: >>1795686 >>1795779
Аноним 2020/09/02 16:58:57  №1795686 156
Аноним 2020/09/02 19:28:27  №1795779 157
Аноним 2020/09/03 03:53:59  №1795898 158
Сейчас работаю инженером на уралговнозаводе за 40к, и чёт подзаебала бюрократия, отсутствие интернета и режим, поэтому прошу анонов пояснить за условия труда в веб студиях. Стрессово ли? Надо ли общаться с заказчиками? Жёстко ли ебут по срокам? Че по ЗП в среднем (город-миллионник)? Белая, серая? Есть ли овертаймы и много ли? Как с удаленкой? Кто коллеги по масти? Да и как в целом?
Ответы: >>1795909
Аноним 2020/09/03 04:29:43  №1795909 159
>>1795898
> Стрессово ли?
Да тупо чилю, делаю таски, стресс только в том, что надо работать.
> Надо ли общаться с заказчиками?
Нет.
> Жёстко ли ебут по срокам?
Нет. в создаватель не иди только.
> Че по ЗП в среднем (город-миллионник)?
Челябинск же или этих заводов как грязи? У меня меньше 40, но я работаю полгода в сфере только и стартовал совсем за еду.
> Как с удаленкой?
Она есть, при надобности, но не везде. Люди считают, что удаленка приведёт к потере эффективности. Думаю всегда можно договориться.
> Кто коллеги по масти?
Ну как в айти принято, все петушня - то, что нужно.
> Да и как в целом?
Нормально.
Аноним 2020/09/03 07:16:37  №1795996 160
XKpZumXscBQ.jpg (409, 1222x1335)
1335x1222
Анон, подскажи, где искать похапе-кодера по адекватной цене?
Есть сверстанные страницы, ТЗ не особо сложное, по большей части просто вывод из базы (база заполняется мной извне), по моим прикидкам работы месяца на полтора. Самое очевидное для меня - найти на апворке, но там (в т.ч. из-за комиссии) расценки больно кусаются, да и возможно многие тупо overqualified для моей задачи (налетают по $30/h).

На fl.ru на конкурсы откликаются почти исключительно битрикс и вордпресс-макаки. Самому выискивать по портфолио там не очень продуктивно, т.к. половина игнорит, из ответивших большинство обычно тупо заняты.

Куда еще податься? Или нужно выбирать из двух стульев?
Ответы: >>1795997 >>1796067 >>1796126
Аноним 2020/09/03 07:23:15  №1795997 161
>>1795996
>Анон, подскажи, где искать похапе-кодера по адекватной цене?
>хорошие спецы просят много
>хреновые мне не нужны(и то не соглашаются на работу)
>где найти хорошего спеца по цене хренового и чтобы работал?
Сам-то понел чё просишь? Нанимай того, кто возьмётся за твою работу, и не выпендривайся.
Ответы: >>1796009 >>1796183
Аноним 2020/09/03 07:33:09  №1796009 162
>>1795997
Алсо учти, что если у тебя низкий рейтинг(или ты новичок) на фриланс-биржах, то опытные ребята будут работать с тобой только на своих условиях - никто не знает что ты за фрукт и что можешь вытворить в процессе сотрудничества. Хотя, скорее всего, просто откажутся, если деньгами не заманишь.
И да - фрилансер стоит дороже чем офисный сотрудник. Отталкивайся от этого факта в первую очередь. 30$/h на апворке берут только жопорукие индусы.
Ответы: >>1796124
Аноним 2020/09/03 08:07:25  №1796067 163
>>1795996
Так а что за тайны, кидай сюда тз и можно будет точно сказать стоит оно таких денег или нет.
Аноним 2020/09/03 08:24:33  №1796089 164
159711.jpg (18, 240x323)
323x240
Анонсы, сколько могут стоит такие работы на фрилансе как испольнитель спрашиваю:
- добавление пары таблиц в БД
- (возможно)расширение уже 1-2 существующих таблиц
- создание моделей: TableDataGateway(там какой-то самописный фрейм на них) под 2 сущности
- пара крудов на каждую сущность: админка и фронтенд
- скорее всего придётся верстать в админке пару страничек и на фронтенде(хз чё там - заказчик понаписал хуиты в стиле "сделай как у них")
- скорее всего будет дополнительная логика в 1 класс

Фреймворк - хз какой, на фронте - хз что. Заказчик ни в зуб ногой вообще.
Думаю запросить без скромности - там у него не сайтик нифига, а сервис, который, по-хорошему, должна делать команда.
Ответы: >>1796108 >>1796124 >>1796126
Аноним 2020/09/03 08:38:43  №1796108 165
>>1796089
P.S. заказ, скорее всего, не будет выполнен никогда - персонаж там сам пытается что ковырять с вёрсткой, своими руками. Сомневаюсь, что там вообще что-то получится толковое. У меня создалось впечатление, что он просто спёр\купил чужой код и пытается сделать конкурента в ру-сегменте своими руками.

Спрашиваю скорее теоретически.
Аноним 2020/09/03 08:52:48  №1796124 166
>>1796089
> "сделай как у них"
Моё любимое. Особенно когда показывают что-то у лидера рынка, а я должен сделать это, при том, что у меня опыт минимальный, а работать буду с человеком, который тоже без понятия, как сделать правильно.
>>1796009
> фрилансер стоит дороже чем офисный сотрудник
Почему так?
Ответы: >>1796145
Аноним 2020/09/03 08:53:18  №1796126 167
>>1795996
>по большей части просто вывод из базы (база заполняется мной извне)
Ну, около 4-5 дней....
>по моим прикидкам работы месяца на полтора.
Либо ты где-то ошибаешься, либо чего-то очень сильно не договариваешь и там километры бизнес-логики и штук 5 сторонних сервисов.


>>1796089
То, что ты перечислил, на беке делается за час. А вот с фронтом на порядок интереснее. У админки хоть как-нибудь крудошлепство автоматизированно?
Ответы: >>1796172 >>1796183
Аноним 2020/09/03 09:05:11  №1796145 168
>>1796124
>Почему так?
Офисный сотрудник сидит на жопке и получает зарплату, зянимась одним делом. За него плотют отчисления в налоговую, ему больнички можно и оплачиваемые отпуска, работку ему подкидывают потоком.
У фрилансера ничего этого нет - волка ноги кормят. Сама себе офис, менеджер, маркетолог, программист и директор. Примерные цены на фрилансера можно посмотреть у чуваков, которые работают по ИП и договору - у них стоимость работы не сильно отличается от веб-студий.
Всё, что меньше этих сумму - очень большой риск проебать деньги и время.

Вообще, по моим наблюдениям, в СНГ создалась какая-то извращённая иллюзия, что на фрилансе сайтики за 2к делают, и везде дёшево всё. Тогда как сам СНГ-фриланс уже некоторе время в стабильной коме, как Алёха. Хуй знает почему так.
Ответы: >>1796162 >>1796183
Аноним 2020/09/03 09:20:38  №1796162 169
>>1796145
> Вообще, по моим наблюдениям, в СНГ создалась какая-то извращённая иллюзия, что на фрилансе сайтики за 2к делают, и везде дёшево всё
Потому что заходишь на кворк, а там 500 рублей вёрстка большой страницы. Только если глубже зайти в услугу, там выяснится, что цена другая, но и там будет не так уж и дорого.
> Тогда как сам СНГ-фриланс уже некоторе время в стабильной коме
Всмысле работать некому? Или заказов нет? Если первое, то я готов. Вёрстка хуйни любой сложности, фронтенд почти любой сложности, бэкенд на уровне "для цмс сойдёт". Недавно с нуля сайт заебашил на работе, причём вроде для бохатой конторы и им в принципе норм мне нет, тк я получу всё те же копейки.
Ответы: >>1796180
Аноним 2020/09/03 09:25:12  №1796172 170
>>1796126
>на беке делается за час
Там ещё и существующий переписывать надо под его логику. Ему не только добавление нового функционала надо, но и расширение уже существующего под новый.

>А вот с фронтом на порядок интереснее.
Так самая мякотка. У него только "хочу как у них" там веб-сервис с точно таким же дизайном и цветами, прям 1в1, но более прокачанный.

>У админки хоть как-нибудь крудошлепство автоматизированно?
Не похоже. Там просто MVC-фреймворк какой-то самописный.
Аноним 2020/09/03 09:38:34  №1796180 171
>>1796162
>Всмысле работать некому? Или заказов нет?
Много сложных и комплексных заказов за условные 500руб.
Простые вещи они сами стараются делать. Видел домохозяйку, которая своими кривыми руками поломала свой лендинг и пошла на фриланс чтобы ей за 300 рублей всё обратно починили.

Много перекупов, а они ни нормальное тз обеспечить, в большинстве своём, не могут, ни отклик своевременный, ни оплату достойную.

Много людей, которые ничего заказывать не собираются, но создают заявки. Либо это кто-то смотрит сколько будет стоит их хотения так-то оценка задачи это тоже работа, либо сами создатели фриланс-бирж эти фейки публикуют для видимости.
Зацени сколько задач на средней бирже в выполнение улетает - порядка 10-15%, что намекает.

>Вёрстка хуйни любой сложности, фронтенд почти любой сложности, бэкенд на уровне "для цмс сойдёт".
Речь не о том, что ты можешь, а скорее о том, за сколько ты это готов продать. СНГ в большинстве своём не может купить твою работу за приемлемую цену.

Алсо много разводил и кидал с обеих сторон. Очень дохуя их. И поэтому если встречаются норм заказчик и норм исполнитель, то они долго не расстаются, понимая весь пиздец вокруг. Кстати, именно поэтому толковые фрилансеры всегда заняты работой.
Ответы: >>1797031
Аноним 2020/09/03 09:41:58  №1796183 172
>>1796126
>Ну, около 4-5 дней...
>чего-то очень сильно не договариваешь
Да нет, там действительно 80% - это тупо вывод. Просто страниц немало, плюс я закладываю время на правки, коммуникацию и чай. Могу ошибаться в оценках времени, но сложного кода точно не предвидится.

>>1795997
>>1796145
>Примерные цены на фрилансера можно посмотреть у чуваков, которые работают по ИП и договору - у них стоимость работы не сильно отличается от веб-студий.

Меня просто жаба душит платить русским на апворке 5000$/мес, когда на фуллтайм на hh.ru куча вакансий по 100к/мес. Я понимаю, что фрилансер захочет какую-то премию, но не тройную же.

Какой вообще сейчас адекватный прайс за месяц работы yii-фрилансера средней паршивости?
Ответы: >>1796196 >>1796211 >>1796256
Аноним 2020/09/03 09:58:15  №1796196 173
>>1796183
>жаба душит платить русским на апворке 5000$/мес
Классека. Найми индуса тогда - с ним даже объясниться нормально не сможешь.

>когда на фуллтайм на hh.ru куча вакансий по 100к/мес
Нологи с этой зарплаты посчитал? Электричество и прочую хрень?
Программер стоит не 100к\мес, а полную сумму. Сверху прикинь зряплату директора конторы - он тоже не даром там работает.
На хх вообще нефиг смотреть в твоём случае - ты человек не в офис берёшь.
Аноним 2020/09/03 10:20:02  №1796211 174
>>1796183
Ты какой-то мутный хуй. Будет миллион желающих сделать месячный кусок работы за 100к, какие нахуй 5000$.
Ты если на fl напишешь "yii макака, 100к за месячный объем работы", то заебешься предложения разгребать. Бля, да я сам хоть ленивый хуй, и бабки не проблема, но подкалымил бы за 100к делая "просто вывод из базы".
Так что, сдается мне, ни о каких 100к речи не идет. А идет речь о чашке риса за сложную хуйню, за которую тебе самому браться не охота.
Ответы: >>1796825
Аноним 2020/09/03 10:53:16  №1796256 175
>>1796183
>но не тройную же
Эта тройная ставка подразумевает, что 2/3 времени из тебя будут клещами тянуть ТЗ, условия, допданные и прочую хрень.
Я очень сильно нагревался, когда целый день выяснял, что клиент хочет, что ему надо и как это реализовать в условиях кучи его говнокода, а потом мне на голубом глазу заявляли - ну ты же 10 строчек написал, там не больше получаса.
Ответы: >>1797031
Аноним 2020/09/03 13:56:56  №1796461 176
Фриланс очень невыгоден, так как ты тратишь кучу времени на поиск заказов, переписку с клиентом, разбираешься в незнакомом коде - и все это зачастую не оплачивается. Подумайте, насколько лучше удаленная работа: заказы искать не надо, переписка с клиентом может оплачиваться, разобраться в проекте надо только один раз, а дальше его допиливать.
Аноним 2020/09/03 15:46:53  №1796541 177
image.png (4, 443x41)
41x443
Еще один вопрос по ларавель. Допустимо ли такие конструкции писать в шаблоне, или лучше это вынести в контроллер?
Ответы: >>1796566
Аноним 2020/09/03 16:08:18  №1796566 178
>>1796541
Нельзя, прочитай про закон Деметры

Ты повышаешь так coupling
Ответы: >>1796768
Аноним 2020/09/03 19:12:54  №1796768 179
>>1796566
Разобрался, спасибо!
Аноним 2020/09/03 19:46:54  №1796801 180
15427501582430.jpg (4336, 2443x3479)
3479x2443
На днях прислали тестовое, которое похоже на реальный рабочий кейс: не абстрактное, а предельно конкретное и под их рабочий фреймворк. Сама его суть в обработке некоторой инфы и отображении её на нескольких графиках и таблицах в наглядном виде с фильтрацией и сортировкой. Как-то подозрительно это всё. Не может ли быть так, что их прогер на меня свою рабочую таску скинул?
Просто одно дело - запилить абстрактный круд для микросервиса с аутентификацией и пользователями, и совсем другое - мутная комплексная хрень похожая на работу на пару дней времени.
Стоит связываться?
Аноним 2020/09/03 20:20:07  №1796825 181
>>1796211
Может, у меня просто неудачный опыт был с прошлыми двумя сайтами (на текущий сайт я еще не искал кодера, хотел перед этим проконсультироваться на двачах). Но спасибо, мне нужно было мнение со стороны. Видимо, чуваки перезакладывали, не зная, чего от меня ожидать как от заказчика.

Деньги-то есть, и 100к и 200к вообще не вопрос. Просто пытался понять, нормальна ли такая ситуация, какие вообще рыночные расценки сейчас и где еще помимо fl.ru и апворка стоит искать. Более-менее понял.
Ответы: >>1796853
Аноним 2020/09/03 20:54:46  №1796853 182
>>1796825
Тебе уже сказали, что русский фриланс - это гремучий клубок со змеями с запредельным уровнем кидалова с обеих сторон.

Как заказчик рискует получить хуесоса, который сделает все через жопу, так и исполнитель имеет шанс попасть на бабки. Причем эти шансы абсолютно непотребные.

Лучше поищи через знакомых. Ну или в треде фейкомыло оставь, мб кто-то свяжется. Было бы лучше всего, если бы ты сам в этом разбирался хоть поверхностно и имел возможность контролировать процесс.
Ответы: >>1796862 >>1797031
Аноним 2020/09/03 21:09:19  №1796862 183
>>1796853
Да причем здесь русский фриланс или не русский.

У поциента просто концы с концами не сходятся.
Сначала говорит что задачи тривиальные и индусы для них слишком хороши, потом говорит что не хочет битрикс макак.
Сначала говорит что готов платить по цене рынка, потом какой-то лепет про неудачный опыт.

Я вижу типичное кроилово, когда за чел пытался найти долбоеба за еду. А теперь какие-то охуительные истории рассказывает про "200к не вопрос". Что несет, вообще охуеть.
Ответы: >>1796885
Аноним 2020/09/03 21:43:29  №1796885 184
>>1796862
>потом говорит что не хочет битрикс макак
Ни один человек в здравом уме не захочет Битрикс макак, это я говорю как Битрикс макака. Это говно криво, косо и ужасно.
Тривиальные задачи на нем превращаются в жопоеблю на ровном месте.
Ответы: >>1796895
Аноним 2020/09/03 21:57:47  №1796895 185
>>1796885
Какое говно? Битрикс макака крива и ужасна? Кто на ком верхом ездит и в жопу ебет? Ты можешь отличать инструмент и программиста?
Ответы: >>1796906
Аноним 2020/09/03 22:17:46  №1796903 186
В /b кто-то назвал ларавел колхозом и порекомендовал учить симфони. Судя по паре приличных книг, которые также были рекомендованы этим анонимом, можно предположить, что он не хер с горы. Неужто в приличном обществе ларавел действительно считается колхозом?
Ответы: >>1796916
Аноним 2020/09/03 22:21:36  №1796906 187
>>1796895
Битрикс программисты зачастую не очень как программисты.
1. На Битрикс неплохо так платят и поэтому многие просто зависают там и никуда дальше не двигаются по скиллам.
2. На Битрикс не используются распространённые паттерны и решения, придуманные и вылизанные тысячами других программистов. Это такой манямирок обособленный. Помню, как какой-то чел радовался когда к ним в битрикс-команду пришёл новичок с умением в Симфони - типа тот, говорил, просто на голову выше местных макак оказался.
Ответы: >>1796916 >>1796921
Аноним 2020/09/03 22:52:40  №1796916 188
>>1796903
Ну бывают фреймворки и похуже. Ларавел хуже с точки зрения архитектуры, но зато попроще симфони и менее требовательный к прослойке между креслом и монитором. Но при этом наголову лучше всякого дна типа битрикса. Я бы сказал, есть Москва (Симфони), созданная по образу других европейских столиц (Берлин) с кучей денег и тп. Есть какой-нибудь Новосибирск (Ларавел), который вроде тоже ничо так, но сравнивать их глупо. А бывает Барнаул или вообще деревня Нижние Васюки (Битрикс).

>>1796906
Битриксоиды как правило совсем не программисты, примерно как таксисты как правило не очень бизнесмены. Битрикс - мало того, что сделан из говна, так ещё и является CMSкой, то есть, всё уже написано, и "программисту" надо просто собрать квадратно-гнездовым способом сайт из набора кубиков. Ни о каком моделировании предметной области, эффективной работе с базой и тд и тп и речи не идёт: есть +- готовые шаблончики, из них и лепится всё с минимальной доработкой напильником, чтобы было похоже на то, что нужно заказчику.
Это, правда, не проблема конкретно битрикса, это проблема всех CMS-ок - ориентация на накликивание мышкой и настроечки. Битрикс просто ещё и ужасен по качеству исполнения.
Ответы: >>1796919 >>1796921
Аноним 2020/09/03 23:03:51  №1796919 189
>>1796916
Интересное сравнение, благодарю!
Аноним 2020/09/03 23:06:26  №1796921 190
>>1796906
Нахуй ты мне это рассказываешь? Чел пишет что индусы на апворке видите-ли для него скилловые дохуя. А тут ты высрался. Как попка блядь. "Битрикс говно". Тебе говорят что речь не про битрикс вообще. А ты опять за каким-то хуем начинаешь расписывать какое он говно. Говно, епты, говно, успокойся.

Битрикс программисты идиоты что-ли клинические? Да блядь любой джун справится данные из базы в шаблон прокинуть. А если нужна дохуя архитектура, так хули тогда ценник на работу сбивать.

>>1796916
>моделировании предметной области
Понесло макакена. Ты давно предметную область моделировал, поехавший? С доменными экспертами евент шторминг хуярил? Охуительный манямир. Да в 99% самых топовых компаний на симфони ты будешь "моделировать" таблички в базе и формы хуярить, просто за бОльшие бабки. Предметная область, пиздец вообще. Битрикс говнище - это факт, но бля, в себя приди, ты на пхп пишешь, а не на С#.
Аноним 2020/09/03 23:31:12  №1796928 191
>>1796921
Я понял твою очку зрения, но ты не прав.
Любую (то есть, вообще любую) работу можно сделать как хорошо, так и плохо. Под хорошо/плохо в данном случае я подразумеваю возможность расширения/тестирования/производительность.

Я работаю и на симфони, и на битре. На симфони продукт делается ПРОЩЕ, качественнее и быстрее.

>Битрикс программисты идиоты что-ли клинические?
Те, кто не знает ничего кроме битры - да.
Ответы: >>1796934
Аноним 2020/09/03 23:47:41  №1796934 192
>>1796928
Ой все иди в пизду. Вам ботам ебучим что-то объяснять, только время тратить. Шел разговор, о том что для охуительно простой задачи челу не нужны дохуя скиллованые индусы, но он выставил на бирже такой низкий ценник, что свои услуги предложили только битрикс макаки. На что ему резонно заметили, что если он хочет качества, то должен за него заплатить.

Но тут блядь твоя нейросеть ебучая увидела слово "битрикс". У тебя в комнате взвыла сирена, и ты начал сюда копипастить свою хуйню о том какой хуевый битрикс и как заебись на фреймворках. Какую-то дженерик графоманию про архитектуру, еще пару раз про то какой хуевый битрикс, и еще немного графомании. О чем вообще шла речь тебя не ебет. Ведь ты увидел слово битрикс, а значит пройти мимо никак нельзя. Посты пусть долбоебы читают.
Ответы: >>1797022
ньюфагопроблемы Аноним 2020/09/04 02:59:33  №1796952 193
Мудохался день со школьниками и айфонами,
в итоге пришел к этому
https://ideone.com/XlQz9T
как я понимаю, изначально задача не задумывалась как сложная?
Ответы: >>1807624
Аноним 2020/09/04 05:51:31  №1796978 194
Аноним 2020/09/04 07:28:29  №1797020 195
Я хотел бы призвать уважаемых анонимов, горячо спорящих о битриксе в постах выше, к благоразумию. Пожмите руки, пожалуйста. Ну...будьте ж вы людьми.
Ответы: >>1797028
Аноним 2020/09/04 07:38:12  №1797022 196
>>1796934
>но он выставил на бирже такой низкий ценник, что свои услуги предложили только битрикс макаки

Хуй знает, зачем ты фантазируешь и додумываешь за меня.

Я прошлый проект создавал с ценником "по договоренности", мне казалось это адекватным - дать соискателям самим оценить, а не пытаться самому угадать. В описании публиковал бриф, детальное ТЗ высылал по запросу. Проблема в том, что за ТЗ обратилось два или три человека с почти пустыми профилями, а остальное было засрато вордпресс-ботами, которые даже описание прочесть не удосужились. Когда сам на fl.ru искал кодеров и отправлял им на почту ТЗ с просьбой оценить, они не отвечали либо говорили, что уже заняты. Поэтому в следующий раз сразу пошел на апворк - но там средний ценник мне показался сильно выше fl.ru.

Сейчас доделываю ТЗ для нового проекта (более простого) и пытаюсь понять, мне просто в тот раз не повезло или же я неправильно/не там искал кодера (мне fl показался полудохлым). Видимо, вместо договорной цены нужно указывать примерный прайс, чтобы проект был заметнее.
Аноним 2020/09/04 07:39:44  №1797023 197
>>1797022
>было засрато вордпресс-ботами
Перекупы
Аноним 2020/09/04 07:42:23  №1797024 198
>>1797022
Это советский менталитет. На fl.ru ты в глазах реальных исполнителей изначально по умолчанию рассматриваешься как тупой ахуевший жмот, наебщик, перекуп. А в глазах перекупов изначально по умолчанию рассматриваешься как тупой лох, которого всеми силами надо наебать, перехитрить.
Аноним 2020/09/04 07:49:32  №1797028 199
>>1797020
>горячо спорящих о битриксе в постах выше
В что о нём спорить? Говно есть говно - как его маркетологическим наглым пиздежом не прикрывай. Программисты не любят с ним работать. К тому же это местечковое говно - дальше РФ оно никому даром не сдалось.

>>1797022
>за ТЗ обратилось два или три человека с почти пустыми профилями
Ну и что? Думаешь, что у тех, у кого профили ломятся от работ не могут кинуть? Там народ зачастую сами у себя заказывают, аккаунты эти перекупают у друг-друга и любыми способами их качают. Смотри по вопросам, которые человек задаёт - понимает ли он о чём речь вообще идёт.

>отправлял им на почту ТЗ с просьбой оценить, они не отвечали либо говорили, что уже заняты
Либо заняты, либо просто не хотят связываться, либо вообще не программисты, а торговцы аккаунтами, либо разводилы.

>следующий раз сразу пошел на апворк - но там средний ценник мне показался сильно выше fl.ru
Потому, что на апворке дрючат безопасность и без жалости сливают мудака. Там исполнители действительно работают и цены\сроки соответствующие.
Ответы: >>1797030 >>1797031
Аноним 2020/09/04 08:00:29  №1797030 200
image.png (170, 630x412)
412x630
Ответы: >>1797031
Аноним 2020/09/04 08:02:06  №1797031 201
>>1797022
>Я прошлый проект создавал с ценником "по договоренности"
Это и есть кроилово. Сразу было понятно что ты что-то не договариваешь. Описываешь кисельные берега, и работа простая, и плата адекватная. А по факту ты выставил ценник "от 0 до скольки стргуемся". С очевидной целью минимизировать затраты.

Я ничего против минимизации затрат не имею, бабки на дороге неваляются. Но тут написал что ты "хоть 200К заплатить готов", но готов заплатить по средней зп 100К. Что есть очевидный пиздежь.

>>1796180
>>1796256
>>1796853
>>1797028
>>1797030

Вы начали какую-то демагогию разводить о рынке труда, почему что-то не получилось. Про кидки, про то почему фрилансеры такие осторожные. Про то что битрикс хуевый. Про менталитет. А на деле все просто:

>проект создавал с ценником "по договоренности"
Все.
Все, ребята. Был мутный хуй, стал кристально чистый. О чем тут вообще рассуждать.
Ответы: >>1797035 >>1797076 >>1797195
Аноним 2020/09/04 08:10:06  №1797035 202
>>1797031
>проект создавал с ценником "по договоренности"
Это совершенно нормальное явление - он не может грамотно оценить ни объём работ, ни их сложность. Опять же люди по разному работают - на разных технологиях, и даже на вордпрессе никто не мешает высрать целый сложный веб-сервис внутренности этого ада лучше не видеть - там фактически свой фреймворк поверх ВП пишется с ПСР и композером.
Поэтому и цена у каждого своя. От него единственно что требуется - не вестись на слишком дешёвый ценник - точно проебёт, как минимум, время.
Ответы: >>1797050
Аноним 2020/09/04 08:34:08  №1797050 203
>>1797035
>он не может грамотно оценить ни объём работ, ни их сложность
>ставит минималку 0 рублей
>пишут только макаки и кидалы
Ну и как, теперь оценил?

Не забудь написать какое вордпресс и битрикс говно. Похуй что ты даже не знаешь на чем у него проект.
Ответы: >>1797204
Аноним 2020/09/04 09:03:20  №1797076 204
>>1797031
>А по факту ты выставил ценник "от 0 до скольки стргуемся". С очевидной целью минимизировать затраты.

На самом деле логика у меня была прямо противоположная - я боялся ошибиться с оценкой, занизить ценник и тем самым отпугнуть адекватов (хотя адекватам я был готов платить любую цену, которую они бы назвали - я ж поэтому-то в итоге и пошел на апворк).

Но все равно спасибо, я благодаря треду теперь лучше понимаю рынок и как меня видят потенциальные соискатели.
Ответы: >>1797081 >>1797195
Аноним 2020/09/04 09:07:22  №1797081 205
negoni.mp4 (251, 592x336)
336x592
Аноним 2020/09/04 10:22:25  №1797130 206
>>1796921
> блядь любой джун справится данные из базы в шаблон прокинуть. А если нужна дохуя архитектура, так хули тогда ценник на работу сбивать.
Было бы так просто всё, то не нужны были никакие сеньоры и паттерны. Как раз 80% задач - это, сюрприз, принять запрос, обработать его (сохранить в базу/загрузить что-то из неё) и отдать ответ. Только есть куча сложностей в том, где хранить, как хранить, что хранить, как отдавать, как обрабатывать и так далее.
Если джун будет делать всё сам, то он <?php @echo mysqli_query("select * from user where id=".$GET['user_id']) ?> нахерачит тебе прям в шаблонах и привет.

> Понесло макакена. Ты давно предметную область моделировал, поехавший? С доменными экспертами евент шторминг хуярил?
Жаль тебя расстраивать, но постоянно.
Во-первых, каждый программист не просто "пишет код", а моделирует какой-то бизнес-процесс в случае продукта или технический в случае, если пишет техническую тулзовину. И как раз, кстати, в этом вся проблема, что большинство даунов типа тебя не понимают этого и считают, что их основная задача - это просто херачить код, который что-то там делает.
Во-вторых, я уже третий год работаю в продуктах и есть реально продуктовые аналитики, которые описывают всякие процессы, а потом я проектирую это всё сначала на уровне концепций, а уже потом переношу в код. Но даже когда я работал в аутсорсе, была похожая схема: я, как тимлид, принимал от заказчика хотелки, описывал модель и потом раскидывал разные её части по разным разработчикам для реализации. И да, как раз таким умникам типа тебя неоднократно приходилось объяснять про слои приложения, контексты, модель и прочие причины, почему нельзя прям в контроллере в базу залезть, а в юзере править заказы.
Ответы: >>1797144 >>1797387
Аноним 2020/09/04 10:45:54  №1797144 207
>>1797130
>Если джун будет делать всё сам, то он <?php @echo mysqli_query("select from user where id=".$GET['user_id']) ?> нахерачит тебе прям в шаблонах и привет.
А че так нельзя что ли?
Мимо другой анон, вкатываюсь, тренируюсь, учусь*
Ответы: >>1797168 >>1797172 >>1797199
Аноним 2020/09/04 11:03:10  №1797168 208
>>1797144
Если это сарказм, то иди нахуй.
Если серьёзный вопрос, то:
Нет, нельзя, потому что каждая часть кода должна отвечать только за какую-то свою задачу. Грубо говоря, программирование-очень сложная штука, и когда каждый класс/файл/чтоугодно и швец, и жнец, и на дуде игрец, очень сложно определить что оно сделает в каждом конкретном случае. Отдельной проблемой также будет то, что оно реально будет требовать целую кучу зависимостей для всего, чего ты туда понапихаешь.
К примеру, если у тебя шаблон юзера, как здесь, использует GET['user_id'], то ты не можешь переиспользовать его для вывода юзера для какого-нибудь списка юзеров (потому что там будет GET['page_id'], к примеру).
Соответственно, ты дробишь одну очень сложную задачу "обработать запрос" на множество мелких независимых подзадач, каждая из которых делает что-то своё и ничего не знает ни про соседние, ни про те, что находятся выше уровнем.
Упрощённо это выглядит как-то так:
- Обработать запрос
- - Определить конкретный коллбек
- - Вызвать коллбек
- - - Вытянуть данные из запроса и провалидировать
- - - Сделать нужные действия (загрузить юзера из базы например)
- - - Отобразить юзера (вызвать шаблон)
В результате ты получаешь набор слабосвязанных компонентов: роутер, валидатор, бизнес-правило, вьюха. Каждый из них ты можешь переиспользовать в других местах, удобно независимо тестировать и так далее.

Смотри на код примерно как на завод с конвейерами, есть отдельный человек, который закупает расходники, отдельный человек, который их распределяет по на лентам, отдельный человек на конкретной ленте их пиздит кувалдой, отдельный человек клеит этикетки на выходе и так далее. Каждый делает своё дело и ему безразлично, откуда конкретно ему пришла деталь, от закупщика, из другой ленты или через дыру в крыше упала. И сам он на соседний завод за деталью не побежит.
Аноним 2020/09/04 11:06:34  №1797172 209
>>1797144
А, ну и ещё тут есть 2 "ошибки", они достаточно очевидны, но вдруг:
- прямой запрос вместо использования какого-нибудь репозитория, обычно есть какой-нибудь класс, который делает запросы сам "под капотом" и ты просто вызываешь $usersRepo->load($userId);
- нет валидации данных из $GET['userId'], я могу туда написать тебе "; DROP DATABASE users" и всё, привет.
Аноним 2020/09/04 11:26:45  №1797195 210
>>1797076
>Но все равно спасибо, я благодаря треду теперь лучше понимаю рынок и как меня видят потенциальные соискатели.
Только не сильно прислушивайся к мнению этого >>1797031
токсичного школьника. Он ни ценообразование ни фрилансе не знает, ни как там работают, а просто срёт из своей горелой жопы.
Аноним 2020/09/04 11:28:47  №1797199 211
>>1797144
Бля, дядь, ты рофлишь или всерьёз?
Да за такие вопросы даже на васянских говнокурсах тебя опустят всем классом и посадят возле битриксиста, дав ноут с дырочкой
Ответы: >>1797259
Аноним 2020/09/04 11:31:23  №1797204 212
>>1797050
Да ты заебал уже, долбоёбушек. Он написал минималку просто потому, что ебал оценивать со стороны чужую работу. Это любому ментально здоровому человеку очевидно.
Если человек пишет 1 рубль за заказ, то это не значит, что он реально за рубль хочет кого-то нанять. Это значит - сторгуемся по ходу дела.
Нормальный спец умеет оценить задачу и сколько на неё потратит времени, а значит и цену за работу. Ты - не умеешь, но распизделся.

Макаки и кидалы ему пишут потому, что рашен фриланс полутруп, а не потому, что цена такая. Напишет 200к - сбежится просто ещё больше кидал.
Аноним 2020/09/04 11:37:22  №1797215 213
>>1796921
>Битрикс программисты идиоты что-ли клинические?
Смотрите - битриксоид порвался. У вас там та ещё ебанутая атмосферка.
У меня дружище как-то к вам с советом пришёл, а вы его в ответ говном облили и сказали, что он нихуя не знает ваш ссаный битрикс.
Я вашего ебанутого брата за версту чую.
Аноним 2020/09/04 12:22:49  №1797259 214
>>1797199
>Дядь, ты рофлишь или всерьёз?
Я таблетки забыл выпить, прости
Аноним 2020/09/04 13:10:46  №1797319 215
Лучше всегда использовать абсолютные пути? А то с относительными хуй поймешь откуда они считаются, вроде бы с публичной папки где лежит индексный файл, а вроде бы хз.
Ответы: >>1797382
Аноним 2020/09/04 14:36:34  №1797382 216
>>1797319
Лучше не использовать пути, я бы сказал. Грузишь все классы только через composer, include и require не используешь - и сразу становится хорошо.
Если нужны какие-нибудь фикстуры, то делай функцию, которая берёт их из _FILE_ и юзай её.
Если нужны просто файлы для приложения, то делай класс-обёртку, в которую в настройках будешь прокидывать абсолютный путь до каталога, а во время работы с ней или используй относительные пути (+ группируй всё по бакетам), или вообще имена/айдишники для файлов.
Аноним 2020/09/04 14:40:31  №1797387 217
>>1797130
>почему нельзя прям в контроллере в базу залезть
Какой контекст у этого действия?
Я нуб (без иронии) и не понимаю. Например получить одну конкретную сущность по API (ресурс) в symfony. В контроллере я непосредственно воспользуюсь репозиторием, сериалазйером, а также неосознано кучей всего, что спрятано, типа эвентов. Вся бизнес-логика тут - это возьми и отдай, как это еще сильнее и глубже дробить?
Ответы: >>1797389 >>1797423 >>1797425
Аноним 2020/09/04 14:43:22  №1797389 218
>>1797387
Ну в общем нормально, если вся логика это взять из базы и отдать. Главное - никаких манипуляций с данными в контроллере, это не его дело. Он работает только с реквестами и респонсами, валидировать их может и проверять всячески, но предметной логики не должен содержать.
Аноним 2020/09/04 15:27:47  №1797423 219
>>1797387
Потому что бизнес-логика - это не про сериализацию. Как замечает анон из >>1797389 в частном случае такое делать можно, но в целом нужно разделять бизнес-логику и работу с источниками.
Прочитай про гексагональные приложения, чистую архитектуру и DDD (информации там дохуя, но всё равно).
Следует разделять инфраструктуру (принимает http запросы и передаёт их на следующий слой, маппит всё, сериализует, лазит в базу и тп) и предметную область (бизнес-процессы).
Соответственно, контроллер - это инфраструктура, всего лишь адаптер для http, он принимает запрос, парсит его, валидирует на корректность схемы (отсекает случаи "число вместо строки", "отсутствует необходимый аргумент" и тп) и вызывает соответствующий бизнес-сценарий. Потом получает ответ от этого сценария, форматирует его и отдаёт обратно.
А бизнес-сценарий - это, сюрприз, сценарий, например "создай юзера", "создай заказ", "оплати заказ", "поменяй юзеру пароль", он ничего не знает ни про http, ни про базу, он просто вызывает нужные бизнес-сущности и что-то с ними делает.
Таким образом, ты можешь вызывать один и тот же бизнес-сценарий из веба (контроллеры), из консольки (консольное приложение), на событие из кафки (обзервер), по крону и как ещё угодно.
Ответы: >>1797694
Аноним 2020/09/04 15:29:10  №1797425 220
>>1797387
Потому что бизнес-логика - это не про сериализацию. Как замечает анон из >>1797389 в частном случае такое делать можно, но в целом нужно разделять бизнес-логику и работу с источниками.
Прочитай про гексагональные приложения, чистую архитектуру и DDD (информации там дохуя, но всё равно).
https://walkerjordan.com/wp-content/uploads/2020/05/The-Clean-Architecture-layers.png
Следует разделять инфраструктуру (принимает http запросы и передаёт их на следующий слой, маппит всё, сериализует, лазит в базу и тп) и предметную область (бизнес-процессы).
Соответственно, контроллер - это инфраструктура, всего лишь адаптер для http, он принимает запрос, парсит его, валидирует на корректность схемы (отсекает случаи "число вместо строки", "отсутствует необходимый аргумент" и тп) и вызывает соответствующий бизнес-сценарий. Потом получает ответ от этого сценария, форматирует его и отдаёт обратно.
А бизнес-сценарий - это, сюрприз, сценарий, например "создай юзера", "создай заказ", "оплати заказ", "поменяй юзеру пароль", он ничего не знает ни про http, ни про базу, он просто вызывает нужные бизнес-сущности и что-то с ними делает.
Таким образом, ты можешь вызывать один и тот же бизнес-сценарий из веба (контроллеры), из консольки (консольное приложение), на событие из кафки (обзервер), по крону и как ещё угодно.
Ответы: >>1797694
Аноним 2020/09/04 16:26:42  №1797453 221
>>1797389
Потому что бизнес-логика - это не про сериализацию. Как замечает анон из >>1797389 в частном случае такое делать можно, но в целом нужно разделять бизнес-логику и работу с источниками.
Прочитай про гексагональные приложения, чистую архитектуру и DDD (информации там дохуя, но всё равно).
https://walkerjordan.com/wp-content/uploads/2020/05/The-Clean-Architecture-layers.png
Следует разделять инфраструктуру (принимает http запросы и передаёт их на следующий слой, маппит всё, сериализует, лазит в базу и тп) и предметную область (бизнес-процессы).
Соответственно, контроллер - это UI, всего лишь один из многих Middleware, он принимает запрос и вызывает соответствующий бизнес-сценарий. Потом получает ответ от этого сценария, форматирует его и отдаёт обратно.
А бизнес-сценарий - это, сюрприз, сценарий, например "создай юзера", "создай заказ", "оплати заказ", "поменяй юзеру пароль", он ничего не знает ни про http, ни про базу, он просто вызывает нужные бизнес-сущности и что-то с ними делает.
Таким образом, ты можешь вызывать один и тот же бизнес-сценарий из веба (контроллеры), из консольки (консольное приложение), на событие из кафки (обзервер), по крону и как ещё угодно. Но я так ни разу не делал, и не в курсе, что обработать пачку в 10К событий из кафки это нихуя не тот же сценарий, что при обычной работе приложения.
Ответы: >>1797694
Аноним 2020/09/04 20:58:20  №1797694 222
Аноним 2020/09/05 11:09:39  №1797982 223
Аноны, я чет с регулряками затупил. В целях любопытства я заморочился парсингом POST запроса от формы.
Таким вот уебищным образом:
https://regex101.com/r/56d4nh/4/

Два вопроса:
1. Когда парсишь сегмент:

Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg

тут данные. hex картинки, или строка base64

то в самом начеле есть символы
\\r\\n - исмволы возврата каретки и переноса строки
но в регулярке моей ищет успешно только когда установлен символ \\n
-переноса строки. Если добавить возврат каретки - не ище.

Там суть такая что заголовки отдельного блока в данных формы отделены от собственно данных такой последовательностью - "\r\n\r\n"

А перед заголовками только "\r\n". Соответственно я хочу получить заголовки и разобрать их уже по значениям.


2. Почему у меня в квадратных скобках символ точки "." ничего не ищет?
Ответы: >>1798094
Аноним 2020/09/05 12:24:59  №1798013 224
Как заменить табы на пробелы?
Предпочитаю пользоваться табами в IDE Eclipse PDT, но тот же гитхаб их криво отображает. Если настраиваю форматтер в редакторе, то он даже в момент редактирования начинает вставлять пробелы, и меня это не устраивает выглядит как говно.
В идеале хотелось бы иметь возможность локально писать так как мне нравится, а перед тем как заливать проект была возможность прогнать и отформатировать его с нужными настройками.

Должно же быть что-то такое?
Ответы: >>1798103 >>1798532
Аноним 2020/09/05 14:06:02  №1798094 225
>>1797982

По поводу \r\n vs \n - это может быть особенность regex101, что там перенос строки кодируется как \n и \r там нету. А вот в реальном запросе от браузера присутствует \r\n.

Ты можешь писать \r?\n, который должен работать и там и там.

> Почему у меня в квадратных скобках символ точки "." ничего не ищет?

Внутри квадратных скобок символ точки ищет знак точки, а не "любой символ".

Твоя регулярка не очень удачная, так как внутри заголовка могут быть различные символы, не только те, что указаны у тебя. Я бы советовал искать так:

- отрезаем от запроса первый набор заголовков (заканчивается \r\n\r\n)
- разбираем их на строки
- выделяем там значение boundary в заголовке Content-Type
- разбиваем остаток запроса на части по строке boundary
- каждую часть разбиваем на заголовки и тело по \r\n\r\n
- заголовки разбираем на строки

Вид POST-запроса с boundary можно посмотреть к примеру тут: https://habr.com/ru/post/511114/
Аноним 2020/09/05 14:26:40  №1798103 226
>>1798013
Хз, IDEA автоматически табы на пробелы заменяет. Кто вообще эклипс юзает в 2020?
Ответы: >>1798121
Аноним 2020/09/05 14:52:12  №1798121 227
>>1798103
Если тебе нечего написать по этому кроме восхваления своей IDE, то мог бы и не стараться - я твоих советов по этому поводу не спрашивал.
Ты даже пост не прочитал толком.
Ответы: >>1798359 >>1798400
Аноним 2020/09/05 17:59:04  №1798239 228
Аноны, такой вопрос, немного копаюсь с psr-7, не пойму что в сущности представляет следующий интерфейс:
Psr\Http\Message\RequestInterface - Representation of an outgoing, client-side request. - Представление исходящего запроса на стороне клиента - это как?
Этот интерфейс представляет запрос, который я с сервера отправляю куда нибудь?

Входящий на сервер запрос представляет по идее Psr\Http\Message\ServerRequestInterface этот интерфейс. Так?

Ответы: >>1798354
Аноним 2020/09/05 19:22:01  №1798354 229
>>1798239

> Этот интерфейс представляет запрос, который я с сервера отправляю куда нибудь?

Да. Например, твой код может быть клиентом, отправлять запрос к какому-нибудь API. Тут-то этот интерфейс и пригодится.
Аноним 2020/09/05 19:32:07  №1798359 230
>>1798121
Всё равно, ты б ещё в виме программировал. И да, а чего ты от меня хочешь? или лазь в настройках своего говноэклипса, или юзай sed r/\t/\s какой-нибудь.
Ответы: >>1798374
Аноним 2020/09/05 19:46:58  №1798374 231
>>1798359
>И да, а чего ты от меня хочешь?
Нафиг ты мне нужен?

>лазь в настройках
О, спасибо - без тебя бы я не догадался зайти в настройки. Ты прям спас меня.
Ответы: >>1798402
Аноним 2020/09/05 20:11:42  №1798400 232
>>1798121
Всё равно, ты б ещё в виме программировал. И да, а чего ты от меня хочешь? или лазь в настройках своего говноэклипса, или юзай sed r/\t/\s какой-нибудь.
Аноним 2020/09/05 20:12:33  №1798402 233
>>1798374
Ну и не пиши тогда ерунду на моих двачах тогда. Тут тебе не центр помощи даунам, которые в ideшке разобраться не могут
Аноним 2020/09/06 08:02:18  №1798532 234
>>1798013
А всего-то надо было php_cs на прекоммит гита поставить.
Пипец тут народ водится - спрашиваешь их про варианты форматирования кода, а они тебе бред про свою "самую лучшую ИДЕ" несут в ответ.
Школота какая-то сильно тупая.
Аноним 2020/09/06 10:20:13  №1798614 235
Аноны, поясните за ванильный js и css в Laravel, пожалуйста. Не могу понять логику работы с npm и каталогами public и resources.

Вот я добавил файл, например, test.js в resources, выполнил "npm run dev", создался файл test.js в public с уже написанным кодом. И что дальше? Что за это код? В каком из двух файлов писать код? Зачем вообще нужно 2 файла?
Ответы: >>1798620 >>1798636 >>1798714
Аноним 2020/09/06 10:39:30  №1798620 236
>>1798614
Я всё пилю тупо в assets\js, потом подключаю в шаблонах. Если в Ларе есть возможность минифицировать и всячески конпелировать js и css, то не факт, что этим надо обязательно пользоваться. Будет отдел фронтенда, который на фреймворке станет писать - будем собирать, а так - если один пилишь, то нахуй это надо.
Ответы: >>1798623
Аноним 2020/09/06 10:41:05  №1798623 237
Аноним 2020/09/06 11:00:14  №1798636 238
Hue9S2QZGE.jpg (77, 802x616)
616x802
>>1798614
ressources - для исходников, которые собираются и вываливаются дефолтным конфигом в public.
Ответы: >>1798812
Аноним 2020/09/06 13:01:52  №1798714 239
>>1798614
>Вот я добавил файл, например, test.js в resources, выполнил "npm run dev", создался файл test.js в public с уже написанным кодом. И что дальше? Что за это код? В каком из двух файлов писать код? Зачем вообще нужно 2 файла?

Весь код лежит в resources, в public у тебя сбилженная версия твоего кода, которую ты желательно в гит игнор пихаешь, и билдишь при деплое, это не обязательно, просто чтобы не засирать комиты не нужной инфой.
У тебя при билде может происходить куча вещей, не просто копирование файла из одного места в другое. Как минимум код в es5 хуячится через бабель, если нужно то подключаются полифилы (например ты используешь Array.from, которого в ие11 нет, ну и промисы конечно же). При этом если вчера ты поддерживал ие11, а сегодня уже не поддерживаешь, то при билде полифилы для ие11 уже не подключатся. К тому же человеческая система модулей, если тебе нужно подключить либу, то ты её просто бля импортишь себе в скрипт, а не подключаешь в правильной последовательности где-то в верстке. Короче на самом деле очень удобное говно.
Ответы: >>1798812
Аноним 2020/09/06 14:19:47  №1798812 240
Аноним 2020/09/06 17:55:58  №1799030 241
Что меняется после persist до первого flush?
Ответы: >>1799089
Аноним 2020/09/06 19:28:43  №1799089 242
>>1799030

Вопрос с собеседования?

persist передает новую сущность под управление EntityManager (до этого он о ней не "знает"), она добавляется в Identity Map. У EM в Identity Map хранится список всех сущностей, о которых он знает. Если сущность загружается из БД, то EM о ней "знает" и вызывать persist не надо.

По flush() он проходится по списку, сравнивает поля каждой сущности с ранее сохраненной копией и определяет, какие поля изменились. На основе этих данных он генерирует SQL-запросы INSERT/UPDATE и выполняет их.
Ответы: >>1799096
Аноним 2020/09/06 19:39:37  №1799096 243
1599421192064.png (50, 847x353)
353x847
>>1799089
Спасибо что расписал. Не с собеседования, я просто очень любопытный. Начал читать пикрил про транзакции в доктрине и не понял, почему обычный persist()-flush() назвали неявной транзакцией, отсюда появилась мысль что там под капотом происходит что-то более интересное.
Ответы: >>1799111
Аноним 2020/09/06 19:55:46  №1799111 244
>>1799096

flush() делает begin/commit, потому это называют "неявной" расстановкой границ транзакций. То есть ты явно не указываешь сделать транзакцию, а он сам ее делает.

Явное разделение транзакций - это когда ты сам в коде расставляешь beginTransaction/commit. Например, ты можешь захотеть кроме flush() внести еще какие-то изменения в рамках одной транзакции.

persist тут не при чем.
Аноним 2020/09/07 13:06:07  №1799628 245
Объясните зелёному, что за единица в конце документа появляется если отправлять php в котором написан html?
Я юзаю echo для вывода html.
Ответы: >>1799658 >>1799779 >>1800097
Аноним 2020/09/07 13:43:05  №1799658 246
>>1799628
Это оценка кода интерпретатором. Научишься писать код получше, будешь десятки получать. Есть какой-то параметр, чтобы эти оценки скрывать в продакшене.
Ответы: >>1799679
Аноним 2020/09/07 14:19:37  №1799679 247
>>1799658
Бля, у меня ведь раньше была оценка 2к+. Чё то я не в ту сторону свернул значит
Аноним 2020/09/07 14:24:41  №1799681 248
анчоусы, есть такая задача по тому как перенести контент данные.
мне их скидывают в формате json с какой-никакой структурой и я уже должен буду самостоятельно написать какой то плагин-мигратор который мне из этого json распарсит уже в бд.
так вот встало два вопроса:
1)пыха же ведь без проблем даст мне такую возможность чтобы я мог открыть этот json файл, прочитать, пересобрать в массив и его уже загнать в бд через тот же цикл например?
2)сейчас смотрю этот json файл и там все данные в виде:
"name": "\u0448\u043a\u0438" как пример
и это можно спокойно будет обрабатывать и ззагонять прямо вот так в базу чтобы мне это нормально потом прочесть или же надо как то преобразовывать ?
Ответы: >>1799718 >>1799779
Аноним 2020/09/07 15:28:44  №1799718 249
>>1799681
Ну ты должен по крону видимо запускать консольную команду или просто скрипт который будет делать импорт в БД

Ну а юникодовские крякозябры не проблема, почитай про флаги у функций json_encode/decode, если надо в кириллицу красивую перегонять
Ответы: >>1799886
Аноним 2020/09/07 16:58:51  №1799779 250
>>1799628

Ты бы показал пример кода (желательно простой и короткий).

>>1799681

> \u0448\u043a\u0438

Это нормальный способ кодировать Юникодные символы, они превратятся в буквы после json_decode.
Ответы: >>1799886 >>1800097
Аноним 2020/09/07 18:13:12  №1799886 251
Аноним 2020/09/07 21:35:29  №1800097 252
>>1799779
>>1799628
хуй знает что конкретно показывать. выхлоп вот такой
Ответы: >>1800133 >>1800678
Аноним 2020/09/07 22:09:44  №1800116 253
Делаю тестхаб и дошел до создания новых тестов пользователем. При создании нового от юзера приходит большой ассоциативный массив с сложной структурой, который содержит все данные по тесту(вопросы, ответы, всякая общая инфа и т.д.), и функция проходится по нему, валидируя и добавляя в базу вопросы и ответы. И вот тут я немного сомневаюсь, насколько это хорошо с точки зрения архитектуры и читабельности кода. Не лучше ли разбить этот большой массив, который приходит от юзера, на несколько маленьких, которые будут содержать по отдельности вопросы, ответы и т. д. и затем их уже загружать в сервис, который редактирует и создает тесты?
Ответы: >>1800682
Аноним 2020/09/07 23:32:25  №1800133 254
>>1800097
Вот на последнем скрине оценка кода, она после всего остального выводится.
А то что внутри body это ты где-то нахуевертил.
Ответы: >>1800323
Аноним 2020/09/08 07:30:08  №1800323 255
>>1800133
Он ещё походу под виндой запускает код, на линуксе уже давно численная система A-F есть
Аноним 2020/09/08 11:11:31  №1800610 256
анонсы, скажите будет ли нормально идти на SoF спрашивать вопрос по ебучей joomla ? в гугле естест ниче не нашел
inb4: джумла говно
Ответы: >>1801084
Аноним 2020/09/08 11:58:11  №1800678 257
>>1800097

У тебя в коде стоит return require ... Функция require выполняет шаблон, выводится HTML код. Затем, когда функция require отработает, она возвращает true. И ты командой return require .... дописываешь это true в конец (оно выводится как 1).

Тебе надо убрать require из return. Можно вообще убрать return.
Аноним 2020/09/08 12:04:30  №1800682 258
>>1800116

Конечно, лучше делать структуру данных попроще. Если она сложная, то ты можешь описать ее с помощью ООП:

- создать объекты DTO, представляющие данные о вопросе, ответе, итд
- с помощью сериалайзера вроде JMS Serializer / Symfony Serializer преобразовывать приходящий массив в граф объектов
- работать с объектами

Также, можно обойтись без DTO и преобразовывать приходящий массив сериалайзером в объекты-модели. У тебя же есть объекты Вопрос, ВариантОтвета, Тест и тд?

Есть другие варианты. Если бы ты использовал библиотеку Symfony Form, ты бы мог описать форму, и она сама преобразовала бы приходящие массивы в объекты.

То есть, если структура данных сложная, то стоит описать ее с помощью объектов. Если не очень - можно просто обходить эти массивы и вручную переносить данные в объекты.

Было бы хорошо, конечно, использовать Symfony Form: она и преобразует приходящие массивы в объекты, и умеет их валидировать.
Аноним 2020/09/08 13:58:39  №1800868 259
Аноны, скажите пожалуйста, если мы из метода объекта А возвращаем объект B, потом вносим изменения в объект B, то все эти изменения будут так же доступны и в методах объекте А?

Объекты из функций по ссылке передаются?
Ответы: >>1800924 >>1801068
Аноним 2020/09/08 14:45:11  №1800924 260
>>1800868

Да, объекты передаются в функцию и из функции "как бы" по ссылке. Копирования не происходит.
Аноним 2020/09/08 17:28:02  №1801068 261
>>1800868
а че это за паттерн?
мимо джун
Аноним 2020/09/08 17:51:23  №1801084 262
>>1800610
Нахуя в 2020 джумла нужна?
Нормально, но думаю хуй кто ответит.
Ответы: >>1801278 >>1801375
Аноним 2020/09/08 22:04:42  №1801278 263
>>1801084
Ну если долбоёб и хочется заняться полной хернёй (а чего, альтернатив-то джумле нет), то это оптимальный вариант.
Ответы: >>1801375
Аноним 2020/09/09 05:13:26  №1801349 264
Аноны, кто глубоко разбирался в потрохах slim 3 подскажите - где у него точка входа в роут , я чет нихера не пойму пока что.

первым вызывается метод $app->run(), в нем вызывается метод $this->process($request, $response), уже в $this->process получаем экземпляр роутера из контейнера:
$router = $this->container->get('router');
и вызывается метод $router->setasePath() я хз что за базовый путь. А дальше я нихуя не пойму что идет и зачем. Где идет сравнение роутов, где обработка роута. и т.п.?

Далее в этом же методе $this->process, после получения роутера вызывается :

$response = $this->callMiddlewareStack($request, $response);

Тоесть реквест прогоняется через цепочку мидлвэйров, я эту цепочку просматривал, и хз где там роутинг стартует.

Если кто в курсе - набросайте принцип действия.
Ответы: >>1802018 >>1802135
Аноним 2020/09/09 06:46:47  №1801375 265
>>1801084
>Нахуя в 2020 джумла нужна?
понятия не имею
>>1801278
так то много норм проектов в конторе на нормальном стеке на которых работаю, но щас спихнули этот кал. поэтому надо разбиратьсся
Аноним 2020/09/09 15:40:46  №1801862 266
Изучаю ларавел, пытаюсь сделать логин, Auth:attempt() перенаправляет на отрицательный результат.
Даже не представляю почему не получается и не знаю как посмотреть, если можно вообще.
Есть подозрение что он Auth не туда смотрит, хотя я поменял в config/auth.php ,в разделе User Providers, table => на название нужной таблицы (driver => database оставил).
Кто-нибудь может подсказать куда посмотреть?
Ответы: >>1801944
Аноним 2020/09/09 16:23:44  №1801944 267
>>1801862
Auth:attempt() использует стандартный гвард "auth" по дефолту. В документации читай о том где и что ты мог изменить, там разные вариант, в auth мидлвэйре, и в провайдере аутентификации есть настройки.
Смотри по каким полям ты лоигруешься, том по дефолту email и password
Ответы: >>1802460
Аноним 2020/09/09 17:28:33  №1802018 268
>>1801349

А ты не пробовал заглянуть в функцию callMiddlewareStack? Она находится в трейте. Там есть вызов функции $this->seedMiddlewareStack(); https://github.com/slimphp/Slim/blob/5ca71b9690998b8d7c096ac3e3599bd48637c9c1/Slim/MiddlewareAwareTrait.php#L111

Эта функция добавляет в качестве самого первого middleware $this, то есть объект Slim\App. И затем она вызывает это Middleware как функцию, в этом случае у объекта вызывается магический метод __invoke. Вот он: https://github.com/slimphp/Slim/blob/5ca71b9690998b8d7c096ac3e3599bd48637c9c1/Slim/App.php#L487

В нем уже идет обращение к роутеру. Задавай еще вопросы, если что-то непонятно. Сделано, конечно, очень головоломно, и лучше бы первое middleware добавлялось бы в конструкторе Slim\App - тогда все было бы очевиднее.
Ответы: >>1802164 >>1803985
Аноним 2020/09/09 17:41:03  №1802030 269
Нормальная ли практика пихать приходящие от клиента данные в публичные поля контроллера в конструкторе? Сегодня такое увидел и немного подвис.
Ответы: >>1802655
Аноним 2020/09/09 18:55:53  №1802135 270
>>1801349

Базовый путь - это когда корень сайта находится внутри какой-то папки, например, главная страница не http://example.com, а http://example.com/site/. Тогда /site/ - это базовый путь.
Аноним 2020/09/09 19:35:18  №1802164 271
>>1802018
Спасибо за ответ! В callMiddlewareStack я конечно смотрел , как и в трейт. И я предполагал что самый первый мидовэйр это this и есть.
Но вот разобрать код в этом методе я не смог, не смог понять где это прописано , завтра буду ещё раз внимательнее изучать.
Ответы: >>1802218
Аноним 2020/09/09 20:13:53  №1802203 272
Ребята, вот у меня есть игра шахматы и нужно хранить ее состояние и менять его пока игра идет. Как же мне это сделать? Неужели хранить в бд?
Ответы: >>1802218
Аноним 2020/09/09 20:26:08  №1802218 273
>>1802164

$this внутри трейта это объект класса, в который встроен трейт (Slim\App в данном случае). И строчки

$kernel = $this;
$this->tip = $kernel;

в методе seedMiddlewareStack ставят первым миддлевейром именно объект Slim\App.

>>1802203

Можно: в БД, в сессии, в файле, в куках (для любителей поизвращаться).
Аноним 2020/09/10 02:27:57  №1802353 274
Зачем в современных реалиях вообще нужен PHP? Весь фронтенд эффективнее же делать на всяких JS-фреймворках, да и бэкэнд тоже на них делают.
Вопрос суръёзный.
Аноним 2020/09/10 06:46:59  №1802421 275
>>1802353
>Весь фронтенд эффективнее же делать на всяких JS-фреймворках
А как ты себе представляешь в 2020 году фронтенд на чём то КРОМЕ html+css+-js? Всё остальное померло, или требует финтов ушами не особо очевидных.


Бекенд можно делать на чём угодно. Хоть на java хоть на python хоть на руби-на-рельсах, хоть на go, хоть на node js, хоть на пыхе. Вон, половина(или около того) сайтов работает вообще на вордпрессе, и ничего. Вопрос выбора инструмента нельзя задавать в общем, надо в частных случаях смотреть почему тот или иной взят за основу.
Ответы: >>1802443
Аноним 2020/09/10 07:29:37  №1802443 276
>>1802421
>фронтенд на чём то КРОМЕ html+css+-js?
так можно же на других языках писать которые потом скопилятся тебе в js. только не понятно нахуя это надо
в питон треде зимой кидали ссыль на какой то сайт где был фронт на питоне написан. но там дакая лажа и дичь устаревшая лет на 10, что лучше бы вообще не делали этого
Ответы: >>1802683
Аноним 2020/09/10 08:15:49  №1802460 277
>>1801944
Спасибо. Все просматриваю по 10 раз анончик, пытаюсь понять как и что работает, стараюсь не использовать ничего лишнего, ни валидаций, ни мидлов, чтобы не сломать, делая вещи шаг за шагом.

У меня получилось решить частично проблему, но я все еще пытаюсь понять как. Вот что я сделал:

1)Reset все таблицы и заново migrate
У меня 2 немного отличающиеся таблицы, дефолтная users и еще lusers.
2)До этого у меня не работал DB:seed, я забил на проблему думая это проблема железа. Но консоль пишет что он пытается запихнуть моего LuserSeeder в таблицу users, а не lusers. //Почему? В create_lusers_table все прописано, вроде.
Я сделал таблицы почти идентичными. Он успешно засидил в users (а нужно было в lusers).
3)У меня в сидере был пароль-слово простое. Я поменял на Hash::make.
Формы, если что, у меня сделаны через ~blade: {{ Form::password('password') }}.

Таким образом все залогинилось, разлогинилось, начало работать, но я до сих пор не понимаю причину.
DB:seed не мог запихнуть моего сидера в нужную таблицу. Я делаю вывод что Auth::attempt() тоже смотрел не туда при проверке. Мог ли он ругаться на то что пароль без хеша?
Я пытаюсь пересматривать все файлы, связанные с аутентификацией.
В config/auth.php, как я говорил, я добавлял нужную таблицу lusers в веб провайдеры:

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],

'users' => [
'driver' => 'database',
'table' => 'users',
],
\t\t
'users' => [
'driver' => 'database',
'table' => 'lusers', //нужная мне таблица
],
],

Что я упускаю?
Ответы: >>1803754
Аноним 2020/09/10 09:37:26  №1802525 278
ананасы, пытаюсь разобраться с mail() на своем локальном компе. стоит апач, в php/apache2/php.ini настраиваю естесн. делал по этому гайду http://aleksandr.ru/blog/fiktivniy_sendmail_dlya_linux/ и сука она нихуя тупо не работает блять. создал на сайте testmail.php , перехожу на него и результат функции mail() возвращает мне false. в чем мб проблема то ? куда копать ?
Ответы: >>1802682 >>1803078
Аноним 2020/09/10 11:03:48  №1802571 279
>>1802353
Вопрос какой то тупой.
Аноним 2020/09/10 12:24:02  №1802652 280
>>1802353
В общем-то не нужен, как не нужны и прочие 90% языков. В конце-концов, любую задачу можно решить на любом языке общего назначения, мог бы быть один язык для всего.
Но человечество так не работает, мы всему создаём альтернативы. Веусовщина, какие-то уникальные требования, по приколу - есть много причин, которые порождают множество языков, на которых люди пишут множествосхожих фреймворков, библиотек так далее.
Я тут хотел привести пример с розетками или кабелями для телефонов, чтобы ты понял, что всегда есть ещёодин стандарт или реализация,но внезапно вспомнил, что даже на метрическую систему ещё не все страны перешли.
Так что выберай язык под задачу и далее на свой вкус, на этом всё.
Ответы: >>1802685
Аноним 2020/09/10 12:25:54  №1802655 281
>>1802030
Хуйня. Состояние приложения не должно зависеть от контекста конкретного запроса.
Аноним 2020/09/10 12:46:45  №1802682 282
>>1802525
ну же анон, помоги. уже второй день ебусь
Ответы: >>1803078
Аноним 2020/09/10 12:46:49  №1802683 283
>>1802443
>так можно же на других языках писать которые потом скопилятся тебе в js
>потом скопилятся тебе в js

Ну и нахуя тогда? В чём профит?
Аноним 2020/09/10 12:48:51  №1802685 284
>>1802652
Тогда чем же PHP лучше и в каких задачах?
Ответы: >>1802688 >>1802695 >>1803053
Аноним 2020/09/10 12:51:30  №1802688 285
>>1802685
Прост на старте, на нём не надо думать про рантайм по сути(всё равно запрос-ответ-смерть процесса).
Аноним 2020/09/10 12:56:51  №1802695 286
>>1802685
Он лучше по скорости разработки. Хотя ответ должен быть более комплексным.
Есть вот джава или шарп, строгие и очень многословные (однако выразительные весьма) языки.
Есть питон или жс - не так выразительны как джава/шарп, но сделать можно тоже самое, местами даже лучше, а что главное очень сильно быстрее.
И есть пхп, где-то по середине выразительности, и что важнее, хоть и вытекает из предыдещго - быстрее по скорости разработки.
По скорости тут не оч все, изза модели родился-сдох, сам по себе язык очень быстрый сейчас, но модель исполнения пускает это все по пизде (и нежелание разрабов делать коробочную асинхронность).
Ну и все выше сказанное относится к разработке на фреймворках или на голом пхп (если опытными людьми), но не относится к разработке на цмс разных (вордпресс, друпал, битрикс и тд). Ну или проще - не относится к разработке на пхп по старым гайдам. Это вообще другая сфера, она даже к программированию почти не относится. Чуть чуть пересекается только, потому и популярна так. Почти все норм разрабы предпочитают зрелую разработку, но на всяких цмсках такая тонна всего понаписана, что пыха от этого уже не отмоется наверно.
Ответы: >>1802712 >>1803053
Аноним 2020/09/10 13:16:54  №1802712 287
>>1802695
В целом соглашусь, но сентенцию про скорость разработки надо раскрыть детальнее.
Если писать на php "как надо", с типами, паттернами, слоями и так далее, то скорость написания будет несколько медленнее, но зато приложение не схлопнется в коричневую дыру после года разработки. Но при этом скорость будет очень близка или даже равна скорости разработки на джаве или шарпах.
А если писать на отъебись, чтобы побыстрее, забить на типы и архитектуру, то да, написание кода первое время будет быстрее.

Я как-то уже писал тут, что плюсы пхп лежат скорее в лёгкости освоения нубами (отчасти) и формошлепства на цмсках, а в энтерпрайз разработке он почти такой же, как та же жава, но похуже.
Ответы: >>1802761 >>1803053
Аноним 2020/09/10 14:07:30  №1802761 288
>>1802712
>>Если писать на php "как надо", с типами, паттернами, слоями и так далее

Однако это и плюс, потому что это поднитмает средний уровень разработчика до принятых стандартов, что облегчит миграцию на другой стэк. Как бы фронт библиотеки к примеру не толкали функциональное программирование - гранитное ООП живет и здраствует и альтернатив нет.
Тот же любимый всеми тайпскрипт - ооп ориентирован, там интерфейсы есть, тайпхинты и прочие радости.

Ответы: >>1803264
Аноним 2020/09/10 16:09:15  №1802887 289
Пхп код в теге <script> - это ведь в 2к20 на новых версиях языка не должно встречаться?
Ответы: >>1802959 >>1802990 >>1803519
Аноним 2020/09/10 17:16:21  №1802959 290
Ответы: >>1802994
Аноним 2020/09/10 17:29:05  №1802990 291
>>1802887
Это способ сразу гидрировать данные для твоего реакта без лишнего Аякс запроса, ничего плохого не вижу
Ответы: >>1802994
Аноним 2020/09/10 17:36:17  №1802994 292
>>1802959
>>1802990
Ну просто помимо человека, который так пишет в каком-нибудь пхпшторме или что там это считает нормальным, есть я - и я захожу немного поправить фронтенд и уйти заниматься другими делами, поважнее, а vs code хуяк, и форматирует код в теге script, как js скрипт, со всеми вытекающими. И тут есть 2 варианта развития событий - я либо не знаю, о том, что где-то произошла такая хуйня и ничего не исправляю, а потом люди охуевают с того, что оно всё само сломалось, либо я сижу и дрочу этот код, пока всё не поправится. Выключив перед этим prettier и прибуду, которая пхп форматирует.
Ну и я мельком глянул документацию пыхи, там пишут, что с 7й версии так делать не надо. Я конечно не секу, но как по мне, тег скрипт для жс, а не для пхп.
Ответы: >>1803212 >>1803519
Аноним 2020/09/10 18:14:45  №1803053 293
>>1802353
>>1802685
>>1802695
>>1802712
Нахера эти платиновые извечные вопросы нужны. Во фронт тредах говорят что фронд для вкатывальщиков, но вот потом нужно обязательно что-нибудь нормальное учить! В ява треде говорят что это устарело и надо переходить на асп, в си тредах говорят что ява-то огого, там где-то хайпят всякие языки. Везде одни и те же вопросы, везде одно и тоже. Зачем это все. У соседа всегда трава зеленее будет.
Ответы: >>1803056
Аноним 2020/09/10 18:27:20  №1803056 294
>>1803053
>У соседа всегда трава зеленее будет.
Не видел еще чтобы где-то пхп нахваливали, кроме как в среде пыхеров.
Ответы: >>1803058 >>1803074
Аноним 2020/09/10 18:33:03  №1803058 295
>>1803056
Я не видел дочерей Мела Гибсона, и что.
Аноним 2020/09/10 18:57:29  №1803074 296
>>1803056
потому что кроме пыхеров никто не в курсе, что PHP ВНЕЗАПНО единственный скриптовый язык с нормальным ООП здорового человека
Аноним 2020/09/10 19:06:09  №1803078 297
>>1802682
>>1802525
Ну ёптыть, ты доку по mail смотрел?
https://www.php.net/manual/ru/function.mail.php
первый коммент - про то как ошибку конкретную увидеть
$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
$errorMessage = error_get_last()['message'];
}

Телепатирую то у юзера, из под которого исполняется web сервер, нет прав на запись в директорию DIR="/tmp/fake_sendmail"

Аноним 2020/09/10 19:23:42  №1803085 298
>>1802353

Бизнес-логику как раз удобнее писать сихронным кодом, а асинхронность JS все усложняет. Так как JS не умирает, в нем может жутко утекать память, в PHP такой проблемы нет. Так как в JS нет тайп-хинтов, код на нем читать тяжелее, а IDE не может его проверять и давать подсказки. PHP взрослее, и в нем есть библиотеки и фреймворки вроде Symfony, а в JS нет и там заново изобретают велосипеды. Если мне не изменяет память, шаблнизаторы в JS послабее того же твига. Также, в JS много странных особенностей, например, он не выдает ошибки при опечатке в имени свойства.

И почему ты решил, что писать бекенд на JS эффективнее? Нужны аргументы.
Ответы: >>1803264 >>1803336
Аноним 2020/09/10 21:15:40  №1803212 299
>>1802994
>есть я - и я захожу немного поправить фронтенд и уйти заниматься другими делами, поважнее, а vs code хуяк, и форматирует код в теге script, как js скрипт, со всеми вытекающими.
Честно не сильно представляю что там может сломаться, я у себя не замечал чтобы вскод в php файлах у меня жс вообще форматировал (может я отключил это, хз)

>Ну и я мельком глянул документацию пыхи, там пишут, что с 7й версии так делать не надо.
Не сильно понимаю какая разница какая тут версия. Если у тебя есть логика, которую удобно сделать на жсе, но которая требует какой-то конфигурации или данных с сервера, то это вариант напрямую в страницу в window ебануть эти данные, а потом на жсе распарсить, при этом сэкономив запрос (чаще всего это не какая-то залупа ненужная, а то что нужно сразу здесь и сейчас)

>Я конечно не секу, но как по мне, тег скрипт для жс, а не для пхп.
Как по мне, то если у тебя инлайновый жс никогда не меняется, то имеет смысл ебануть этот кусок сразу в бандл и выполнять по условию
Ответы: >>1803339
Аноним 2020/09/10 22:18:11  №1803264 300
>>1802761
Ну уровень разработчика-то поднимает, но зачем это делать на php? Хочешь писать энтерпрайз - иди сразу в джаву и всё, скачок между "программированием" на cms и "нормальным" программированием всё равно такого размера,
что вкат в новый язык будет незначительным.
Условно, вкат в php формошлёпство - это 20 часов, а в энтерпрайз, что на php, что на джаве - 2000 часов. Тебе сильно поможет, что на вкате в php ты сэкономил и тебе осталось 1980 часов? Скорее всего нет.
> Тот же любимый всеми тайпскрипт - ооп ориентирован, там интерфейсы есть, тайпхинты и прочие радости.
Как раз в тайпскрите функциональщины дохера и все радостно её юзают. Да и не только там, в джава-мире она тоже активно используется.

>>1803085
Здесь много херни, отвечу по пунктам.
> Бизнес-логику как раз удобнее писать сихронным кодом, а асинхронность JS все усложняет
Бизнес-логика обычно синхронна - это верно. Но ассинхронность JS не то, чтобы сильно всё усложняла, уже на промисах всё было нормально с поддержкой такого кода, а с async/await код практически ничем не отличается от синхронного уже.
> Так как JS не умирает, в нем может жутко утекать память, в PHP такой проблемы нет.
Это решается простым правилом "не пиши никуда вне контекста запроса" и утечки данных прекращаются моментально, что в js, что в java, что в демонах на php. Серьёзно, за почти 5 лет разработки бекендов, которые не рождаются, чтобы умереть, проблема с утечкой у меня была одна-единственная, когда внешняя либа на php на каждый вызов метода сохраняла данные в статическое поле одного класса, типа черезжопный кеш. И то, нашёл и исправил. В js и других языках не встречал ни разу такого может потому что работаю в нормальных конторах и у нас мало долбоёбов работает
> Так как в JS нет тайп-хинтов, код на нем читать тяжелее, а IDE не может его проверять и давать подсказки.
Здесь есть здравое зерно, но именно что зерно. Даже бекенды на ноде уже пишутся на тайпскрите, где система типов уворована из C#, то есть намного более развита, чем в PHP: больше типов, больше проверок, больше возможностей, от дженериков до енумов и кортежей.
Но многие до сих пор принципиально пишут на голом js, что очень хорошо, потому что позволяет заранее ограничивать общение с даунами, иногда даже до собеседования.
> PHP взрослее, и в нем есть библиотеки и фреймворки вроде Symfony, а в JS нет и там заново изобретают велосипеды.
Они примерно одного возраста. Аналогов symfony в js действительно нет, но не потому, что он плох, а потому, что там не принято писать фреймворки-комбайны. Скорее как в го, есть куча библиотек из которых ты сам собираешь себе "фреймворк" под задачу. Библиотеки есть под любую задачу, можно подобрать аналог для каждого из компонентов симфони.
> Если мне не изменяет память, шаблнизаторы в JS послабее того же твига.
Очень странное утверждение, учитывая, что это именно JS выполняется на фронте и именно на нём написаны все эти реакты/вю/ангуляры. Вот уж где шаблонизации и вывода текста навалом..
> Также, в JS много странных особенностей, например, он не выдает ошибки при опечатке в имени свойства.
Особенностей много в любом языке и в php в том числе, а конкретно эта "особенность" во-первых, не является ошибкой с точки зрения логики js (в php-шных массивах ты тоже ошибки при опечатке не получишь, кстати), а во-вторых, резко стала неактуальной с появлением тайпскрипта.
> И почему ты решил, что писать бекенд на JS эффективнее? Нужны аргументы.
Он сказал, что на js эффективнее делать фронтенд и с этим спорить бесполезно. А для бекенда они +- равны, php за счёт своих фреймворкокомбайнов облегчает вкат и даёт возможность быстро нахерачить шаблонного кода, js/ts даёт больше возможностей, как язык, но несколько требовательнее к разработчику.
Ответы: >>1803336 >>1803344
Аноним 2020/09/10 22:18:56  №1803266 301
Аноним 2020/09/11 04:12:48  №1803336 302
>>1803085
то что нода менее удобна для "обычных" приложений - это очевидно.
Там где на пхп без единой зависимости нуб накидает сайтец, даже динамический с базой. Нуб на ноде начнет сосать бибу на этапи парсинга входящего бинарного потока от банальной post-формы. В ноде такая банальная задача сразу тянет за собой понимание потоков, буферов, событий и их обработчиков, асинхронности. А еще и банально распарсить этот запрос нужно, выдрать из него файлы и все такое.

Мне нода нравится, но она для отдельных вещей. Пердолиться с сокетами сплошное удовольствие.

>>1803264

>>Как раз в тайпскрите функциональщины дохера
Как и ооп-шины. Тайпскрипт в суперпозици между двумя стульями.

>>Ну уровень разработчика-то поднимает, но зачем это делать на php?

А зачем это не делать на пхп? Это демагогия. И вообще это очень джуновская постановка задачи, в духе -зачем в 2к20 учить одно, если другое точно лучше, мне так сказали на ютубе. Многие совсем не вчера начали писать на пхп, и рады тому что язык растет.
А рынок предлагает много работы на пхп ларавел/симфони, и помирать это все не собирается. То что ниша пхп в связи с ростом его как языка слегка смазалась, пока что не дает никаких возможностей предположить что дальше будет. Но по крайней мере я знаю что я если че смигрирую на го, или ноду, ее я знаю, или в жаву пхп форк жавы же :3
Можно и на питон, но Гвидо ушел, язык как мне кажется подзамер в развитии.
Ответы: >>1804126
Аноним 2020/09/11 04:22:34  №1803339 303
>>1803212
> Честно не сильно представляю что там может сломаться
<??> превращается в
<
?
>
?
Ну и код между ними.
Всё идёт по пизде из-за этого
Ответы: >>1803386
Аноним 2020/09/11 04:37:04  №1803344 304
>>1803264
>>уже на промисах всё было нормально с поддержкой такого кода
Все равно асинхронность лезет из щелей. Разница к примеру в возврате промисов из циклов for() и foreach() - где первый выполняется последовательно, что позволяет собрать промисы по очереди, а второй зарезолвит промисы как пойдет. И еще много всяких деталей.
>>Даже бекенды на ноде уже пишутся на тайпскрите
Но по сути же тайпсккрипт это сахар для js. Хотя я как то глянул - мне понравилось, нужно глубже познакомиться с ним.
>>а потому, что там не принято писать фреймворки-комбайны.
Не верю я в концепцию принято/не принято. Скорее сомгли /не смогли, и опять же на ноде есть nest - значит комьюните родило таки, а не "не принято". Подход собери солянку имееет свои весьма дерьмовые недостатки. Большой фреймворк и комьюнити вокруг него дают оч важную вещь - народ начинает писать по стандартам фреймворка, и фреймворки пишутся как правило компетентными людьми.

>>А для бекенда они +- равны,
Зависит от контекста задачи. Для типовых вещей пхп удобнее и гораздо. Но у ноды сови плюсы, мне она нравится но прям все подряд я на ней бы не стал писать, зачем когда есть проще и удобнее инструмент?

>>> Если мне не изменяет память, шаблнизаторы в JS послабее того же твига.
Думаю имеентся ввиду серверная шаблонизация mustache или pug
Ответы: >>1804126
Аноним 2020/09/11 06:51:09  №1803386 305
>>1803339
ну так ты отключи эту хуйню. есть вещи которые ты можешь ебануть туда только инлайном как анон выше описал. например мне с бека прилетают точки для карты которые надо парсить на js . и как предлагаешь мне это делать? писать на бэке отдельный ajax-контроллер для того чтобы он мне эти точки выгружал и еще раз гонять его ?
Ответы: >>1803519
Аноним 2020/09/11 08:02:49  №1803425 306
>>1785871 (OP)
как не быть долбаебом и начать твой курс?
Аноним 2020/09/11 09:51:11  №1803519 307
>>1802994
>>1802887
Не слушай всяких долбоёбов. В 2020 не пользоваться шаблонизаторами-уебанство, так что у тебя никаких ни html ни js элементов в коде не должно быть.

>>1803386
Шаблонизатор. Создаёшь тплку-захуяриваешь там свой сраный <script>, и в него уже передаешь что тебе надо.
Ну и в одной цмске видел вообще функцию которая создаёт js переменную(первый параметр имя, второй-значение).
Ответы: >>1803559
Аноним 2020/09/11 10:38:21  №1803559 308
>>1803519
ну вот я об этом. например работаю с blade шаблонизатором. как мне загнать туда переменную кроме как <script> const arr = @json($arr)</script> ?
Ответы: >>1803565
Аноним 2020/09/11 10:46:05  №1803565 309
>>1803559
Так это уже вполне норм практика. Тут нет смешения кода и отображения, тут нет пресловутых <??> которые упоминались в изначальном вопросе.
В данном конкретном случае можешь строку json генерить разве что до передачи в шаблон, а в шаблоне вызывать обычным {{ $var }}(так же вроде в блейде?), если тебя смущает преобразование внутри шаблона.
Аноним 2020/09/11 11:28:41  №1803603 310
Чем занимаются wordpress/bitrix сверхлюди?
Как я понял все эти галеры хотят в проектике кнопку на один пиксель подвинуть, а проблема в том, что хуй пойми где это сделать, потому что style в элементе даже не где-то в темплейтах, а вообще в хуке, и то же самое со всей логикой приложения, которое тупо накидано?
Аноним 2020/09/11 13:33:17  №1803728 311
>>1803603
на самом деле от самой галеры и от ее проектов зависит. в каких то местах говнище уровня сделать сайт за две недели для местного васяна у которого своя автомойка занидорага, в каких то наоборот ахуенно большие, сложные проекты где от битрикса/вп практически ничего не осталось. хороший пример - магазин эльдорадо
тут уже зависит от самого проекта и потребностей клиента, и в зависимости от него что то делают.
по поводу сверхлюдей - как человек который плотно комуницировал с битрикс/вп/джумла коммунити на протяжении уже полугода где то, то могу смело заявить что там 90% это нихуя не разработчики. это какие то вебмастера или сеошники которые там чуть-чуть в погромирование могут, но не более которые ну тупо знают эту хуйню в какой то степени.
>хотят в проектике кнопку на один пиксель подвинуть
задачи разные бывают. тут так и не скажешь сразу. иногда да рили бывали таски где лого на мобиле надо было поправить, а иногда развернуть большую хуйню. как пример: интеграцию полноценную с каким нибудь апи для рассылок смс сообщений своим клиентам
>то же самое со всей логикой приложения, которое тупо накидано?
здесь так же от проекта зависит и от того кто ведет. не угадаешь, но в большинстве своем - кал собачий. объясняется на самом деле просто: есть задача, надо ее как то решить. ты идешь в доку дай бог чтобы она еще была и ищешь инструменты этой cms/фреймворка которые помогут тебе это решить. если не находишь - идешь в гугл и там так же обсираешься. идешь к коммунити и спрашиваешь у них - они тебе просто ничего не отвечают потому что ничего из погромирования не знаю, а слово очередь у них ассоциируется с пятерочкой у дома. ну и ты почесав репу как это делать, начинаешь говнокодить чтобы хоть как то таску закрыть. вот как то так и накатывается этот снежный ком.

Аноним 2020/09/11 13:58:28  №1803754 312
>>1802460

У тебя странный config/auth.php, там в массиве 3 записи с одинаковым ключом 'users' - наверно, ключи должны быть разные.
Аноним 2020/09/11 14:08:05  №1803767 313
>>1803603

Ну вот ты демонстрируешь тут неумение пользоваться инструментами. Смотришь на эту кнопку в DevTools браузера (Ctrl + SHift + I), смотришь какие у нее классы и какие у соседних элементов. Правишь в DevTools стили, чтобы она сдвинулась на пиксель. Поиском по файлам находишь, где находится нужное CSS правило и переносишь туда правки из DevTools. Все, задача решена.
Ответы: >>1803841 >>1804155 >>1806277
Аноним 2020/09/11 14:52:50  №1803794 314
>>1803603
Тем же, чем остальные веб-макаки (крудошлепство, апишки, базоебля, нужное подчеркнуть), но в условиях извращенной как демоны хаоса логики CMS.

До определенного уровня CMS позволяет делать задачи просто и быстро, но достаточно быстро ты этот уровень перерастаешь и она начинает совать тебе палки в колеса.

Ответы: >>1804131
Аноним 2020/09/11 16:17:26  №1803841 315
>>1803767
>переносишь туда правки из DevTools
Допустим это выкакивается где-то через echo и классов на этом элементе нет, потому что кто-то уже двигал на два пикселя в другую сторону раньше и через атрибут style это было сделать проще. На размышление 0 секунд.
Ответы: >>1803996
Аноним 2020/09/11 19:25:24  №1803985 316
>>1802018
Я в принципе подразобрался с тем как устроены мидлвэйры. К сожалению прям много времени не смог потратить. Сейчас разбираюсь с роутером , есть такие вопросы:
какова задача класса \FastRoute\Dispatcher? Что он диспетчерит?
или для чего нужен класс Routable? Описание "Маршрутизируемый объект с поддержкой промежуточного программного обеспечения"
мне мало чего дало

Простые роутеры я сам конечно писал, где входящий url просто парсится регуляркой.
Ответы: >>1804016
Аноним 2020/09/11 19:36:33  №1803996 317
>>1803841

Тогда ищем по тексту кнопки, или по соседним элементам. Если задач по проекту много, то можно попробовать уговорить провести рефакторинг кода и сделать нормальные шаблоны.

Но по моему опыту, даже в системах на Симфони с Twig приходится действовать через поиск по имени класса или тексту. Так как шаблонов там могут быть тонны и это самый быстрый способ найти элемент. Хотя, конечно, криворукий верстальщик и проект на Симфони способен испортить.
Аноним 2020/09/11 20:05:32  №1804016 318
>>1803985

> какова задача класса \FastRoute\Dispatcher? Что он диспетчерит?

Ты не ошибся в названии класса? Ты имел в виду интерфейс FastRoute\Dispatcher из библиотеки fastroute или FastRouteDispatcher из Slim 4?

Первое - это сторонняя библиотека для роутинга, которую использует Слим, и интерфейс Dispatcher там довольно простой (и с комментарием): https://github.com/nikic/FastRoute/blob/master/src/Dispatcher.php . По URL и HTTP методу ищется подходящий обработчик.

Второе - это видимо адаптер для этой библиотеки, который помогает ее вызывать из Слима 4.

Можно сделать поиск по FastRouteDispatcher и найдется пара интересных файлов:

- просто Dispatcher, который создает FastRouterDispatcher и набивает его информацией о роутах: https://github.com/slimphp/Slim/blob/cf68c2dede23b2c05ea9162379bf10ba6c913331/Slim/Routing/Dispatcher.php

- тест, в котором видно, как используется FRD: https://github.com/slimphp/Slim/blob/cf68c2dede23b2c05ea9162379bf10ba6c913331/tests/Routing/FastRouteDispatcherTest.php

> для чего нужен класс Routable

Как я понимаю, это основа для класса, представляющего один роут или группу роутов с общими свойствами. Там есть свойства pattern, callable, middleware. Я бы сделал поиск extends routable по коду (или посмотрел дерево наследования, если у тебя IDE) и посмотрел, кто от него наследуется.

Там находится как минимум:

class Route extends Routable
class RouteGroup extends Routable

То есть тут наследование используется, чтобы вынести общий код в базовый класс Routable.
Ответы: >>1805861
Аноним 2020/09/12 00:34:16  №1804126 319
>>1803336
> то что нода менее удобна для "обычных" приложений - это очевидно.
А что такое "обычное" приложение? Интернет магазин или странички с контентом? Но тогда и php не очень уже, надо цмску брать, где всё готовое уже. А если перекладывать JSONчики из сети в базу по кастомной бизнес-логике, то оно примерно одинаково, в php ближе к классическому ооп, в ноде больше к функциональщине.
> Нуб на ноде начнет сосать бибу на этапи парсинга входящего бинарного потока от банальной post-формы.
Втираешь какую-то дичь, такие задачи всегда решаются соответствующим пакетом. В php тоже, знаешь ли, никто с нуля не пишет ничего.
Про события и потоки отчасти верно, но очень отчасти, потому что реально там никого rocket science нет.

> А зачем это не делать на пхп? Это демагогия. И вообще это очень джуновская постановка задачи, в духе -зачем в 2к20 учить одно, если другое точно лучше, мне так сказали на ютубе. Многие совсем не вчера начали писать на пхп, и рады тому что язык растет.
Хз, это вы начали нести херню про то, что "JS не очь, пыха лучше будет". А я утверждаю, что писать на них суръезные вещи в целом одинаково. В пыху просто чуть легче вкат, в ноде больше возможностей.


>>1803344
> Не верю я в концепцию принято/не принято. Скорее сомгли /не смогли, и опять же на ноде есть nest - значит комьюните родило таки, а не "не принято". Подход собери солянку имееет свои весьма дерьмовые недостатки.
Таки не принято, прекращай думать пехапешными шаблонами, я серьёзно. В какой-то момент ты вырастаешь из штанишек и понимаешь, что архитектура, тулчейн и тому подобное замечательно подбирается под задачу, ровно такие, какие нужны, вместо громоздких комбайнов.
Ещё раз, на любом языке библиотеки есть под любую задачу, на том же js можно подобрать аналог для каждого из компонентов симфони, будет то же самое, если тебе охота.
> Большой фреймворк и комьюнити вокруг него дают оч важную вещь - народ начинает писать по стандартам фреймворк
Весомый плюс только для галер, где нужно грести как можно быстрее и как можно проще рабов заменять.
В итоге у тебя получается деревянная архитектура, на которую идеально садятся новички, идеально по шаблону решаются любые задачи (просто копипастом с условного docs.phpframework.net) но при этом этот самый набор шаблонов со скрипом натягивается на любые случаи, отличающиеся от +- большинства. А любой серьёзный проект в итоге обрастает уникальными чертами знаешь-ли.
Кстати, даже если тебе нужен идеальный набор шаблонов, ты не поверишь, это работа на неделю максимум, собрать компоненты, связки, заточить это дело, накидать стандарты по архитектуре, подготовить темплейты для инфраструктуры и так далее. И можно точно так же тиражировать разработку. И для этого не нужен гениальный архитектор, делается усилиями просто компетентного сеньора. я сто раз так делал
Попробуй как-нибудь уволиться со своей галеры, взять другой язык и посмотреть по сторонам, охуеешь, насколько всё не так и насколько мирок php-разработки своеобразен.

> Для типовых вещей пхп удобнее и гораздо. Но у ноды сови плюсы, мне она нравится но прям все подряд я на ней бы не стал писать, зачем когда есть проще и удобнее инструмент?
А я начал спорить, когда услышал глупости, что-де на пхп удобнее бизнес-логику писать и прочую ересь. Реальные причины выбора языка, ты прав, это технические требования, знание командой, доступность и цена спецов на рынке и всё такое. Но при этом, глобально, нет причины всегда выбирать php или всегда ноду, они сравнимы.
Но конкретно для разработчика есть ещё такие критерии, как современность и развитость экосистемы, например. Или средний рейт. И вот здесь уже php выглядит, как не самый удачный вариант для инвестиций личного времени, потому что php-на-cms это но карьерный тупик (правда, быстро достижимый), а php-энтерпрайз, это та же джава, но несколько похуже (а если так, то, может, джаву взять?).

> Думаю имеентся ввиду серверная шаблонизация mustache или pug
Серверный рендеринг сейчас сильно развит в мире php потому что php родился ещё в ту эпоху, когда других способов и не было и все последние 20 лет использует инструменты для этого в своей экосистеме. Я вообще не уверен, что значимая часть людей использует серверный рендеринг на ноде, все больше склонны жсончики гонять, так что нет и стимула толкать mustache в какую-то другую сторону. Но даже если и так - они с твигом сравнимы. У твига может быть (кстати, хз) есть больше фич, которые всё равно 3.5 калеки используют, а основное, хм, "ядро" примерно такое же, как и в mustache, как и в питоновой джиндже, готемплейт или где-либо ещё.

Ответы: >>1804283 >>1804570
Аноним 2020/09/12 00:49:51  №1804131 320
>>1803794
Максимально двачую. Сам несколько лет "разрабатывал" на cmsках, в том числе были очень крупные интернет-магазины уровня Эльдорадо (не русские, были субподряды от европейских аутсорсеров).
Так вот, цмски всегда заточены на то, чтобы наклацать себе сайтик мышкой и потом мышкой же им управлять. В итоге, вся логика как ядра, так и модулей заточена на какой-то определённый флоу, что пользователь может накликать и зачем (что в базе от таких подходов твориться - не спрашивай. Про нормальные формы эти ребята только слышали). И пока ты действуешь в тех же рамках (накликиваешь поля, подсовываешь шаблончики, настраиваешь триггеры, ставишь модули для кеша и тп) всё прекрасно. А потом клиент хочет, к примеру, динамическое ценообразование в зависимости от ползунка (скажем, баррели нефти продаёт), а у тебя в цмске екоммерц-модуль работает в стиле "1 продукт типа ААА стоит 5$. Сколько продуктов добавить в корзину?" и 0.9 баррелей ты не насчитаешь никак - и всё внезапно коллапсирует в сверхкоричневую звезду, с матами и борьбой с cmsкой в её же кишках, которые на нестандартную логику ну вообще не рассчитаны.
И таких случаев возникает намного больше, чем может показаться, на очень средненьком проекте (от 600человекочасов) борьба бобра с ослом может занять от трети всего времени! И это не считая шквала неожиданных багов после всего этого дерьма. И всё это из-за того, что вместо того, чтобы взять бизнес-логику и просто реализовать её в коде (через симфони, что угодно), приходится ломать, гнуть и шлифовать логику цмски и её плагинов, чтобы оно приняло приблизительную форму той самой желательной бизнес-логики.
И это я ещё не упоминал дохерищу конфликтов между плагинами самой цмски, умение обходить которые - это отдельный сорт чёрной магии.
Аноним 2020/09/12 04:26:52  №1804155 321
>>1803603
> wordpress/bitrix сверхлюди?
Я тута. Работаю в конторе, которая пытается выбиться в люди пытается делать хорошо, когда бюджет это булка с изюмом, с постепенным повышением ценника для будущих клиентов. В принципе работает, но это нужны такие опущи как я, которые готовы за еду стартануть в сфере. Но я что-то уже всё и похоже она лучше, чем многие в плане задач, в которые я не попал. Возможно когда-то и придёт к успеху, но я предпочту уйти на х3 к зп в уже успешную контору.
В общем за год задач в стиле "передвинуть кнопку" я не встречал, но иногда надо было целиком что-то адаптивным сделать - обычно футер или хэдер, делается это за час-два неча торопиться. Несколько сайтов верстал и натягивал на битрикс - довольно интересно по первому разу, но всё быстро сводится к копированию шаблона компонента news.list и его кастомизации. Поначалу верстал блоки для сайтов, когда только стажировался - верстал откровенное говно, но на уровень конторы оно тянуло - теперь верстаю пиздато и ситуация обратная.
Ещё есть 2 долгосрочных направления - собственный шаблон по-моему сначала стоило делать шаблон поменьше, что-то специализированное - для жкх например, где конкуренции меньше и сайт конторы, это вечные задачи, они не закроются, хоть обосрись, надо просто постепенно делать и стараться делать не говно.
Ещё остопиздевший тип задач - нерабочие или вовсе отсутствующие формы обратной связи - тоже быстро сводится к дрочеву одного и того же, а если нет - то лучше бы да.
>>1803767
Подтверждаю.
А ещё в битриксе обычно предсказуемо стили лежат в папке шаблона в файле со всеми стилями шаблона.
Аноним 2020/09/12 07:41:02  №1804232 322
как вам лара8?
Аноним 2020/09/12 08:55:32  №1804283 323
>>1804126
>>А что такое "обычное" приложение?
Это приложение для которого пхп более чем достаточно, а остальное оверхед.

Нахуя магазину нода и асинхронность? Что бы разраб потеребил свое ЧСВ? Но так за банкет платит заказчик, и ему нужно решение, которое будет структурировано, поддерживаемо, и что бы на место разработчика каждый раз не приходил студент который исходя из своего уютного маня-мирка перепиливал все по единственно правильному паттерну, который он видел в своих маня мечтах аля - transport-agnostic API with remote interface scaffolding. А что бы приходил человек который уже занет какова архитектура, и который гарантировано не начнет все к хуям лопатить. Для этого бизнесу нужны фреймворки.
Банально - был бы я коммерсом, и имел бы я некое коммерческое решение - я бы выбрал ту архитектуру которая более структурирована, и которая даст мне возможность иметь больший пул потенциальных качественных разработчиков, и что бы эти разработчики держали своих мышей в клетке. Потому что ты опять же пляшешь от того что придет человек и сделает архитектуру хорошо, хотя ИРЛ в основном будет - пришел и сделал все через пизду. Потому что научиться архитектуре фреймворка и ее придерживаться - это как стих заучить. А по твоему варианту уже свосем другой уровень подготовки нужен, а как известно люди -ленивое говно и нихуя не делают. А те что не ленивы - хотят много денег.
У меня недавно был собес, вопрос был о том как пхп менялся на протяжении времени, крупная фирма, так собеседующий например крайне отрицательно отнесся к тому что в пхп ввели стрелочные функции. Вот что тут скажешь, люди в основном не особо хотят шевелиться.
И если бы я был маня-ойти стартапером, сидел бы в калифорни, и искал инвестора - то наверно я бы конечно что бы мозги запудрить намутил бы крутых и сложных архитектур на модных платформах и стэках.
А цмс-ки зачастую крайне деревянные, и гораздо более медленные.

>>Втираешь какую-то дичь,
>>соответствующим пакетом
Аргументация - "есть же пакет" это инвалидно. После такого в JS стартуют срачи "замыкания не используются и не нужны". Из коробки нода более низкоуровнева, и предоставляет сырые данные. Пхп более удобен и имеет кучу встроенных полезных вещей, хотя при желани так же можно парсить бинарник входящего потока. Для банального магазина - нода менее удобна, не имеет четкой структуры каждый ебашить будет как хочет, разрабов сложнее найти, не понятно что от них ждать, не ясно как в дальнейшем развивать.

>>В какой-то момент ты вырастаешь из штанишек и понимаешь, что архитектура, тулчейн и тому подобное замечательно подбирается под задачу
Нет никаких штанишек, нет никаких маня желаний. Все современной ойти сидит на своих зряплатах потому что есть бизнес. А бизнес решает свои задачи а не выбирает лучшую архитектуру. Поэтому и появились фреймворки комбаный, как ты сказал, и опять же "комбайн" отлично структурируется на части - и вот у нас есть Симфони. Причем "комбайны" появились они и в JS - что закономерно и показательно - платформа созрела. Если однажды go дорастет до уровня этого - и на нем нахуярят свой Ларавел, а заодно еще и ООП завезут.

>>Но при этом, глобально, нет причины всегда выбирать php или всегда ноду, они сравнимы.
Глобально - это синонимично сферическому коню в вакууме , в данном контексте. Был Руби, его любили, были фреймворк Синатра - удачный, и его архитектуру спиздили все другие платформы. Где он? Был и есть питон, так вообще чет идеальный кандидат на вэб-сервера, медленноват правда, и че? Где весь интернет сидящий на серверах на питоне?
Раз пхп все так же лидирует, раз его сообщество огромно, раз язык очень быстро развивается и вообще не буксует - то видимо есть какой то смысл выбирать пхп. Ниче не мешает на пхп-сервере пилить SPA на реакте/вуе/ангулар. Нахер мне руби, на котором хуй кто пишет, если есть пхп?
Тут делемма как с питоном - питон делает хорошо все во всех нишах, и в каждой нише найдется то, что делает задачу в рамках ниши лучше и удобнее чем питон.

иногда интересно на эти сугубо бесполезные темы подискутировать. Жизнь расставит все по местам. Лет 7 назад питон рвался в вэб, по итогу оказался в оче перспективном загончике дата-саенс и прочих нейронок.


Ответы: >>1804290
Аноним 2020/09/12 09:10:45  №1804290 324
>>1804283
>отрицательно отнесся к тому что в пхп ввели стрелочные функции
Просто не то чтобы они пиздец какую погоду делают, в то время как реально важнейших вещей в пхп еще целый ворох не достает. Сахар оно канеш хорошо, но больше хочется хорошего такого подъема по качеству самого языка, сахарок бонусом (как в свое время с 7 было, которая язык практически с дна спасла).
Ответы: >>1804313
Аноним 2020/09/12 09:51:52  №1804313 325
>>1804290
>>Просто не то чтобы они пиздец какую погоду делают
Не, он выразился как то в духе "дай Бог их не введут в стандарт", хз ему чем они не угодили.
Ответы: >>1804331 >>1804570
Аноним 2020/09/12 10:14:14  №1804331 326
>>1804313
Ну я так же могу выразиться про введение атрибутов в том виде, в ктором они сейчас. Может он чтото подобное имел ввиду (говенный синтаксис).
Ответы: >>1804370
Аноним 2020/09/12 10:21:45  №1804336 327
Что вообще должна содержать в себе модель ActiveRecord? Я могу её представить только как для получения или сохранения данных. А вот обрабатывают ли в них данные, которые возможно потом будут сохранены? И можно линк на гит, где посмотреть это(стандартную модель в проектах) можно?
Ответы: >>1804345
Аноним 2020/09/12 10:31:25  №1804345 328
>>1804336
Если сам реализуешь весь АР, то нужна прямая связь с хранилищем с возможностью построения всех круд операций (для скл это построение запросов будет). Если просто спрашиваешь что в модели должно быть - только то, что описывсает саму модель (поля) и не привязанная никаким образом к базе логика.
Знаю, странно звучит, вроде как с АР удобно как раз логику пилить прямо так, но это как раз то, что делает Ар антипаттерном.
Ответы: >>1804347
Аноним 2020/09/12 10:33:20  №1804347 329
>>1804345
Логику в сервисы/валидаторы отправлять?
Ответы: >>1804348 >>1804719
Аноним 2020/09/12 10:33:37  №1804348 330
Ответы: >>1804719
Аноним 2020/09/12 11:04:23  №1804370 331
>>1804331
Думаю что его пугало то что стрелки автоматом будут захватывать контекст, а не только то что в use() прописано. хз в общем, я и на JS пишу, так что мне это по душе.
Аноним 2020/09/12 15:58:21  №1804570 332
>>1804126

Ты забываешь, что у готового фреймворка есть плюс: он документирован и есть люди, которые его знают. И когда они приходят в проект, они уже знают, где что искать. Плюс есть информация в Гугле, ответы на stackoverflow.

У кастомного фреймворка есть минус: он как правило не документирован, и надо лезть в код изучать творение очередного велосипедиста, тратить на это время.

Мне как разработчику удобнее работать с кодом на Симфони, у меня нет желания изучать очередную самоделку на ноде. Нужды в них я не вижу, так как тянуть данные из базы, отдавать JSON или HTML вполне можно на Симфони. Асинхронность не нужна чтобы зарегистрировать пользователя или принять купон и выдать скидку.

Конечно, есть сложные проекты уровня Яндекса, где это оправданно, но 99% проектов это не Яндекс. Твой проект это с вероятностью 99% не Яндекс. Просто людям скучно нормально работать и хочется поиграться в сложную разработку за счет работодателя.

Далее, шаблонизаторы на сервере это удобный и простой способ генерации страниц, зачем делать клиентский рендеринг и по сути писать 2 приложения вместо одного, я не понимаю. Лишние трудозатраты, которые в большинстве случаев никак не окупятся. Плюс, по моему опыту использования SPA (твиттер, киви) они более тормозные и дольше грузятся, по частям, когда серверное приложение (например, двачик) просто отдает готовую страницу.

Функциональное программирование красиво решает задачи вроде чисел Фибоначчи, а бизнес-логика лучше пишется синхронным императивным кодом. Опять же, его тупо читать проще, чем изучать всякие самописные функции, их комбинации, map-reduce и разбираться как эти функции друг друга преобразуют. Страшно представить, сколько времени уйдет на проект на функциональщине хотя бы на 100К строк кода (это средний размер приложения на PHP на несколько человеко-лет).

Предлагать CMS для интернет-магазина можно только для простых, маленьких низкобюджетных проектов, большие магазины на CMS не пишут.

Ну и не забываем, что в JS нет тайп-хинтов, неудобно писать синхронный код, может течь память (кстати, как вы ищете утечки в проекте на 100К строк? Какой инструмент используете, если он вообще у вас есть?). Есть ли в JS GUI-отладчик? Есть ли инспекции и подсказки в IDE?

Наконец, последнее. Не помню, чтобы я когда-то видел грамотно организованный фронтенд. Верстальщики каждый по своему все раскидывают, без каких-либо стандартов, получается помойка, в которую лезть неохота. Помоечный SASS с блоками вложенности в 6 уровней, без devTools не разберешься, JS с костылями там, где можно просто серверный шаблон поправить. Имена классов в SASS разбиваются на части, и их нельзя найти поиском. Картинки импортируются в JS файлах (чесслово, не вру). Какие-то кривые JS-костыли, чтобы использовать SVG там, где хватило бы PNG. Шрифты в rem вместо нормальных пикселей (то есть в SASS они пишутся в пикселях, а трансофрмируются в rem). Вместо function x пишут const x = () => {.

Не за это ли ты выступаешь, чтобы такая же помойка была и на сервере?

>>1804313

Наверно он испугался, что как в JS вместо читабельного function x начнут писать const x = () => {}.
Ответы: >>1804578 >>1805064 >>1805191
Аноним 2020/09/12 16:09:06  №1804578 333
>>1804570
>проекты уровня Яндекса
Ох уж эти проекты уровня яндекса. Там до сих пор жиквери наравне или даже больше реакта используется. Размер и репутация компании нихера не значит, что там код не дно.
Ответы: >>1804586
Аноним 2020/09/12 16:23:02  №1804586 334
>>1804578
Удваиваю этого господина. У меня с галеры чел ушел в яндекс в 2019м, работал с трекером вроде, такой то фидбэк от него шел про дремучий пиздец, что даже не очень верилось сначала, но позже от еще одного знакомого из Казани точно такие же отзывы услышал. Тимлид 40 летний дегрод, который все эти "новомодные" js-фрэймворки знать не хочет и везде проталкивает свой велосипед, написанный ими почти 10 лет назад. При этом все это говно увязывалось с соседями, которые параллельно пилили микросервисы для них и свой фронт делали на реакте. Даже если они вполовину приврали, мне дико, что такая хуйня может быть в крупных корпорациях.
Ответы: >>1804607
Аноним 2020/09/12 16:42:53  №1804607 335
>>1804586
Именно в крупных чаще и происходит.
Аноним 2020/09/12 18:10:59  №1804719 336
>>1804347
>>1804348
>Логику в сервисы/валидаторы отправлять?
Please, no! Какая к чёрту логика в валидаторах.
А что касается логики в сервисах - это рабочий, но неудачный вариант. Логику лучше писать прям в моделях. Гуглите Anemic model vs Rich Domain model
Ответы: >>1804778
Аноним 2020/09/12 19:32:02  №1804778 337
>>1804719
>Какая к чёрту логика в валидаторах.
Это вообще пушка. Приведи пример валидатора без логики.

>Anemic model vs Rich Domain model
По словам "domain model" можно со 100% вероятностью сдетектить джуна.
Если речь идет про Active Record, то моделью является "модель данных", а не модель "бизнес процесса", и твои баззворды тут ни к селу ни к городу.
Ответы: >>1804788 >>1804893
Аноним 2020/09/12 19:48:13  №1804788 338
>>1804778
валидация логики в стиле 'юзернейм не должен быть длиннее 256 симовлов' - это ОК в валидаторе. Это не бизнес логика.

Логика в стиле 'есть 2 вида счетов - обычный и кредитный. Обычный счет не может уходить в минус, а кредитный может' - это уже не для валидатора
Потому что если ты это в валидаторе напишешь - то получишь хуету в стиле 'сначала на кредитном счёте уходим в минус, потом переключаем тип счёта с кредитного на обычный и получаем невалидный обычный счёт'
В этом месте неадекваты типа тебя обычно начинают либо копипастить одну и ту же логику по нескольким валидаторам для разных полей, либо пишут один мега-валидатор для нескольких полей сущности сразу. И это даже работает, пока какой нить левый джун в другой части проекта не будучи в курсе о твоём мега-валидаторе, не начинает модифицировать поля в active record модели без обращения к твоему валидатору. Кончают такие проекты печально. Поэтому такая логика должна быть только внутри модели
Ответы: >>1804794
Аноним 2020/09/12 19:52:17  №1804794 339
>>1804788
Дохуя понаписал, а на вопрос не ответил.

У тебя есть объект User. Чтобы его создать нужно имя и фамилия. Есть форма, валидатор и твой объект. Куда поместишь правило "нельзя создать пользователя без фамилии"?
Ответы: >>1804795 >>1804797
Аноним 2020/09/12 19:57:12  №1804795 340
>>1804794
Прежде всего - в модель. Там должна быть проверка в стиле
public function setUsername(string $name)
{
if (!$name) throw new Exception('Fuck off! Username should not be empty!')
$this->username = $name
}

Модель ни при каких обстоятельствах не должна становиться невалидной
Ну а дальше для красоты можно её же ещё и в валидаторе продублировать, но это уже вторично-опционально-по желанию
Ответы: >>1804799 >>1804804 >>1805360
Аноним 2020/09/12 20:01:39  №1804797 341
>>1804794
кстати ещё добавлю что в адекватных проектах данные из формы не пишутся напрямую в модель. Создаётся промежуточная DTOшка для формы, она валидируется, и если всё ок, то данные из неё уже заносятся в модель
Ответы: >>1804805 >>1804808
Аноним 2020/09/12 20:01:53  №1804799 342
>>1804795
>вторично-опционально-по желанию
Ну я и говорю, что ты джун.
Ну запихал ты невалидные данные в модель, все пошло по пизде и упало с исключением. Допустим даже с именованным, а не дженерик хуйней. Как ты узнаешь что именно было причиной? Как ты узнаешь надо ли пользователя уведомить об ошибке? Как ты пользователю сообщишь, что ошибка произошла, чтобы он фамилию заполнил?
Ответы: >>1804805
Аноним 2020/09/12 20:05:37  №1804804 343
>>1804795
>Модель ни при каких обстоятельствах не должна становиться невалидной
Если ты имя устанавливаешь через сеттер, то изначально создаешь невалидный объект без имени. Обосрамс.
Ответы: >>1804808
Аноним 2020/09/12 20:05:38  №1804805 344
>>1804799
> все пошло по пизде и упало с исключением
см. >>1804797

>Как ты узнаешь что именно было причиной? Как ты узнаешь надо ли пользователя уведомить об ошибке?
Очевидно причина в кривом запросе с фронтенда. Уведомить - элементарно (в случае не-дженерик эксепшна). В любом современном фреймворке можно впендюрить кастомный обработчик эксепшнов, который бы корвертировал подобный эксепшн в стандартный ответ
Ответы: >>1804807 >>1805376
Аноним 2020/09/12 20:08:36  №1804807 345
>>1804805
И что? Значит в валидаторе будет логика. Вне зависимости от существования dto это логика нужна для соблюдения контракта объекта пользователя. Если поменяешь правила там, придется менять и валидаторе и в dto. Че сказать-то хотел?
Аноним 2020/09/12 20:10:11  №1804808 346
>>1804804
ну это я писал для случая редактирования имени уже после создания обьекта. Вообще, конечно, чтобы нельзя было создать невалидный обьект, надо иметь параметризированный конструктор
class User {
public function __construct(string $name)
{
$this-> username = $name
}
}
И всё, хрен создашь юзера без имени
Беда только в том, что это можно сделать только в нормальных Data Mapper ORMках, типа доктрины
Но для Active Record можно использовать приём >>1804797
Ответы: >>1804811
Аноним 2020/09/12 20:14:19  №1804811 347
>>1804808
>Беда только в том, что это можно сделать только в нормальных Data Mapper ORMках, типа доктрины
Доктрина не использует конструктор. Опять обосрамс.
Аноним 2020/09/12 23:55:18  №1804893 348
>>1804778
Во тут заинтриговало.
Что же по-твоему не так с domain model, детектор хуев?
Ответы: >>1804918
Аноним 2020/09/13 02:09:04  №1804918 349
>>1804893
Не гори, через пару лет разберешься. А пока научись читать, я все в своем посте написал.
Ответы: >>1804987
Аноним 2020/09/13 06:55:20  №1804987 350
>>1804918
>>яскозал
>>детектит кого то по словосочетанию
>>азаза, бамбит
Аргументы истинного сеньора. Иди ка ты обратно в /b, там твоя шизофазия больше впечатления произведет.
Аноним 2020/09/13 08:42:46  №1805064 351
>>1804570
>>они более тормозные и дольше грузятся
Как пример - новое онлайн приложение "Сбербанк онлайн" - эта параша грузится секунд 12. Сука, ну вот нахуя так?

>>Наверно он испугался, что как в JS вместо читабельного function x начнут писать const x = () => {}.

Тут ты не совсем прав, стрелки в JS делают код читаблельнее и лаконичнее в 99 процентах случаев. Потому что в массе своей нужны для коллбэков.
Разве что за исключением таких вариантов:

let z = () => () => console.log('Таки здраствуйте');

Аноним 2020/09/13 10:24:36  №1805119 352
Нравится PHP больше чем Java. Пугает, что через полгода когда буду вкатываться на джуна ларавелиста - буду по итогу битриксы и вордпрессы чинить. Так оно на рынке по итогу или не так?
Ответы: >>1805123
Аноним 2020/09/13 10:30:08  №1805123 353
>>1805119
Так. Просто посмотри вакухи.
Ответы: >>1805129
Аноним 2020/09/13 10:34:21  №1805129 354
>>1805123
А в джаву я так не успею за полгода вкатиться. Чего стоит только Java EE и спринг. А я студентота, мне на работу надо до весны успеть чтобы начать кушать еду.
Ответы: >>1805150
Аноним 2020/09/13 10:50:45  №1805150 355
>>1805129
>А я студентота, мне на работу надо до весны успеть чтобы начать кушать еду.
Ну тогда в джаваскрипт тред загляни.
Ответы: >>1805157
Аноним 2020/09/13 11:00:11  №1805157 356
>>1805150
Жс и фронтенд не интересны.
Ответы: >>1807385
Аноним 2020/09/13 11:45:16  №1805191 357
>>1804570
Сам пишу на фремфорках, как же вы заебали со своим "фреймфорк, куча макак". Фреймворк за вас писать код будет или установил фремворк и проект готов? Макаки часто пишут мимо фрейморков: гуглить как в доктрине делается union? А хуй, сейчас сырой скл напишу. В этом говне без документации потом не придется разбираться? Что происходит с каждым проектом на симфони через год? Куча заброшенных бандлов, куча самописных велосипедов.
Аноним 2020/09/13 14:48:38  №1805360 358
>>1804795

Это учебный тред. Вместо того, чтобы проталкивать свой подход, лучше рассказать, о том, какие вообще есть варианты.

Есть подход, когда модель может быть невалидной (а проверка делается в валидаторе), и подход, когда не может (просто не позволяет ставить невалидные значения). В твоем подходе кроме плюсов есть недостатки:

- если валидация требует обращения к БД, каким-то сервисам, то это сделать трудно, так как в модели нет к ним доступа.Например, если хочется проверить, что в БД еще нет пользователя с таким же email.
- модель, кроме хранения данных, начинает отвечать за валидацию и раздувается
- если поля проставляются через сеттеры, то трудно реализовать проверку нескольких полей вместе, так как часть данных пока не проставлена
- бывает такое, что правила валидации в разных случаях разные. Например, пользователь может писать посты не более 1000 символов, а админ - сколько угодно. Такое тут будет трудно реализовать.
- если пользователь ввел неправильные данные, мы хотим показать форму с ними и предложить их исправить. Если мы не можем хранить неправильно введенные данные в модели, то непонятно где их хранить.
- как правильно заметил аноний, при создании объекта мы получаем невалидную модель. Получается, мы должны передавать все свойства модели в конструктор при создании.
- выброс ошибок через исключения позволяет сообщить только об одной ошибке, а что, если у нас несколько полей заполнены неправильно? При твоем подходе мы получим сообщение только об одном.

Хоть я и раскритиковал такой подход, я допускаю наличие простой валидации в модели. Но не для проверки данных из формы, а для защиты от ошибок разработчика. Например, не позволять задать отрицательную стоимость товара.

Также, есть еще один полезный трюк. Если поля модели связаны друг с другом (например: категория товара и ставка НДС), то логично вместо 2 отдельных сеттеров сделать один, чтобы эти поля можно было менять только вместе:

class Good {
public function setCategory(Category $category, float $vatRate) {}
}

ВариаНт сделать DTO для хранения данных формы и валидировать ее имеет тот недостаток, что мы не сможем валидировать саму модель, а только это DTO. Хотя, Symfony Form реализует такой DTO.
Ответы: >>1805467
Аноним 2020/09/13 14:59:22  №1805376 359
>>1804805

> можно впендюрить кастомный обработчик эксепшнов

Это уже плохая архитектура. Такие обработчики ставят для показа страницы 503 и логгирования ошибки, например.

Что, если это исключение вылетит не при обработке данных формы, а при работе какой-то другой бизнес-логики? По идее, мы должны залоггировать ошибку и показать 503, а ты предлагаешь не логгировать ошибку и вернуть сообщение для фронтенда, который к нему не готов (он ведь не отправлял форму).

Условный пример: допустим, ты в методе setPrice() сделал выброс исключения "цена не может быть отрицательной". Если мы отправили запрос из формы ред-я товара, то тогда логично перехватить исключение и отдать сообщение фронтенду. А если мы вызвали setPrice() из какого-то другого места? Например, при покупке акционного товара мы понижаем цену для следующего покупателя. Тут будет нелогично при добавлении в корзину отдавать эту ошибку на фронтенд, она должна логгироваться.

А ты предлагаешь не логгировать ошибку (так что о ней не узнает разработчик), и показывать сообщение покупателю, добавляющему товар в корзину. Маразм же.

В общем, я наверно, путанно объяснил, но твой подход неправильный. Хотя я такое видел, но так делают из-за неумения разбить логику на части или слои: отдельно у нас валидация, отдельно обработка запроса и отдача ответа. А твой подход нарушает это разделение ответственности.
Аноним 2020/09/13 15:49:35  №1805451 360
Какой код возвращать при ошибке от необработанного исключения? 503?
Ответы: >>1805461 >>1805724
Аноним 2020/09/13 15:56:01  №1805461 361
http-5xx.PNG (36, 596x685)
685x596
>>1805451
Тебя в гугле забанили или ты по английски читать не умеешь?
Ответы: >>1805575
Аноним 2020/09/13 16:01:09  №1805467 362
>>1805360
>Это учебный тред.
Двачую. Это продвинутый подход из области DDD. Для простых проектов а-ля CRUD это всё слишком сложно и нафиг не надо. Но для сложных - только так

>Что, если это исключение вылетит не при обработке данных формы, а при работе какой-то другой бизнес-логики?
Дык правильно! Для того то такой подход и нужен, чтоб у нас система никогда ни при каких условиях не входила в невалидное состояние. Чтоб несведующие джуны не могли ввести приложение в невалидное состояние и не могли запороть базу, просто забыв вызвать валидатор (про который они, естественно, будут не в курсе)
> По идее, мы должны залоггировать ошибку и показать 503
>А ты предлагаешь не логгировать ошибку (так что о ней не узнает разработчик), и показывать сообщение покупателю
Ну так перехвати эксепшн в middlevare каком нить (Laravel\Slim), или прям в контроллере (Symfony) а дальше уже возвращай какой угодно ответ фронту. Хочешь - ошибку валидации. Хочешь - залогируй попутно. Хочешь - верни 503. С мидлеварарами вообще бомба - можно сделать отдельный для логгирования подобных эксепшнов, а другие для конвертации их в стандартные ответы фронту.

Повторюсь ещё раз - простая валидация может быть возложена на валидаторы. Сложная (тесно связанная с бизнес логикой) - только в моделях. Модели должны нещадно кидаться эксепшнами. Ну а как потом с этими эксепшнами поступать - должны решать выщестоящие слои приложения. Перехватить эксепшн же можно где угодно. Накрайняк в контроллере прямо.

Ну и ещё раз - это для сложных приложений с применением приёмов из DDD. Просто для интересующегося анона, чтоб он был в курсе, что есть и такой подход.
Ответы: >>1805488
Аноним 2020/09/13 16:14:29  №1805488 363
>>1805467
Нахуя ты нам стелешь про то что сам никогда не писал?
Как ты поймешь что вызвало ошибку, пользовательские данные или баг в коде?
Как ты с помощью middlevare прокинешь ошибку в форму и покажешь пользователю?
Как ты отличишь одно исключение от другого? Напишешь catch на тысячу строк? Или напишешь по хендлеру на каждое исключение?
Что ты будешь делать если ошибки в трех полях, а не в одном?
Какие исключения нужно логгировать, а какие нет?
Как ты будешь делать в модели валидацию, требующую запроса в базу?

Ну и как вишенка на торте - ОРМ, которая при получении данных из базы ничего не валидирует. И ты в принципе не можешь знать в валидном ли состоянии модель, полученная из репозитория.
Ответы: >>1805503
Аноним 2020/09/13 16:27:43  №1805503 364
>>1805488
>Нахуя ты нам стелешь про то что сам никогда не писал?
Писал
>Как ты поймешь что вызвало ошибку, пользовательские данные или баг в коде?
не используй general exceptions. Каждый раз создавай отдельное кастомное. А-ля AccountCannotBeNegativeException. Если их ещё в продуманную иерархию собрать - будет вообще вин-вин
>Как ты с помощью middlevare прокинешь ошибку в форму и покажешь пользователю?
https://symfony.com/doc/current/controller.html#flash-messages
ну или для ларавела там тож какой то аналог есть
>Как ты отличишь одно исключение от другого? Напишешь catch на тысячу строк? Или напишешь по хендлеру на каждое исключение?
см. выше. Продуманная иерархия исключений тебе в помошь
>Что ты будешь делать если ошибки в трех полях, а не в одном?
что тебе мешает в кастомное исключение засунуть инфу об ошибках хоть в газзилионе полей.
Вот как тут например. https://github.com/symfony/symfony/blob/4.1/src/Symfony/Component/Messenger/Exception/ValidationFailedException.php
>Какие исключения нужно логгировать, а какие нет?
дык эт ты сам должен определиться
>Как ты будешь делать в модели валидацию, требующую запроса в базу?
в ActiveRecord моделях - элементарно. Там же прям внутри неё есть всё для доступа в БД. В Доктрине - передай ссылку на entityManager в метод модели аргументом
>ОРМ, которая при получении данных из базы ничего не валидирует.
вот именно поэтому так важно изначально не допускать записи невалидных данных в БД, чтоб потом быть уверенным, что всё что из БД извлекается - всё всегда валидно
Ответы: >>1805518 >>1805731 >>1805734
Аноним 2020/09/13 16:47:09  №1805518 365
>>1805503
Начались маневры.
У тебя есть RegisterUserForm с пятью полями. Есть модель User. У User должно быть имя и фамилия на русском и уникальный email. Если что-то заполнено неправильно, то нужно как все нормальные люди делают, в конкретном поле написать что оно неправильно заполнено, и как нужно заполнить правильно.

В твоем "виртуальном" (потому что на самом деле ты так никогда не писал) подходе нужно:
1) поймать исключение, выброшенное при создании объекта User
2) понять что это именно исключение User'а
3) понять что это исключение о неправильности полей
4) понять что в этих полях не правильно
5) понять что это исключение не надо логгировать
6) понять что информацию об ошибках нужно вернуть в форму
7) понять в какие поля формы какие ошибки засунуть
8) понять что форма с ошибками и её нужно опять показать

У нормальных людей это выглядит так:
1) вызвать у формы метод validate()
2) если форма с ошибками то показать её пользователю

А если сломался сам объект при создании, то просто залоггировать входные данные, потом посмотреть лог и исправить баг.
Если количество моделей будет хотя бы пол сотни поддерживать этот пиздец с "продуманной иерархией исключений" будет просто нереально.
Ответы: >>1805767
Аноним 2020/09/13 17:15:01  №1805549 366
Есть два вопроса от нюфага:
1. Как точно работает DatePeriod? Вот я пишу такую конструкцию: $period = new \DatePeriod($dateStart, new \DateInterval('P1D'), $dateEnd). Где:
1. $dateStart - это начальная дата интервала.
2. $dateEnd - текущая дата сервера.
Потом перебираю $period с помощью foreach и эта падла в первый раз включала текущий день, а в следующий раз его игнорировала. Как это правильно работает? Перед этим время скорректировал с моим временем через date_default_timezone_set. Желаемый результат: получить массив дат, начиная с произвольной даты, до текущего дня.
2. MySQL. Как в одном поле таблицы ссылать на несколько записей из другой таблицы? К примеру, есть таблица, где хранят списки продуктов питания, у каждого естественно есть свой id. Пользователь хочется составить меню из нескольких продуктов. Как я понимаю, должна быть ещё одна таблица, где будут следующие поля:
id - айдишник созданного меню
product_id - список продуктов, которые включены в меню.
В поле product_id можно включать сразу несколько значений? Или подобную задачу решают как-то иначе?
Ответы: >>1805599 >>1805736
Аноним 2020/09/13 17:32:20  №1805575 367
>>1805461
Нет, я тупой просто. 500?
Ответы: >>1805601
Аноним 2020/09/13 17:57:04  №1805599 368
>>1805549
>1. Как точно работает DatePeriod?
Очевидно что ты обосрался с часовыми поясами. Вот пример прямо из документации DatePeriod https://3v4l.org/bWeOq . Как видишь все работает.

>2. MySQL. Как в одном поле таблицы ссылать на несколько записей из другой таблицы?
Так не делают. На каждое сочетание создается отдельная запись. Почитай в википедии что такое нормальная форма и зачем она нужна.
То что ты описал называется связью "многие ко многим". Каждый из продуктов может быть в каждом меню. Да, для этого создается отдельная таблица, так называемая "junction table" таблица-перекресток. На каждое сочетание menu_id, product_id создается отдельная уникальная запись.

Вообще это азы. Скачай себе любой учебник по SQL и там все это будет расписано.
Ответы: >>1805612 >>1805616
Аноним 2020/09/13 17:57:52  №1805601 369
>>1805575
Возвращай 511, думаю норм будет.
Аноним 2020/09/13 18:12:09  №1805612 370
>>1805599
>Очевидно что ты обосрался с часовыми поясами.
Но ведь я в начале объявил свой часовой пояс с помощью
date_default_timezone_set, и время в $dateStart выводится моё.
Ответы: >>1805614
Аноним 2020/09/13 18:15:00  №1805614 371
>>1805612
Ты сниппет видел? Добавь туда свои данные и проверь.
Аноним 2020/09/13 18:17:38  №1805616 372
>>1805599
Получается DatePeriod не включается конечную дату? Чтобы он её включал, нужно модифицировать конечную дату на +1 день?
Аноним 2020/09/13 19:07:45  №1805666 373
Вот предположим я нашел работу и работаю с yii2. Сложно ли будет перейти на другой фреймворк типа симфони или ларавел через какое-то время, пока копится коммерческий опыт? Или это по факту будет тоже самое что перейти на какой-нибудь другой язык и такой опыт особо не учитывается?
Ответы: >>1805676 >>1805690
Аноним 2020/09/13 19:28:22  №1805676 374
>>1805666
проще чем на другой язык, но всёж не так и просто
Всем надо чтоб ты пришел, и мог сразу со старта херячить таски. А для этого, как бы, фреймворк надо знать
Проще всего сделать какой нить пет проджэект на symfony, параллельно работе на yii, и тогда проблем возникнуть не должно
Аноним 2020/09/13 19:50:12  №1805690 375
>>1805666
На ларавель легко относительно потому что много общего на самом деле, на симфони сложно
Аноним 2020/09/13 20:46:13  №1805724 376
>>1805451

Либо 500, либо 503. 503 чуть логичнее, так как он значит Service Temporarily Unavailable. Причем ты можешь даже указать в заголовке (для роботов), через какое время им рекомендуется повторить попытку. Название заголовка не помню, нагугли.
Аноним 2020/09/13 20:59:27  №1805731 377
>>1805503

Давай я еще раз напишу, видимо ты не понял. Вот у нас есть метод setPrice() который может выкинуть PriceTooSmallException (цена продажи ниже цены закупки). Вот твой миддлеваре, который ловит этот эксепшен. И есть 2 ситуации:

1) пользователь при редактировании товара попытался выставить низкую цену, вылетел эксепшен
2) при распродаже из-за бага в скрипте добавления в корзину код попытался выставить товару низкую цену, вылетел тот же самый эксепшен

В случае 1 мы должны отдать сообщение об ошибке. В случае 2 - залоггировать и отдать страницу 503. Как ты в middleware различишь эти ситуации, если исключение одно и то же?

Я вижу только один вариант: при редактировании перехватывать в try/catch исключение PriceTooSmallException, преобразовывать его в FormErrorException, а последнее - внутри миддлеваре в ответ для фронтенда. Но блин, как сложно получается, ты в коде редактирования формы должен перечистить все возможные исключения, и не забывать их добавлять при доработке модели. Опять же, тут есть выход, сделать, чтобы выбрасываемые моделью исключения реализовывали бы общий интерфейс ModelErrorInterface (?) и ловить в catch его, но как-то все сложно выглядит.
Аноним 2020/09/13 21:03:04  №1805734 378
>>1805503

> В Доктрине - передай ссылку на entityManager в метод модели аргументом

Ну это же кошмар получается:

$user->setEmail('x@example.com', $em);

А если этому методу еще что-нибуь понадобится (например, сделать DNS запрос чтобы проверить существование домена почты)? А если админу разрешено указывать невалидную почту?

> вот именно поэтому так важно изначально не допускать записи невалидных данных в БД, чтоб потом быть уверенным, что всё что из БД извлекается - всё всегда валидно

Э, не. Возможна ситуация, что правила меняются со временем, и то, что было валидным, стало невалидным.
Ответы: >>1808955
Аноним 2020/09/13 21:08:17  №1805736 379
>>1805549

По MySQL - гугли типы связей в БД: один-к-одному, один-ко-многим, многие-ко-многим и как они реализуются. Также гугли "внешние ключи в БД".
Аноним 2020/09/13 22:19:01  №1805767 380
>>1805518
Тащем-та оба сорт оф правы.

Валидация в модели иногда имеет место быть, что бы в базу не попало токсичное говно, но не стоит делать из неё единственный механизм. не прокатит.

И с хуяли в валидаторах не может быть логики? Начиная с банального уник кончая хер знает чем.
Аноним 2020/09/14 01:09:11  №1805814 381
>>1785871 (OP)
>>1761738 →

Здравствуй ОП, внезапно возник вопрос по этой задаче, которую ты проверял. Я ее конечно поправил в соответствии с твоими рекомендациями
https://ideone.com/8Fqpq1 . Это задача вывода вопросов и проверки ответов, которая шла после изучения наследования и абстрактных классов. В твоем уроке было сказано о недостатке наследования

>нельзя поменять тип вопроса - надо создавать новый объект другого класса, что не очень логично (ведь мы не создаем новый вопрос - почему же мы создаем новый объект?). Эту проблему можно попробовать решить, применив композицию.

Собственно сам вопрос, подскажи, как решить эту задачу, без наследования, с использованием композиции или агрегации, у меня совершенно нет идей.
Правильно ли я понимаю, что любое решение задач, где применяется наследование, можно заменить агрегацией/композицией, кода станет больше, но он будет более гибкий ?
Ответы: >>1807622
Аноним 2020/09/14 06:16:56  №1805861 382
>>1804016
Спасибо за ответ, я по возможности разбираю код слима.
Сейчас в пакете fast-route. Мне этот пакет кажется сложноватым.
Ответь на такой нубский вопрос - в фаст-роут есть вариант настройки кэширования, я не оч хорошо понимаю что это есть вообще.
фаст роут кэширует маршрут? как это работает?
Ответы: >>1806227
Аноним 2020/09/14 11:45:06  №1806135 383
Что делать если нравится пыха? Вакансий кот наплакал (по всей стране 90, джавы к сравнению 900+). Все отговаривают. Пугают вордпрессами и опенкартами.
Аноним 2020/09/14 11:57:12  №1806152 384
Нужен сервис для конвертации JSON API в HTML по темплейтам.
Выглядит так, что PHP очень подходит к этому юзкейсу - никаких фреймворков, просто HTTP-client (видимо curl) и JSON-парсер.
Можно ли настроить его на nginx так, чтобы он никогда не выдавал ошибки/варнинги в HTML-страницу, а вместо этого просто возвращал 500 в случае внутренней ошибки либо, если API-сервис ответил 4xx/5xx пробрасывал этот код ошибки?
Или лучше взять что-то другое?
Из альтернатив приходит на ум lua + nginx.
Ответы: >>1806171 >>1806231
Аноним 2020/09/14 11:58:11  №1806158 385
>>1806135
>по всей стране 90, джавы к сравнению 900+
Ты уверен что именно так а не наоборот ?
Аноним 2020/09/14 12:03:20  №1806166 386
>>1806135
>Что делать если нравится пыха?

Лечиться.
Аноним 2020/09/14 12:08:06  №1806171 387
>>1806152
>Нужен сервис для конвертации JSON API в HTML по темплейтам.
Чего блядь?
Если у тебя есть какой то уже имеющийся JSON API, а тебе надо что то показать юзеру в виде красивого сайта, то для таких вещей берешь Angular или Vue.js и пишешь на них single page application на голом javascript
Ответы: >>1806175
Аноним 2020/09/14 12:09:20  №1806175 388
>>1806171
Лол, нет, ебал я эти ваши фронтенды. Меня вполне устроит отрендерить на сервере
Ответы: >>1806177
Аноним 2020/09/14 12:11:51  №1806177 389
>>1806175
Это извращение, ты на голом месте сильно усложняешь. Бери Vue.js и делай на нём SPA которое будет напрямую с АПИ общаться. Блядь, vue простой как огурец, освоишь по ходу дела
Ответы: >>1806205 >>1806234
Аноним 2020/09/14 12:32:22  №1806205 390
>>1806177
> бери vue
> пердоль JS
> клади хуй на пользователей без JS
> клади хуй на время загрузки страницы
> ну тип ты на голом месте усложняешь))
Ответы: >>1806230
Аноним 2020/09/14 12:46:39  №1806227 391
>>1805861

Когда ты передаешь маршруты вида '/user/{id:[0-9]+}', роутер должен преобразовать их в массивы с регулярками для сопоставления с URL (вид массива описан тут: https://github.com/nikic/FastRoute#overriding-the-route-parser-and-dispatcher ).

По умолчанию при каждом запуске скрипта это делается заново. Если настроить кеш, то преобразование делается один раз и сохраняется в файл, а во второй раз данные уже берутся из файла, что ускоряет работу при большом числе роутов.

То есть кеширование позволяет сэкономить время на разбор роутов.

Аноним 2020/09/14 12:49:45  №1806230 392
ertertertt.jpg (110, 1280x720)
720x1280
>>1806205
> клади хуй на пользователей без JS
Я конечно всяких дураков видал. Но этот тред постоянно берет новые вершины.
Ответы: >>1807116 >>1807339
Аноним 2020/09/14 12:50:29  №1806231 393
>>1806152

Чтобы возвращать 500 в случае внутренней ошибки, есть 2 варианта:

- переопределить обработчик ошибок (set_error_handler)
- преобразовывать ошибки в исключения с помощью ErrorException и настроить обработчик исключений set_exception_handler.

Я бы конечно советовал не голый PHP, а Slim + Twig + Guzzle.
Аноним 2020/09/14 12:53:52  №1806234 394
>>1806177

У тебя JS-фанатизим. PHP вполне годится для данной задачи и если на нем это сделать быстрее, чем разбираться с Typescript, Webpack, Babel, то почему бы и нет? В PHP в отличие от JS есть тайп-хинты, не требуется никаких собрщиков и компиляторов.

Плюс, в SPA обычно получается медленная загрузка сайта. Сначала грузится HTML-заглушка, потом 1-2 Мб яваскрипта, потом делаются аякс-запросы, и только потом все рендерится. Вряд ли это приятный пользовательский опыт.

Умерь рвение.
Ответы: >>1806264 >>1806369
Аноним 2020/09/14 13:18:44  №1806264 395
>>1806234
>аякс-запросы
Я этого слова уже 2 года не слышал
Аноним 2020/09/14 13:20:38  №1806266 396
>>1806135
Вопрос выдает в тебе неопытного вкатывальщика
Аноним 2020/09/14 13:25:24  №1806277 397
>>1803767
У меня флешбеки со стажировки, прекрати пожалуйста
Аноним 2020/09/14 13:43:51  №1806314 398
image.png (22, 621x240)
240x621
Пытаюсь дальше разобраться с интернет магазином на laravel, возник такой вопрос. Имеется такая схема бд - есть таблица с продуктами, таблица с аттрибутами и таблица со значениями аттрибутов. Все вместе это объединияется в pivot таблице attribute_product_value. Так вот, а как грамотно реализовать на laravel получение продукта вместе с его аттрибутами и значениями? Может попробовать сделать отдельную модель для пивот таблицы, или какой-то другой способ решения есть?
Аноним 2020/09/14 13:46:33  №1806317 399
>>1806314
Вложенные запросы/джойны
Ответы: >>1806318
Аноним 2020/09/14 13:49:06  №1806318 400
>>1806317
Это да, можно просто через query builder три джойна сделать и все. А можно ли такие отношения реализовать средствами eloquent? Чтобы из базы сразу модельки дергались, так наверное правильно будет. сори я нуб просто
Ответы: >>1806326
Аноним 2020/09/14 13:51:23  №1806326 401
>>1806318
Я хз что там с eloquent я вообще джавист, но вот честно, эта схема говно - если тебя не смущает завязка на postgres, то я бы положил все аттрибуты в JSONB
Ответы: >>1806331
Аноним 2020/09/14 13:54:01  №1806331 402
>>1806326
Бля, я так и сделал сначала. Но в этом же треде чуть выше мне сказали, что хранить аттрибуты в json это говно полное, пришлось переделывать.
Ответы: >>1806338
Аноним 2020/09/14 14:00:27  №1806338 403
>>1806331
Да, пролистал ту дискуссию выше.
Короче, JSONB - это встроенная поддержка EAV в postgres. Соответственно, вопрос стоит как "делать EAV по старинке и охуевать от джойнов" vs "использовать встроенные средства БД"
Аноним 2020/09/14 14:37:38  №1806369 404
>>1806234
Вот рили. На мобилках невозможно пользоваться некоторыми сайтами, особенно когда на перерендере с того же аякса едет разметка и клик уходит в ебеня.
Аноним 2020/09/14 14:37:46  №1806370 405
Аноним 2020/09/14 16:09:19  №1806439 406
>>1806135
Что за страна такая экзотическая?
Ответы: >>1807759
Аноним 2020/09/14 16:32:39  №1806460 407
>>1806314
Если я правильно тебя понял то тебе в определении связанной модели нужно такое :

return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');

В этом случае ты в pivot получишь не только id-шник но и нужыне поля
Ответы: >>1806620
Аноним 2020/09/14 18:05:05  №1806620 408
>>1806460
Pivot это какой-то пхпшный мем паттерн?
Никогда раньше не встречал
Ответы: >>1806659 >>1806985
Аноним 2020/09/14 18:05:28  №1806622 409
>>1806314
Ты свой движок пилишь? В образовательных целях или зачем? Просто интересно
Ответы: >>1806995
Аноним 2020/09/14 18:39:05  №1806645 410
Хочеца поставить php80beta. Еще рано? Сильно охуею, если я не шарю в паттернах?
Аноним 2020/09/14 18:58:19  №1806659 411
>>1806620
эклевский паттерн. заместо group by
Ответы: >>1806986
Аноним 2020/09/14 19:31:05  №1806691 412
По поводу jwt
Мне приходит запрос с токеном - я должен разбить токен по точке, взять первые 2 части и соединить через точку с хэшем этих частей ключом, а потом сравнить с пришедшим, так?
Access токен не храню, а рефреш? Например, я храню его в бд. При обновлении access токена я ищу рефреш токен из рекаеста в бд и если нахожу создаю новую пару, старый токен удаляю из бд, а новый добавляю? А если чел получил токен и почистил куки из которых я беру рефреш? Токен в бд будет лежать 10000000 лет?
Ответы: >>1806874 >>1807528
Аноним 2020/09/14 21:40:18  №1806874 413
Аноним 2020/09/14 23:03:57  №1806902 414
Почему 8ая версия не заставит людей опять начать на нем писать стартапы на коленке (как сейчас на джанго, роре и ноде)?
Ответы: >>1806904 >>1807267
Аноним 2020/09/14 23:06:12  №1806903 415
https://ideone.com/EnA3x7

Создаю массив случайной длины от 5 от 10 значений и заполняю каждый элемент случайным значением от 0 до 100. Потом использую asort, чтобы отсортировать значения по возрастанию, но при попытке вывода возвращается единица. Что за ерунда?
Ответы: >>1806910
Аноним 2020/09/14 23:15:28  №1806904 416
>>1806902
Пушо разрабы придурки. Вот бы выкупить у них права на пыху и сделать с нее конфетку такое вообще возможно?
Аноним 2020/09/14 23:30:39  №1806910 417
asort-signature.PNG (13, 1173x266)
266x1173
Ответы: >>1807141
Аноним 2020/09/15 01:43:38  №1806925 418
Есть телега с хорошим архивом во вложениях.

Добро пожаловать. Со всеми вопросами можно. Там есть и спецы многолетние, в том числе на других языках.

https://t.me/php2ch
Аноним 2020/09/15 02:20:43  №1806930 419
Анон, я уверен, что этот вопрос не в тему треда, но я совсем не шарю ни в программировании, ни в системном администрировании, а в проблемном вопросе фигурирует PHP, поэтому спрашиваю сюда.
Может быть данные не совсем точные, я это тоже не гарантирую.
Дано:
- XAMMP
- На нём развёрнут Moodle локально.
- На Moodle с оф. сайта поставлены два плагина. Оба управляются из командной строки скриптом с тремя командами.
- Нужный скрипт sync.php найден в глубине htdocs.
- Ни с командной строки XAMMP-а, ни со строки из браузера этот скрипт не открывается, хотя доступ в настройках Moodle поставлен, и просит посмотреть специальную программу для этого поискать в интернете, ну или блокнотом открыть.
- В качестве эксперимента в ту же папку отправлен "Hello world!" из трёх строчек. В командной строке XAMMP после запуска сразу появились эти два слова.
- ЕЯПП, то обновлениями плагинов в Moodle управляет некий cron.php, он естественно тоже не открывается.
Правильно ли я понимаю, что для запуска этих плагинов необходимо на комплюктер поставить что-нибудь, что запустит скрипт?
Ответы: >>1806938
Аноним 2020/09/15 02:48:55  №1806938 420
>>1806930
Да, совсем забыл. Если я запускаю из браузера Hello.php, то всё появляется, а если sync.php, то вот:
Command line scripts can not be executed from the web interface
Ответы: >>1807000 >>1807527
Аноним 2020/09/15 04:56:05  №1806985 421
>>1806620
pivot это представление промежуточной таблицы в ORM elouent между двумя другими таблицами находящихся в отношение многие-ко-многим в sql.
Аноним 2020/09/15 04:57:46  №1806986 422
>>1806659
нет, group by, а вместо объединений ( JOIN )
Аноним 2020/09/15 05:43:09  №1806995 423
>>1806622
Нет, просто пишу пет прожект для себя в образовательных целях. Вроде самую очевидную задачу выбрал, а ебусь уже месяц безрезультатно.
Аноним 2020/09/15 06:06:39  №1806999 424
Гайзы, мне нужно заработать на дошик. Расскажите, как это сделать с помощью PHP, какие сайты смотреть, что знать надо. Знаю немного ларавель, css, html, js.
Ответы: >>1807205 >>1807332
Аноним 2020/09/15 06:09:18  №1807000 425
>>1806938
Русским языком же написано, скрипты для cli негоже запускать из браузера. Открой этот скрипт, там будет проверка на это, можешь её убрать если хочешь
Ответы: >>1807056
Аноним 2020/09/15 07:42:09  №1807056 426
>>1807000
Единственное, что я нашёл относительно cli в скрипте - вот:
if ($unrecognized) {
$unrecognized = implode("\n ", $unrecognized);
cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
}
Ответы: >>1807074
Аноним 2020/09/15 07:57:29  №1807074 427
>>1807056
Поищи может или прямо эту ошибку через ctrl + F, или функции get_sapi_name или http_response_code
Ответы: >>1807078
Аноним 2020/09/15 07:59:09  №1807078 428
>>1807074
Спасибо, буду разбираться.
Аноним 2020/09/15 09:11:56  №1807116 429
>>1806230
Таки это не настолько глупо, как тебе кажется. Без у тебя js не заработает примерно половина интернета, примерно все сайты типа aviasales и так далее. Да даже двощ, скорее всего.
Короче, браузера без js сейчас не найти, а сознательно его отключают только конченные параноики, то есть где-то примерно никакая часть твоих пользователей. Можно на них забить.
Ответы: >>1807179 >>1807534
Аноним 2020/09/15 10:04:40  №1807141 430
>>1806910
Блять, да не было ссылки! Не было! Сука, откуда они все взялись?
Ответы: >>1807178
Аноним 2020/09/15 10:50:51  №1807178 431
1600167070621.png (2, 174x27)
27x174
>>1807141
Попробуй писать в ide, а не блокноте, сэкономишь кучу времени.
Ответы: >>1807226
Аноним 2020/09/15 10:52:08  №1807179 432
>>1807116
Тред просто великолепный.
Не успел я охуеть с долбоеба, который считает что должно быть не похуй на отключенный джаваскрипт. Как тут же вылез долбоеб, который читать не умеет.
Что завтра? Долболебы которые случайные кнопки на клавиатуре жмут?
Ответы: >>1807182 >>1807339
Аноним 2020/09/15 10:53:06  №1807182 433
Ответы: >>1807184
Аноним 2020/09/15 10:54:10  №1807184 434
>>1807182
Ты зачем меня макакой назвал?
Ответы: >>1807185
Аноним 2020/09/15 10:54:45  №1807185 435
>>1807184
Да я просто мимо проходил, не называл тебя никак.
Ответы: >>1807186
Аноним 2020/09/15 10:57:17  №1807186 436
>>1807185
Так и я дохуя чего не говорил, однако это не помешало долбоебу приписать мне чужие слова.
Аноним 2020/09/15 11:32:06  №1807205 437
>>1806999
Тебя провести за ручку? Рассказть что выучить? Найти тебе заказ? Договориться о оплате? Попинывать тебя что ыб ты не проебьывался а заказ выполнял?
Аноним 2020/09/15 11:44:58  №1807226 438
>>1807178
Пишу в Sublime Text 3. Там есть плагин для PHP?
Аноним 2020/09/15 11:55:08  №1807247 439
Господа пыхеры, за что обсирают ВордПресс (как и другие цмс-ки)? Интересен вопрос их софтверной архитектуры.
Ответы: >>1807259
Аноним 2020/09/15 12:07:04  №1807259 440
>>1807247
>Интересен вопрос их софтверной архитектуры.
Прикалываешься? Её там нет. Это исторически слежавшееся нагромождение костылей. За то и хейтят
Ответы: >>1807519
Аноним 2020/09/15 12:16:06  №1807267 441
>>1806902
>как сейчас на джанго

Ты из начала 10-х капчуешь?..
Ответы: >>1807278
Аноним 2020/09/15 12:26:49  №1807278 442
>>1807267
Он считает, что пыха не модно, а рор(!) и джанго модно, тут как бы все понятно
Ответы: >>1807321
Аноним 2020/09/15 13:13:24  №1807321 443
Аноним 2020/09/15 13:21:21  №1807332 444
>>1806999
Гугл:вакансии Laravel ситинейм.
Дальше сам. Сходишь на пару собесов, поймёшь что нихуя не знаешь, поддоучишься, и таки пройдёшь на работу мечты с зп 30к.
Аноним 2020/09/15 13:28:20  №1807339 445
>>1807179
>Не успел я охуеть с долбоеба, который считает что должно быть не похуй на отключенный джаваскрипт.
Я не тот анон которого ты посчитал неумеющим читать, но мне тоже показалось, что тут >>1806230 ты охуеваешь с гринтекста, а не с того что есть люди которым не похуй на людей с вырубленным js. Так что кажется это всё таки ты не особо выразительно охуел, а не ананас читать не умеет.
Ответы: >>1807349
Аноним 2020/09/15 13:37:21  №1807349 446
>>1807339
Это походу такой вариант кретинизма, когда видишь только последний пост, а на что это ответ прочитать не в состоянии.
Рыбы похавай, таблетки прими. Но не лезь, сука, в разговор если не способен прочитать хотя бы два последних поста.
Ответы: >>1807358
Аноним 2020/09/15 13:42:58  №1807358 447
>>1807349
Там контекст тоже однозначно не даёт уверенности в том с хуя ли ты вдруг охуел. Ветку я всю ту читал, так что выводы свои оставь себе, дружочек.
Ответы: >>1807366
Аноним 2020/09/15 13:50:44  №1807366 448
imbecil.png (291, 1944x1058)
1058x1944
141318066.208x208.jpg (648, 929x1200)
1200x929
>>1807358
Походу некоторым тут нужно не курсы пхп, а курсы двощей проходить.
Аноним 2020/09/15 14:13:40  №1807385 449
>>1805157

Куда лучше фронтенд, чем ковыряние цмс-ок которое к бэкенд разработке не относится. Можешь еще Го посмотреть. Это концептуально простой язык.
Аноним 2020/09/15 14:25:56  №1807403 450
старые пирдуны Господа пихари, почему вы еще не перекатились на богоподобный реакт?
Ответы: >>1807425 >>1807481
Аноним 2020/09/15 14:44:33  №1807425 451
>>1807403
Реакт это разве не фронтендовая еботня?
Ответы: >>1807437
Аноним 2020/09/15 14:53:04  №1807437 452
Аноним 2020/09/15 16:26:12  №1807481 453
>>1807403
json ты куда будешь отправлять, господин макакий?
Ответы: >>1807502
Аноним 2020/09/15 16:54:22  №1807502 454
Ответы: >>1807555
Аноним 2020/09/15 17:04:54  №1807512 455
почему синтаксис фреймворков так нагружен в пхп?
Ответы: >>1807551 >>1807571
Аноним 2020/09/15 17:16:39  №1807519 456
>>1807259
А что-то лучше, проще, доступней и... Качественней (?) написал? Раз всё так хуёво, то почему бы не сделать своё и не срубить миллиард шекелей?
Аноним 2020/09/15 17:25:06  №1807527 457
>>1806938

Как и написано в сообщении, этот скрипт надо запускать из командной строки. Что именно происходит при попытке запуска из командной строки? Какую команду ты пишешь? Что выводится?
Ответы: >>1807909
Аноним 2020/09/15 17:26:28  №1807528 458
>>1806691

У токенов вроде бы есть срок годности. Ты можешь сделать скрипт, который будет удалять токены с истекшим сроком.
Аноним 2020/09/15 17:32:27  №1807534 459
>>1807116

Есть мнение, что ресурсы, не работающие без JS, хуже индексируются поисковыми роботами. Или захочешь ты SEO аудит заказать, а у SEO-шника робот JS не понимает.

Потому SPA логично использовать для "приложений", где много всяких кнопок, диалогов, интерфейсов, для приложений, которые могут работать с нестабильным интернетом. А для "сайтов" с контентом, вроде сайта новостей, блога, энциклопедии мемов, обзоров игр лучше использовать традиционный серверный рендеринг.

Нужно выбирать инструмент под ситуацию, а не твердить, как дебил с двача, что "в 2020" серверный рендеринг это не можно.

Кстати, если тебе хочется, чтобы сайт работал без перезагрузки страницы, SPA тебе не нужен. Просто используй серверный рендеринг и поставь pjax (или напиши аналог), он все сделает сам.
Ответы: >>1807537 >>1807542 >>1807631
Аноним 2020/09/15 17:39:38  №1807537 460
Ответы: >>1807613
Аноним 2020/09/15 17:43:43  №1807542 461
>>1807534
Не в укор, скорее любопытство. Сколько бы не кидали ссылок на очередную поделку для дохуя упрощения работы, везде встретится упоминание, мол нас юзают компании знатные, при чём часто одни и те же. Сук, что у этих крупных компаний за экосистема внутренняя?
Аноним 2020/09/15 17:52:45  №1807551 462
>>1807512
Мне кажется, в симфони специально сделали максимально уебищный синтаксис, чтобы всё писали в yaml.
Аноним 2020/09/15 17:54:41  №1807555 463
>>1807502
>>Не понял вопроса.

Это ты значит что ты настоящий реакт-макакий, и все у тебя будет хорошо. И смузи будет, и свитшот и хуй в заднице .

Ответы: >>1807564
Аноним 2020/09/15 18:10:39  №1807564 464
>>1807555
Какой json отправлять? Откуда?
Если ты говоришь про бекенд, то на такой случай есть нода.

Просто понимаешь, я нахожусь выше тебя на 2 ступени развития, пихарь, мне не все ваши первобытные обезьяньи изречения понятны. В следующий раз говори конкретнее, ок?
Ответы: >>1807621
Аноним 2020/09/15 18:15:38  №1807571 465
>>1807512
в джава еще похлеще
Аноним 2020/09/15 18:55:39  №1807613 466
>>1807537

SSR это усложнение и костылища. Так как твой JS код должен работать и в браузере, и на сервере, и это не всегда просто. И нам теперь надо поддерживать 2 с половиной приложения: бекенд и JS-приложение для сервера и клиента.

На мой взгляд, выгоды от SSR не стоят сложностей. Если тебе нужен SSR, то скорее всего тебе нужно не SPA, а традиционное серверное приложение. Если хочется обойтись без перезагрузки страниц, просто используй pjax.

Объясни плюсы SPA перед традиционным серверным приложением с pjax? Я их не вижу.
Ответы: >>1807623
Аноним 2020/09/15 19:04:54  №1807621 467
>>1807564

Что ты забыл в этом треде тогда, "высокоразвитый"?
Аноним 2020/09/15 19:05:30  №1807622 468
>>1805814

Код выглядит верно.

Что касается смены типа вопроса - такое может понадоиться, если мы, например, делаем сайт для создания тестов, и там можо при редактировании теста менять типы вопросов. Тогда придется изловчиться примерно так - сделать отдельно объект Вопрос, а отдельно несколько классов для Подробностей Вопроса:

class Question
{
\t// Текст есть у всех видов вопросов
\tpublic string $text;

\t// Баллы за правильный ответ
\tpublic int $points;

\t// А вот варианты ответов и логика проверки ответа разная
\t// Сюда можно поместить объект ChoiceQuestionDetails, NumericQuestionDetails итд.
\tpublic QuestionDetails $details;
}

> Правильно ли я понимаю, что любое решение задач, где применяется наследование, можно заменить агрегацией/композицией, кода станет больше, но он будет более гибкий ?

Возможно, что так, не задумывался об этом. Стоит исходить из условий задачи, если тип вопроса менять никогда не придется, то лучшеи не заморачиваться с композицией.

Аноним 2020/09/15 19:05:45  №1807623 469
>>1807613
Нихуя там особо разницы нет, это всё искаропки на автомате работает, ты бы хоть посмотрел. Зачем мне твои костыли из pjax городить? Есть же решение лучше и современнее.
Ответы: >>1807631
Аноним 2020/09/15 19:06:16  №1807624 470
>>1796952

В общем, решение верное, но:

- вместо elseif (условие) лучше писать просто else { ... } без указания условия
- if/else можно заменить на вызов функции min (меньшее из 2 чисел) и упростить код
Аноним 2020/09/15 19:10:39  №1807631 471
>>1807623

Чтобы писать всего одно приложение на PHP, а не два - бекенд и фронтенд. Я уже писал выше >>1807534 что есть случаи, где лучше подходит SPA, и есть случаи, где лучше серверное приложение. А ты тут талдычишь бред про "современнее". Нет такого правила, что теперь мы должны закопать серверные приложения и переходить на очередной JS фреймворк, который устареет прежде чем ты на нем что-то напишешь.

У SPA есть множество недостатков, главный - трудозатраты, они часто тормозные, дольше грузятся, содержат мегабайты JS кода и тд.

>>1792085

Может, прописать это в правила автозагрузки в composer.json?
Ответы: >>1807685
https://github.com/Back1ng/vector/ Аноним 2020/09/15 19:11:12  №1807633 472
>>1794773

Сериализация, это, конечно, костыльно, лучше бы ты разобрался с оператором clone и магическим методом __clone. Сериализация тебя может подвести, если в графе объектов есть циклические ссылки (объект A хранит в себе B, а B хранит в себе A, например, Работник хранит в себе ссылку на Департамент, а тот - на Работника).

В комитете, мне кажется, логичнее было бы передавать Компанию в метод setAntiCrisisMeasuresFirst($vector), а не в конструктор. Тогда один Комитет мог бы оптимизировать хоть несколько Компаний подряд.

> usort($engineers, function($a, $b) {
> if ($a->isLeader() && $b->isLeader()) return 0;
> if ($a->isLeader()) return 1;
> return $a->getRank() <=> $b->getRank();
> });

Тут не хватает if ($b->isLeader()) { return -1 }. Или, что лучше, написать так: if ($a->isLeader() != $b->isLeader()) { return (int)$a->isLeader() <=> (int)$b->isLeader(); }.

> array_map(function ($employee) use ($department) {
Тут, наверно, читабельнее было бы использовать foreach, ведь array_map предназначен для преобразования массива в другой, и это только сбивает с толку. Не стоит использовать array_map как замену для foreach, стоит использовать его там, где мы преобразуем один массив в другой.

Для замены босса было бы логично сделать в Департаменте метод replaceBoss($newBoss), а не руками переключать признак босса в цикле.

inverseLeader() хуже читается, чем makeLeader()/demoteLeader(), в последних явно видно, какое значение мы ставим. Это неудачная функция, и трудно представить ситуацию, где нам нужно именно инвертировать признак босса, а не установить конкретное значение да/нет.

> if (!($leader instanceof Analyst)) {
Тут по моему ошибка: $leader->getJob(). На такой случай можно бы сделать метод $emp->isJob(Analyst::class).

> * @param Department $department
Тип аргумента уже указан в тайп-хинте функции, незачем эту информацию дублировать, если в комментарии не содержится ничего нового.

> public function getAverageExpenses()
Тут можно было не дублировать код из функции getExpenses() , а вызвать ее.

> @return Employee|false
Лучше возвращать null, тогда можно указать тайп-хинт ?Employee - Employee или null. (кстати, в новом PHP будут union types - можно писать func(): Employee | false ).

> public function setRate(int $rate) : self
> $this->rate = $rate;
Тут у тебя ошибка - ты обращаешься к несуществующему в классе Job свойству. Нельзя обращаться к полям и методам, которые появятся только в наследниках. Так как когда кто-то будет наследовать твой класс, он может забыть добавить в него поля и методы и будет ошибка.

Правильнее было бы сделать в Job абстрактные методы getBaseRate(), getBaseCoffee() и тд, а в наследниках их переопределять.

На будущее, есть статические анализаторы кода вроде phpstan ( https://phpstan.org/ ), они покажут такие ошибки (и некоторые IDE тоже могут их находить). phpstan освоить несложно, достаточно скачать PHAR-файл и запустить из командной строки. Можешь попробовать освоить его. Поставь уровень побольше (опция -l). Также, есть статический анализатор psalm.

В остальном, не так и плохо. Если захочется еще повозиться с ООП, можешь найти задачу про ООП-гостиницу. Думаю, навыки работы с ООП тебе помогут. когда будешь разбираться с фреймворками, хотя там конечно абстракции будут посложнее.
Аноним 2020/09/15 19:42:17  №1807666 473
Аноны, а кто автор фреймворка slim?

И еще если не ошибаюсь Taylor Otwell ( автор laravel ) кажется предоставлял публике новый микрофремворк, но я забыл как он зовется. И ниче найти не могу на эту тему
Аноним 2020/09/15 19:47:03  №1807670 474
1600199237384.png (1094, 1960x1295)
1295x1960
Я не понял, какой девмод? Я symfony не устанавливал, только хттп-кернел, роутинг и еще парочку компонентов. Ссылка ведет сюда https://symfony.com/doc/5.1/debug-mode, но это не мой случай. Тот кернел, который у меня, не принимает девмод в конструкторе, и никаких связанных с ним методов не имеет. env файл без фреймворка вроде тоже не используется. скрин не мой, если что
Ответы: >>1807672 >>1808955
Аноним 2020/09/15 19:50:18  №1807672 475
1600199429157.png (1238, 1952x1738)
1738x1952
>>1807670
Сейчас заметил что на приложенном скрине ни слова про дебаг мод. Чтобы было понятливее, у меня сообщение выглядит вот так.
Аноним 2020/09/15 20:00:43  №1807685 476
>>1807631
За несколько последних лет работы на галерах сложилось впечатление, что бизнесу сайты уже не нужны. Нужны только приложения. Плюс ты пиздишь что СПА трудоемки. Они проще чисто серверных приложений, за счет разделения труда между бекендерами и фронтами и за счет снижения зацепления кода.
Ответы: >>1807690 >>1807723
Аноним 2020/09/15 20:05:24  №1807690 477
Аноним 2020/09/15 20:17:24  №1807697 478
Дети короче не слушайте всяких сектантов из церкви "величественного" монолита. Они реально поехавшие
Ответы: >>1807706
Аноним 2020/09/15 20:21:32  №1807705 479
Пхп сейчас как и джаваскрипт? Лезет туда даже аутист-инвалид и на собеседовании в живой очереди драться на кулаках с теми, кто "я только спросить"?
Или же наоборот сейчас вкатыши в пхп - люди, которые знают чего хотят и не собираются драться с 7ми классниками питонистами, 8ми классниками нодистами и прочими модными-молодежными?
Ответы: >>1807707 >>1807727 >>1808955
Аноним 2020/09/15 20:22:31  №1807706 480
>>1807697
Так же как всякие лисперы, любители доказанных программ, индийские брамины которые себе яица камнями оттягивают чтобы просветлиться и др. чудики
Аноним 2020/09/15 20:23:27  №1807707 481
>>1807705
В пхп идут потому что вакансии есть. Все тчк.
Аноним 2020/09/15 20:51:49  №1807723 482
>>1807685
>что бизнесу сайты уже не нужны. Нужны только приложения.
Для автоматизации внутренних бизнес-процессов - да. То, для чего раньше писали десктопные приложения на каких нить плюсах, которые по всяким проприетарным протоколам связывались с такими же хрен-пойми-как сделанными серверными частями приложения, сегодня посвеместно вытеснила связка из JS SPA в браузере в роли клиентской части + серверная часть на Java\C#\PHP\Python. Но это не отменяет того факта, что для простых сайтов, где просто большим массам юзеров надо раздавать по большей части статичный контент, старый подход с серверным рендерингом без фронтового JSa всё ещё заходит лучше
Аноним 2020/09/15 21:07:23  №1807727 483
1600204060496.png (548, 512x512)
512x512
>>1807705
> сейчас вкатыши в пхп - люди, которые знают чего хотят и не собираются драться с 7ми классниками питонистами, 8ми классниками нодистами и прочими модными-молодежными?
Я такой. Как мне кажется, сейчас большинство вкатышей в пхп должны быть такими. Потому что левый человек, пришедший за деньгами, просто введет в интернете "шо учить в 2020", где прочитает что пыха мертва, и нужно учить питон/жс. После этого он подпишется на канал "мемы о программировании", где увидит мемасики про то что пыха - говно, а пыхеры - не программисты. Загуглит инфографик зарплат в айти, где пыха среди языков предпоследняя ( так как последний - 1С ). После всего увиденного, он купит себе в кредит комплект "макбук и курс у инфоцыгана по жс", после чего будет столпиться на собеседованиях в очереди из точно таких же ребят. По какой причине этому парню вздумается наплевать на всё выше перечисленное и начать учить именно php? Для этого нужно быть ржаным, гречневым мужиком.
Ответы: >>1807729
Аноним 2020/09/15 21:09:35  №1807729 484
Ответы: >>1807741
Аноним 2020/09/15 21:24:04  №1807741 485
>>1807729
Я без иронии написал, серьезно. Кроме последнего предложения, разве что. Успел на разные языки посмотреть, понял что нравится бекенд. Питон и го ( как минимум в моей стране ) - это борщехлебинг. Нода просто не нравится. Зачем заниматься тем, что тебе не нравится? Джава более-менее нравится потому что она си-подобная, но выбрал все же пхп, так как меня привлекают менее крупные проекты, концентрация на логике, а не на бойлерплейте. Вот, я вижу, выше еще один такой анон пост написал >>1806135. И его даже в пыхотреде отговаривают. Я раньше здесь задавал похожие вопросы, тоже отговаривали. Но, как видишь, я еще тут.
Аноним 2020/09/15 21:32:20  №1807745 486
Решил слезть с иглы своей первой работы ибо 16к зп
Начал обновлять резюме на хх и осознал, что мне нечего блять расписывать. 2/3 работы это специфика конкретной малопопулярной crm, из которых половина это скам в стиле "добавь поле, поправь багу в отчете, реализуй автозаполнение". Что стоит писать в "обязанностях на раб месте"? Из релевантного опыта только парсинг/генерация всяких xsl и json'ов и пара моментов с хитровыебанными запросами к бд.
учитывая, с каким трудом устроился даже на эту работу, с такой хуйнёй меня только в грузчики возьмут
Ответы: >>1807771 >>1807942
Аноним 2020/09/15 21:47:00  №1807759 487
Ответы: >>1807768
Аноним 2020/09/15 21:55:21  №1807768 488
>>1807759
Пиздец, не верю. Как они тогда пишут всякие магазинчики простенькие? Всё на аутсорсе у индусов что ли?
Аноним 2020/09/15 21:56:59  №1807771 489
>>1807745
Блин, неудивительно, что тебе платили такие копейки, за чернушную работу. Добро пожаловать в реальный мир, есть разработчики, а есть обезьянки-сайткликеры, придётся тебе начинать примерно с нуля.
И да, беги оттуда, устраивайся на джуна куда угодно, где программируют, для начала.
Аноним 2020/09/16 04:46:44  №1807909 490
>>1807527
Пишу следующее:
php htdocs\serv\local\metagroups\cli\sync.php -v
Пишет в ответ сложноподдающиеся определению символы, закрашенные разным способом прямоугольники и буквы из кириллицы. Наверное из-за кодировки, если скопировать, то вот:

?YNИ?????NЛ?? ??N?NИN?
?YNИ??????N? ????N?NЖ?????????? 2

Если я запущу php htdocs\serv\local\metagroups\cli\hello.php
То выведет в следующей строке Hello world!
Аноним 2020/09/16 05:57:20  №1807942 491
>>1807745
>>ибо 16к зп
Лол, это прям страйк какой то. Такое бывает вообще?
>>Джава более-менее нравится
А как ты оцениваешь потенциал переезда с пхп на жаву?
Многие говорят что языки очень похожи - дает ли это основания полагать что это облегчит перекат с пхп на джаву.
Я правда еще думаю во флаттер и дарт вкатываться, новые горизонты жы.

Ответы: >>1807970 >>1808024
Аноним 2020/09/16 07:23:37  №1807970 492
>>1807942
Оба из семейства С, так что относительно просто.
Ответы: >>1808645
Аноним 2020/09/16 07:38:11  №1807979 493
image.png (928, 1200x675)
675x1200
ПэХаПэшники!!! Конкуренции с дойчестана не боитесь????
Ответы: >>1808016 >>1808115
Аноним 2020/09/16 08:29:02  №1808016 494
5a2ff5kmxdc41.png (32, 860x699)
699x860
Аноним 2020/09/16 08:41:40  №1808024 495
>>1807942
>Лол, это прям страйк какой то. Такое бывает вообще
Я из мухосранска на 500к, плюс работаю неполный день. Фултайм было бы 30к. Зп низкая, кнеш, но и не совсем пиздец для города
Ответы: >>1808141
Аноним 2020/09/16 12:00:37  №1808115 496
>>1807979
Почему они все белые, по тонкому льду ходят
Аноним 2020/09/16 12:25:43  №1808141 497
>>1808024
Бля, такая же ситуация, как ты описал выше, только я работаю фулл тайм и зп 30к. Надо менять работу, но уже предвкушаю жидкий обсер на первом же собесе.
Ответы: >>1808542
Аноним 2020/09/16 19:04:57  №1808542 498
>>1808141
Лол, нафига я морочусь в пхп по ооп, и по байтоебству немного? Сижу ковыряюсь в исходниках слим, на основе него пишу свой фрейм, что бы на тестовые на его основе фигачить. Раньше другой был, но уже не интересно, хочется что бы psr , реквест/респонс и мидлвэйры.
Ради того что бы 30 к получать?
бладж
Ответы: >>1808727 >>1808955
Аноним 2020/09/16 21:32:52  №1808616 499
Блять, что-то xdebug перестал работать. Просто и внезапно. На брейкпоинте не останавливается, всё работает будь-то бы он выключен. Он вроде должен что-то в куки записывать? Сейчас не записывает. Нету ни у кого идей, что могло наебнуться? Я совсем ничего не менял, на ровном месте по пизде пошел.
Ответы: >>1808627
Аноним 2020/09/16 21:47:12  №1808627 500
>>1808616
Можете не отвечать, вроде бы нашел куда копать
Ответы: >>1808644
Аноним 2020/09/16 22:21:40  №1808644 501
>>1808627
Включи в самом xdebug логи (он xml в /var/log пишет) и смотри, куда он пытается подсоединиться и с какими ошибками у него это не получается.
Аноним 2020/09/16 22:28:22  №1808645 502
>>1807970
Относительно просто ему будет, только если на php он действительно разрабатывал и знает, чем DI контейнер отличается от service locator, понимает про слоистую архитектуру, сайд эффекты и хотя бы solid (не говоря уже про стейт, сборку мусора, потоки и так далее). В идеале, если делал это на симфони и доктрине, будет похоже на спринг и гибернейт.
Но поскольку он "программировал" на crmке, причём малоизвестной (скорее всего, сделана из говна и палок 100 лет назад), скорее всего он не знает ничего, кроме совсем уж школьной базы (циклы, массивы, get, post, json, select, update, delete) и начинать ему придётся практически с нуля.
Штош, жизнь жестока.
Аноним 2020/09/16 22:30:48  №1808648 503
>>1785871 (OP)
Php можно выбрать в качестве первого языка программирования для изучения или это не для новичков в программировании?
Ответы: >>1808915 >>1808955
Аноним 2020/09/17 04:24:43  №1808727 504
>>1808542
Я РАБотаю в мухосранске с населением 200к. Тут вакансий практически нету, а если и есть, то они на авито) Собираюсь перекатываться на удаленку, там лучше кормят. Поэтому, если у тебя в городе нет нормальных вакансий, то лучше пытайся сразу на удаленку или перекатывайся в другой город. Устраиваться на хуевую работу ради получения опыта не стоит. Потеряешь дохуя времени, а опыта так и не получишь. По крайней мере у меня так получилось.
Ответы: >>1808728
Аноним 2020/09/17 04:28:25  №1808728 505
>>1808727
В дополнение скажу, что 30к по началу казались большими деньгами после того, как я слез с шеи родителей. Но теперь я понимаю, что даже ебатеку не могу оформить с такой зп
Аноним 2020/09/17 10:13:07  №1808915 506
>>1808648
Любой язык можно выбрать в качестве первого, но лучше сиподобные, имхо. Пхп в их числе.
Ответы: >>1808917
Аноним 2020/09/17 10:17:33  №1808917 507
>>1808915
По наблюдениям если пыхе не правильно учить (а ее до сих пор чаще учат по протухшим гайдам и книжкам), то это создаст полную кашу в голове, которая даже хуже, чем вообще не знание ничего.
Лучше начинать с того языка, где обучающие материалы качественнее и меньше шанс такого говна наесться. (например шарп)
Аноним 2020/09/17 10:49:03  №1808953 508
VeviyDHgMds.jpg (37, 683x1080)
1080x683
Существует ли информация как сортировать массив со вложенным массивом который состоит только из строк блять? Два часа сижу в гугле и такое ощущение что индексы массива и его элементы могут быть только цифрами
Ответы: >>1808963
Аноним 2020/09/17 10:54:19  №1808955 509
>>1805734
>Ну это же кошмар получается:
Совершенно верно. Если в симфони ты вдруг хочешь куда-то кидать EntityManager - ты 100% хочешь сделать хуйню.
Так как в симфони объекты могут гидрироваться через reflection, в симфони допускается невалидное состояние сущности до вызова валидатора при создании объекта из внешних данных. Правила валидации указываются у переменных класса через аннотации. Внутри сущности никакой работы с базой быть не должно, только внутри сервисов.

Отвечавший тебе господин тащит опыт Ларавела в Симфони, где он не всегда применим.

>>1807705
Нормальных пхп-мидлов, шарящих за ООП, не так уж много. У пхп есть много ловушек для джунов, в которых те надолго или даже навсегда вязнут.

>>1807670
Проверь .env и .env.local.
Дебаг-режим включается в index.php при наличии переменной окружения APP_DEBUG.
https://github.com/symfony/recipes/blob/master/symfony/framework-bundle/5.1/public/index.php

>>1808648
Можно.

>>1808542
>на основе него пишу свой фрейм, что бы на тестовые на его основе фигачить
Чаще всего для тестовых заданий стэк выбирает работодатель. Варианты "напиши как хочешь" не редки, но и не часты. И порой это значит, что контора распиздяйская.
Ответы: >>1809270
Аноним 2020/09/17 11:03:54  №1808961 510
А безопасно ли палить юзерам айдишники сущностей в базе? То есть если, например, по урл или еще как-то можно понять, что вот у такого-то поста, коммента или такой-то id.
Ответы: >>1808965
Аноним 2020/09/17 11:06:47  №1808963 511
>>1808953
Скинь пример что-ли. Первое предположение - в foreach проходишь массивы, а уже внутренние сортируешь.
Ответы: >>1808988
Аноним 2020/09/17 11:09:25  №1808965 512
>>1808961
На дваче же те же айдишники в каждого комментария есть. Вот и думай, безопасно или нет.
Аноним 2020/09/17 11:31:54  №1808988 513
>>1808963
$array = [
'd' => [
'f',
'e',
],
'a' => [
'c',
'b',
],
];

ksort($array);

foreach ($array as $k=>[$s,$j]) {

echo "массив $k буквы: $s и $j <br>";

}
Ответы: >>1808998 >>1809268
Аноним 2020/09/17 11:40:01  №1808998 514
>>1808988
Ну а результат какой ожидаем? Тебе нужно отсортировать массивы, элементы внутри массивов или что?
Если первое, то для массивов не определены операции "больше" и "меньше", делать можешь самостоятельно через usort.
Если второе, то навскидку array_map($array, 'ksort')
Ответы: >>1809001
Аноним 2020/09/17 11:41:36  №1809001 515
Ответы: >>1809115
Аноним 2020/09/17 13:39:32  №1809115 516
>>1809001
Ты глупенький что-ли? Что значит "все"?
Как ты предлагаешь отсортировать ['a'=>['f','e'] и 'd' => ['c','b']]?
Аноним 2020/09/17 15:58:51  №1809263 517
>>1794650

> 300к сакраментальные ты вряд ли наберёшь

PHP-миддл с зп 240k в треде. Сколько зарабатывают синьоры и лиды я даже говорить не буду.
Ответы: >>1809267
Аноним 2020/09/17 16:01:23  №1809267 518
>>1809263
Какой у вас там стэк?
Ответы: >>1809272
Аноним 2020/09/17 16:01:24  №1809268 519
Ответы: >>1809379
Аноним 2020/09/17 16:04:05  №1809270 520
>>1808955

> в симфони допускается невалидное состояние сущности

Symfony Forms в 2020 никто в здравом уме не использует.
Ответы: >>1809406
Аноним 2020/09/17 16:05:07  №1809272 521
>>1809267

Symfony 3-5, Apache Kafka, Postgres, Docker.
Ответы: >>1809310
Аноним 2020/09/17 16:52:46  №1809310 522
>>1809272
> Docker.
зачем он нужен?
Ответы: >>1809389
Аноним 2020/09/17 17:01:16  №1809317 523
Где инновации?
Аноним 2020/09/17 18:07:00  №1809379 524
>>1809268
Хуйня. asort сортирует по значению, если немного поменять массивы, то 'a' никогда перед 'd' не встанет https://ideone.com/ICsPj1
Аноним 2020/09/17 18:19:21  №1809389 525
>>1809310
Чтобы не ебаться с окружением. Даже если у тебя просто php, то у тебя на одном сервере могут крутиться два приложения, одно на php5, другое на php7, с разными наборами экстеншенов.
Докер, как виртуалка, очень всё это упрощает, описываешь нужную тебе систему один раз, и потом разворачиваешь то же самое где угодно, на своём компе, компе коллеги, тесте на беременность твоего парня или на продакшен сервере.
Аноним 2020/09/17 18:50:17  №1809406 526
>>1809270
Не знаю, почему ты так решил. Но дело и не в нем.
Допустим, нам прилетает json. Мы десериализуем его в объект. Объект гидрируется через рефлексию. Внутри объекта на данный момент может быть что угодно - Симфони просто положила в переменные объекта значения из одноименных ключей json'а. После гидрации нужно обязательно вызвать валидатор, потому что состояние объекта может быть невалидным.
Ну и это необязательно сущность. Любая ДТОшка, например. Но в симфони можно обходиться и без них: в сущностях можно группировать переменные через аннотации и десериализовывать и валидировать только их. Но это уже магия для тех, кто умеет её готовить.
Ответы: >>1809462 >>1809476
Аноним 2020/09/17 19:28:33  №1809462 527
>>1809406

> Ну и это необязательно сущность. Любая ДТОшка, например. Но в симфони можно обходиться и без них: в сущностях можно группировать переменные через аннотации и десериализовывать и валидировать только их. Но это уже магия для тех, кто умеет её готовить.

Я чот тебя не понял. То сущность, то не сущность.

В твоём примере, раз прилетает json, "гидрации" не будет. Будет только десериализация json в объект конкретного типа.

Как обойтись без DTO, если методы и свойства внутри сущностей ограничены конкретными типами?
При попытке заполнить такую сущность невалидными данными посыпятся ошибки. И реализовывать в такой сущности какое-либо поведение очень неудобно. В методах нужно будет думать о том, валидные ли данные и писать кучу проверок.
Или не думать, но контролировать, чтобы во внешнем коде не вызывались методы сущности ДО её валидации. Появляются вот такие вот неявные грабли, на которые рано или поздно кто-нибудь да наступит. Плюс это не даёт нам с уверенностью использовать данные сущности внутри какого-либо сервиса - ведь кто знает, откуда она прилетела, прошла через валидатор или нет, выдаст ли данные ожидаемого типа.
Но да, такой подход возможен, если превращать сущности в простые контейнеры не пойми каких данных. И лишать себя возможности писать простой, предсказуемый типизированный код, в который можно вносить изменения, не задумываясь обо всех контекстах его использования.
Ответы: >>1809516
Аноним 2020/09/17 19:37:24  №1809476 528
>>1809406
Чет хуйня какая-то у тебя получается.
Во первых что значит "Допустим, нам прилетает json". Нам прилетает "сущность в виде JSON".
И схуя-ли ты должен её валидировать у себя? Откуда ты вообще можешь знать правила валидации? А если и знаешь схуя-ли ты их должен копировать эти правила себе в код?
Ответы: >>1809516
Аноним 2020/09/17 20:03:31  №1809516 529
>>1809462
>>1809476

Пусть дана такая сущность
https://pastebin.com/XfZJSvv5

Пусть у нас есть сервис, где есть
(@var ValidatorInterface)
private $validator;
(@var SerializerInterface)
private $serializer;
PHPDoc заменен на скобочки, чтоб разметку не распидорасило

Пусть нам прислали такое:
{
"name": "Лёха",
"email": "не скажу",
"mobilePhone": "02))))))"
}

Делаем
$visitingCard = $this->serializer->deserialize($json, VisitingCard::class, 'json');
Получаем $visitingCard с невалидным состоянием.
Но следующей же строкой мы вызываем
$errors = $this->validator->validate($visitingCard); // будет 2 ошибки
if (count($errors) > 0) {
// оборачиваем список ошибок в эксепшн и кидаем его
}

Надеюсь, так яснее.

Это всё в методе сервиса. Снаружи - в других методах и тем более в контроллере - невалидного состояния сущности быть не может. Только между этих двух строк.

Собственно, если ты принимаешь json как-то по-другому, мне было бы очень интересно узнать как.
Ответы: >>1809544
Аноним 2020/09/17 20:16:17  №1809544 530