Программирование

Ответить в тред Ответить в тред
Клуб изучающих PHP #119 /php/ Аноним 23/08/20 Вск 21:11:45 17858711
php-noob-1.png 33Кб, 500x500
500x500
cat-cafe-osaka.jpg 157Кб, 1024x683
1024x683
welcome-to-php.png 188Кб, 853x480
853x480
epic-raws-maria[...].jpg 504Кб, 1280x720
1280x720
Здесь мы изучаем язык 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? — Да, однозначно. Посмотри любую вакансию.
Оформление кода Аноним 23/08/20 Вск 21:15:28 17858752
grammar.png 56Кб, 500x644
500x644
Код должен быть аккуратным и оформляться, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

Для этого достаточно вставить код на 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/
Аноним 23/08/20 Вск 21:19:02 17858783
Если вас пропустили в предыдущем треде, можете напомнить о себе тут. Также, напомню, что код файлообменника https://github.com/deadj/uppu я проверил тут: >>1781062 →
Аноним 23/08/20 Вск 22:12:17 17859034
наконец таки блять перекатили. работаю уже год на галере на всяких говноцмс и битриксе. с начала лета активно осваиваю ларку. когда можно понять что могу свалить в другую галеру и на норм стек и на какой уровень?
пока что был на двух - джун и мидл, оба в отказ ушли
Аноним 23/08/20 Вск 22:24:33 17859135
Повторю вопрос о том, как отстоять честь пхп >>1785124 →. Брат - натурал, ебаться не будем.
Аноним 23/08/20 Вск 22:52:41 17859336
image.png 20Кб, 644x257
644x257
>>1781944 →
Спасибо. Насчет autowiring, он точно должен работать на компонентах? Читал о нем еще в твоем гайде по DI, но даже не пытался реализовать, т.к. был уверен что это лютейшая магия, работающая только на полном symfony. Сейчас вот попытался сделать как на пике, но что-то параметры в конструкторы не пробрасываются. Даже на новом голом тестовом проекте с одним лишь DI пробовал, всё равно безуспешно. Больше я бы, конечно, удивился, если бы оно работало.
Аноним 24/08/20 Пнд 01:37:19 17859927
Стоит создавать отдельный класс в модели для работы с ОРМ ( Доктрина )?
Аноним 24/08/20 Пнд 08:52:36 17860728
Аноним 24/08/20 Пнд 17:21:32 17865919
>>1785903
Тут ты попадаешь в очевидную ловушку, что на цмсках ты программирские скиллы не развиваешь, а дома это делать сложно и поправить тебя некому, когда говнокодишь.
На джуна можно скорее всего когда угодно, потому что котируются не столько навыки, сколько общий интеллект, мотивация и так далее.
Погуглил наборы вопросов на собеседованиях (только нормальные, а не всякое говно типа "что такое функция", "что такое класс"), желательно на миддла и учи, пока не сможешь на них максимально полно ответить.
Ещё сделай пару пет проектов (только по гайдам, скелетонам и так далее) и запули сюда или в любой чат и попроси обосрать.
Ещё имей ввиду, что на джуна нормальный офферрейт - это 1 оффер из 20 собесов.

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

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

>>1786660
Да
Аноним 25/08/20 Втр 14:44:41 178764817
>>1787622
Нет, джава намного более обширна как область (даже чисто как бекенл, не вспоминая про мобилки), намного совершеннее, как экосистема (тулчейн, akka, котлин, скалаштуки и тп) и намного денежнее в смысле зарплат.
PHP при всём его прогрессе за последние 10 лет будет для тебя дауншифтингом.
Аноним 25/08/20 Втр 14:48:41 178765618
Ананасики посоветуйте куда рыть, нужно с помощью php и js эмулировать действия пользователя. А именно, открыть страницу, проскролить ее, кликнуть по кнопке, получить аяксом форму, заполнить и отправить.
Аноним 25/08/20 Втр 14:51:03 178766319
>>1787648
На пыхе можно будет фрилансить в свободное время по выходным.
Аноним 25/08/20 Втр 15:06:20 178767920
>>1787656
Ну в puppeteer сделай на жс, нахуя тут два языка?
Аноним 25/08/20 Втр 15:10:58 178768721
>>1787679
так в этом и интерес. как это реализовать на php+js, без ноды и плугинов.
Аноним 25/08/20 Втр 15:12:04 178769022
>>1787663
Дело конечно твоё, но количество не означает качество. Большинство фрилансеров - это индусы с крайне низким рейтом. Да, стать одним из них легко, но зато трудно прийти к успеху, не говоря уже про конкуренцию.

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

То есть, у тебя выбор между локальным оптимумом и глобальным, дальше выбирай сам. Я бы выбрал второе.
Аноним 25/08/20 Втр 15:13:31 178769423
>>1787687
Это невозможно, потому что для того, чтобы эмулировать действия пользователя тебе нужен браузер, где ты будешь исполнять фронтендовый код.
Как альтернатива, можешь расковырять апи сервера и отправлять запрос на сабмит формы прямо из php, но это уже будет не эмуляция.
Аноним 25/08/20 Втр 15:32:58 178770924
>>1787687
> +js
И кто этот жс будет исполнять, Пушкин?
А вообще, это не интересная задача и весьма ебучая. Лучше сделать как угодно и избавиться от неё.
Аноним 25/08/20 Втр 15:40:16 178771325
>>1787694
просто сабмит не подойдет, нужно именно скрол, клик и тд и тп
>>1787709
так в этом и вопрос, через пых можем получить код страницы, что делать дальше?
Аноним 25/08/20 Втр 15:43:00 178771526
>>1787713
Дальше реализуешь на пхп виртуальную машину жс, дом модель документа, ну а там разберешься.
Аноним 25/08/20 Втр 15:46:00 178771627
Аноним 25/08/20 Втр 16:46:06 178778428
>>1787690
Я согласен с тем, что ты говоришь.
Но суть в том, что я хотел бы и в пыхе развиваться как нормальный девелопер. Прокачивать хардскиллзы, писать красивый и правильный код и т.д.
Ну и плюс иметь возможность пофрилансить/поработать удаленку (когда корона закончится и начнут возвращаться в офисы).
Джава захватывает тем, что я в любой момент сейчас могу свернуть в сторону андроида и делать там более-менее интересные проекты (всяко интереснее, чем если я попаду на проект в какой-нибудь банк и буду бекенд софта для местных бухгалтерш писать)
Аноним 25/08/20 Втр 16:58:05 178779829
>>1787784
На самом деле пилка андроид приложений наверно самая унылая сфера из всех, даже обычный фронтенд интереснее.
Аноним 25/08/20 Втр 17:08:45 178781830
>>1787784
Фриланс на пыхе это обычно смерть с джумлой и прочим ужасом, конечно можно найти себе какую-нибудь поддержку сайтеца на симфони 2, но такого не очень много. Нормального девелопмента на фрилансе в принципе обычно нет, никаких тестов, ничего нет, файлы кидай архивом и объясняй как установить по скайпу-обычное дело
Аноним 25/08/20 Втр 19:15:12 178792431
>>1787784
Чувак, тебе уже сказали, что джава - она как php (в смысле, можешь делать всё то же самое), но просто совершеннее в смысле тулчейна, экосистемы, зарплат и так далее.
Хочешь говнякать фриланс на симфони - пожалуйста, жизнь твоя, решать тебе.
Аноним 25/08/20 Втр 19:15:35 178792532
>>1787924
> Хочешь говнякать фриланс на симфони
Пыхе*
Аноним 25/08/20 Втр 19:47:43 178796933
А на джаве ничего нового не делают, правда? Это в основном огромные легаси проекты, верно? Меня, например, такое не очень интересует.

мимо
Аноним 25/08/20 Втр 20:27:07 178799834
>>1787969
Делают новые огромные проекты, которые станут потом тем огромным легаси.
Если интересует прототипное говно для ип чебурек, то это нода, ларавель, джанго, рельсы.
Аноним 25/08/20 Втр 21:39:55 178803935
Аноны, делаю на работе простенький сервис , поэтому решил на слим 3 субственно максимально кастомно все сделать, аутентификацию, валидацию, пагинацию и прочее.
Встрял с тем как отображать в twig флэш сообщения.
В идеале что то типа хелпера, который будет скрывать в себе всю логику флэш сообщений.
По документации на твиг нихуя не понял. И у меня даже почему то addGlobals не заработало.
Аноним 25/08/20 Втр 21:42:05 178804136
Аноним 25/08/20 Втр 21:45:10 178804337
>>1787969
Джаву боюсь хоронят так же как пхп или с++. Вечно и постоянно.
Рождены что бы хорониться, лол.
Дальше ток JS , ему желают смерти все, но все понимают что он тупо не умрет никогда.
Аноним 25/08/20 Втр 22:21:56 178806038
>>1788039
>на слим 3
А че не на 2 то сразу, некрофил ебучий.
Аноним 26/08/20 Срд 11:49:25 178852639
Господа. Нужен САМЫЙ КОРОТКИЙ гайд по симфони/ларавель/уии2.
Хуйня в том, что я всю жизнь то фрилансил то подрабатывал на разных цмсях и/или фрейморках, и по итогу оказался в ситуации что могу пользовать всё, но нихуя не знаю. А современному рынку труда очень надо шоб ты знал симфоню. Осваиваю я любое говно быстро, есть план написать на гитхаб проектик на любом распространённом фреймворке шоб пощупать его кишочки, и говорить что знаю его(показывать результат при необходимости).
Аноним 26/08/20 Срд 11:49:50 178852740
Пишу небольшой интернет магазин на laravel, сейчас думаю как лучше реализовать фильтр товаров. Аттрибуты каждого товара хранятся в json поле базы в виде:

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

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

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

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

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

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

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

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

Аноним 26/08/20 Срд 12:47:27 178857245
maxresdefault[1].jpg 41Кб, 1280x720
1280x720
Сильно ли отличается Ларавел 5 от 7 ?
А то накачал сливов laracasts и всяких курсов, а там пятёрка.
Может у вас есть ссылки на посвежее?

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

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

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

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

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

Аноним 26/08/20 Срд 17:16:53 178889950
>>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 она не имеет.
Аноним 26/08/20 Срд 18:21:56 178895151
>>1788899
>>1788899
>Когда ты строишь каталог, то у тебя есть четкая схема:
>Product "DELL UltraSharp U2718Q" <- Type "Monitor" <- Property "Resolution" <- "3840x2160 (16:9)"
>Эта схема состоит из нескольких таблиц, полностью реляционна и нормализована. И никакого блядь отношения к EAV она не имеет.

Вот тут нихуя не понял. Из каких таблиц состоит эта схема? Или ты предлагаешь на каждое свойство свою таблицу создавать?
Аноним 27/08/20 Чтв 09:32:27 178935052
Product-Diagram.png 62Кб, 724x497
724x497
>>1788951
Важно не из каких таблиц она состоит, это дело десятое. Какие нужны, такие и сделаешь. Важен сам факт того что если у тебя есть схема каталога и она состоит из таблиц, то это не EAV.

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

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

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

Я вас пидарасов с жсоном в базе всех сгною нахуй, вы черви-пидоры с говном в голове, пишете свою поебень в монгоебень или сразу в dev/null, быстро пиздец.
Аноним 27/08/20 Чтв 16:20:40 178996963
>>1789949
Ты своей тупорылой башкой понимаешь зачем вообще нормализуют данные? Текстовые поля тоже нормализуешь, дебич?
Аноним 27/08/20 Чтв 17:03:25 179005564
>>1789969
Я как раз отлично понимаю.
Если тебе надо сохранять хуиту в базу, которую целиком нужно писать/читать по айди - тебе нахуй не нужна для этого реляционная база, в противном случае, если у этих данных подразумевается структура, то нужна схема и нормализация, то есть не нужно JSON-говно.
JSON в реляционной базе, это как Any в статически типизированном языке.
Аноним 27/08/20 Чтв 17:08:59 179006665
зачем нужны статические методы?
Аноним 27/08/20 Чтв 17:30:11 179009266
>>1790055
Еще раз спрашиваю. Ты нормализуешь текстовые поля?
Аноним 27/08/20 Чтв 18:13:53 179013067
>>1790092
>Ты нормализуешь текстовые поля?
Нормализовать можно таблицу, а не поля.


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

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

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

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

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

В любом случае продолжать с тобой разговор бесполезно. Просто выйди в окно - сделай миру хорошее.
Аноним 27/08/20 Чтв 18:53:49 179017370
>>1790172
>не важна и не будет важна


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

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

>В любом случае продолжать с тобой разговор бесполезно. Просто выйди в окно - сделай миру хорошее.
Тебе ещё и 18 нет.
Все ясно, дело раскрыто. Малолетний долбоеб, который с реальной базой никогда не работал, прочитал в википедии что такое четвертая нормальная форма.
Аноним 27/08/20 Чтв 21:51:13 179030673
200827214038.png 19Кб, 1896x332
1896x332
Screenshot6.png 54Кб, 932x891
932x891
>>1789853
>Давай пруфы скорости, маня.
Держи.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

На всякий случай объясняю - что бы просьба отсортировать по диагонали не вызывала безысходный обсер. (У меня тоже не всё заебись, у Property должен быть Type и ссылка на НЕСКОЛЬКО РАЗНЫХ таблиц, в которых может быть INT, STRING и тд в колонке VALUE, а в нынешней схеме виден обсер при сравнении дианонали), но такая структура значительно ближе к рабочему варианту.
Аноним 29/08/20 Суб 16:20:15 179190992
>>1791908
Где ты вообще там увидел Product? Там схема ProductType<-Property<-Value. Это вообще все сделано чтобы показать как можно использовать JSON в vaue.
Аноним 29/08/20 Суб 19:24:06 179205793
>>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 говно. Какое оправдание будет на этот раз?
Аноним 29/08/20 Суб 20:18:02 179208594
Как пыхошторму дать понять что у папки src неймспейс App, например?
Аноним 29/08/20 Суб 21:50:11 179215295
>>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 часами моей работы и вообще не прокатывали на его коде, лол.
Аноним 30/08/20 Вск 07:11:51 179240696
>>1792152
>Здесь json из твоей базы, удовлетворяющий условию. Смотри на него внимательно. В нем есть такие шикарные элементы, как third null, к примеру.
>Что нам с ними придется делать? Правильно, в коде как мы их получили проверяем.
Ты в натуре ебанутый? Они пустые, потому что я их оставил пустыми, долбобеб. Я блядь своими руками создал этот JSON, убрать их дело двух секунд.

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

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

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

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

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

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

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

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

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

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

И опять же: ошибки nginx "no live upstreams" всегда соседствуют с ошибками про отсутствие куки. Совпадение? Какая-то связь точно есть
Аноним 30/08/20 Вск 14:20:52 1792632101
image.png 73Кб, 1050x261
1050x261
Есть предложения?
Аноним 30/08/20 Вск 14:26:43 1792640102
>>1792589
Так я тебе и пишу чтобы сами запросы смотрел. Главное что на nginx пришло, а не какой друг обосрался.
Аноним 30/08/20 Вск 18:03:18 1792838103
$_SESSION это надежная хуйня? Юзверь не может никак подменить ее переменные?
Аноним 30/08/20 Вск 19:57:00 1792946104
>>1792838
Подменить нет, может спиздить чужую (session hijacking) но ты от этого никак не защитишся, ну кроме наворачивания https и подобного.
Аноним 30/08/20 Вск 20:15:46 1792958105
>>1790066

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

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

>>1792471

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

>>1792539

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

Аноним 30/08/20 Вск 20:16:53 1792961106
>>1792838

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

>>1785933

По идее должен работать как описано в мануале (либо выдавать ошибку с конкретным указанием проблемы).
Аноним 30/08/20 Вск 20:17:25 1792962107
>>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);

То есть этот метод работает некорректно.
Аноним 30/08/20 Вск 20:58:12 1793026108
>>1792962
Спасибо. Сделаю рефакторинг и отправлю еще раз =)
Аноним 31/08/20 Пнд 09:58:35 1793420109
Почему меня все ИРЛ отговаривают от пыхи? 7ая пыха на жабу похожа, думаю до джуна смогу сейчас прокачаться за месяца 3 и последний год универа пытаться найти работу. На какой-нибудь джаве я так в жизни не смогу, один только спринг займет полгода плотного вката.
Аноним 31/08/20 Пнд 10:46:01 1793467110
7392.JPG 2071Кб, 3872x2592
3872x2592
Аноним 31/08/20 Пнд 11:29:07 1793532111
>>1793420
Есть критика от незнающих, типа "ыыы пыха гавно я вот на ноде пишу", на нее похуй. Основные проблемы пхп это то что она в мелкосреднем бизе на говноцмс и среди всяких говношопов популярна, что равняет уровень разработчиков многих с нулем, ну и сама как язык технически ну такое.

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

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

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

Фасады говно, но ларавельщикам сойдет
Аноним 31/08/20 Пнд 21:55:09 1794175124
Аноним 01/09/20 Втр 03:12:36 1794317125
2020-09-0103-09[...].png 21Кб, 1132x429
1132x429
Вот решаю одну из первых задачек, но хочу ещё округлить получившееся число до первых двух знаков после запятой. Что я делаю не так? Переменные нельзя в эту функцию добавить? А как тогда?
Аноним 01/09/20 Втр 03:15:37 1794320126
2020-09-0103-14[...].png 20Кб, 1153x427
1153x427
>>1794317
Я ебанько, вот нормальный скрин.
Аноним 01/09/20 Втр 08:01:13 1794444127
>>1794320
что такое $2 вторым параметром?
Аноним 01/09/20 Втр 08:32:29 1794454128
>>1794320
Тебе нужно вторым параметрам вставить число, на сколько знаков округлять. Не понятно зачем ты написал туда знак доллара.
Аноним 01/09/20 Втр 10:31:28 1794499129
Анончики, подскажите по Laravel. Нормально ли самому добавлять js файлы в resources/js? Или есть какой-то более подходящий способ?
Аноним 01/09/20 Втр 10:33:33 1794501130
>>1794499
импортируй нужные тебе js в app.js
Аноним 01/09/20 Втр 10:50:36 1794524131
Аноним 01/09/20 Втр 11:29:46 1794585132
>>1794524
какой БОГАТЫЙ синтаксис у языка
Аноним 01/09/20 Втр 12:45:44 1794650133
>>1793420
Пехапе это вакансии условно 1-2 левела, а джава 2-3. Вкатиться легче в php, но и говнокода и долбоебов там на порядок больше, а зп в среднем меньше (300к сакраментальные ты вряд ли наберёшь).
В джаву вход сложнее, но там все круче и денег больше.

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

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

https://github.com/Back1ng/vector
Аноним 01/09/20 Втр 14:32:46 1794792136
>>1794524
Ору, анончик. Ты сделал мой день!
Аноним 01/09/20 Втр 15:48:33 1794858137
Верстать обязательно уметь для пыхера? Или общих понятий как работает достаточно? Вкатывался во фронт, но чета разонравилось. Сюда зашел, смотрю а тут тоже нужно HTML/CSS/JS. В чем прикол? Зарплата 50к, а знаний надо как у фуллстека?
Аноним 01/09/20 Втр 16:20:00 1794910138
>>1794858
У фуллстеков как раз зарплата пониже почему-то, и их многие недолюбливают. Хз почему. Вроде считается что фуллстек нихуя не знает ни фронт, ни бэк.
Аноним 01/09/20 Втр 17:19:09 1794962139
Фулстеков придумали рабовладельцы у которых замашки на то что они владельцы компании по разработке дохуя серьезного софта есть, а денег и/или проектов и/или навыков управления командой из специалистов нет. Представление иметь нужно, но если требуют сегодня кодить, завтра верстать, а послезавтра проектировать бд для клона фейсбука - беги оттуда нахуй.
Аноним 01/09/20 Втр 17:22:14 1794968140
Вместо if (isset($var)) писать if (@var) это дно? Получше же выглядит.
Аноним 01/09/20 Втр 17:23:00 1794969141
>>1794968
Доллар забыл, но вы поняли.
Аноним 01/09/20 Втр 17:26:03 1794974142
>>1794969
Ну вот поэтому в рублях и получаешь.
>>1794968
> Получше же выглядит.
Получше выглядит js, а php это как песок себе в глаза сыпануть. Постепенно есть привыкание, но синтаксис уёбищный.
Аноним 01/09/20 Втр 17:36:58 1794977143
>>1794974
Каждому свое, наверное. Я понимаю дизайн питона хвалить, но жс это же пиздец.
Аноним 01/09/20 Втр 18:15:24 1795000144
>>1794968
Оператор подавления ошибок это вообще причина для увольнения
Аноним 01/09/20 Втр 19:58:52 1795060145
>>1795000
Ну я как бы спрашиваю, можно ли использовать игрушку дьявола во благо.
Аноним 01/09/20 Втр 23:31:33 1795160146
>>1794968

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

>>1794962
Да смотря что за фуллстеки - если просят глубокое знание обоих технологий, то это как "Глубокая Глотка 15. Растянутый анус.", а если подверстать кнопку\форму, но ещё норм. Но я в любом случае контекст долго переключаю и весь день ебстись с простой задачей из другого набора буду.
Аноним 02/09/20 Срд 07:11:51 1795227148
>>1794974
Кек. В жс треде говорят, что жс - говно, а пхп - это новая продвинутая жаба. А тут пишут, что жс выглядит лучше, а пхп - песок в глаза.
Аноним 02/09/20 Срд 08:56:29 1795244149
>>1795227
В жс треде сидят продвинутые пхпшники, которые пишут на современном пхп, который оче похож на жабу. А сюда ходят юные жсеры, которые нормального пхп и не видели никогда.
Так - наблюдения просто.
Аноним 02/09/20 Срд 12:09:39 1795343150
>>1795244
> нормального пхп и не видели никогда.
Покеж? А то реально не видел
Аноним 02/09/20 Срд 13:06:06 1795380151
Чем бек на Symfony принципиально отличается от бека на джаве? На джаве сильно больше кода выходит?
мимо-не видел ни того ни другого
Аноним 02/09/20 Срд 15:11:03 1795454152
>>1795343
https://symfony.com/

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

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

Кода примерно сравнимое количество, но джава, конечно, многословнее. С другой стороны, на джаве в последнее время активно пишут в функциональном стиле, rxjava, вот это всё - и кода выходит реально меньше и выглядит оно изящнее.
Аноним 02/09/20 Срд 15:13:10 1795456153
>>1795454
> в пехапе это намного большее;
больнее*
Аноним 02/09/20 Срд 16:52:22 1795537154
>>1795454
>сотни тысяч человеко-часов
я бы сказал десятки миллионов
Аноним 02/09/20 Срд 16:57:14 1795543155
Намного многословнее.
Много бойлерплета.
Ручками заебешься писать
Аноним 02/09/20 Срд 19:58:57 1795686156
Аноним 02/09/20 Срд 22:28:27 1795779157
Аноним 03/09/20 Чтв 06:53:59 1795898158
Сейчас работаю инженером на уралговнозаводе за 40к, и чёт подзаебала бюрократия, отсутствие интернета и режим, поэтому прошу анонов пояснить за условия труда в веб студиях. Стрессово ли? Надо ли общаться с заказчиками? Жёстко ли ебут по срокам? Че по ЗП в среднем (город-миллионник)? Белая, серая? Есть ли овертаймы и много ли? Как с удаленкой? Кто коллеги по масти? Да и как в целом?
Аноним 03/09/20 Чтв 07:29:43 1795909159
>>1795898
> Стрессово ли?
Да тупо чилю, делаю таски, стресс только в том, что надо работать.
> Надо ли общаться с заказчиками?
Нет.
> Жёстко ли ебут по срокам?
Нет. в создаватель не иди только.
> Че по ЗП в среднем (город-миллионник)?
Челябинск же или этих заводов как грязи? У меня меньше 40, но я работаю полгода в сфере только и стартовал совсем за еду.
> Как с удаленкой?
Она есть, при надобности, но не везде. Люди считают, что удаленка приведёт к потере эффективности. Думаю всегда можно договориться.
> Кто коллеги по масти?
Ну как в айти принято, все петушня - то, что нужно.
> Да и как в целом?
Нормально.
Аноним 03/09/20 Чтв 10:16:37 1795996160
XKpZumXscBQ.jpg 430Кб, 1222x1335
1222x1335
Анон, подскажи, где искать похапе-кодера по адекватной цене?
Есть сверстанные страницы, ТЗ не особо сложное, по большей части просто вывод из базы (база заполняется мной извне), по моим прикидкам работы месяца на полтора. Самое очевидное для меня - найти на апворке, но там (в т.ч. из-за комиссии) расценки больно кусаются, да и возможно многие тупо overqualified для моей задачи (налетают по $30/h).

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

Куда еще податься? Или нужно выбирать из двух стульев?
Аноним 03/09/20 Чтв 10:23:15 1795997161
>>1795996
>Анон, подскажи, где искать похапе-кодера по адекватной цене?
>хорошие спецы просят много
>хреновые мне не нужны(и то не соглашаются на работу)
>где найти хорошего спеца по цене хренового и чтобы работал?
Сам-то понел чё просишь? Нанимай того, кто возьмётся за твою работу, и не выпендривайся.
Аноним 03/09/20 Чтв 10:33:09 1796009162
>>1795997
Алсо учти, что если у тебя низкий рейтинг(или ты новичок) на фриланс-биржах, то опытные ребята будут работать с тобой только на своих условиях - никто не знает что ты за фрукт и что можешь вытворить в процессе сотрудничества. Хотя, скорее всего, просто откажутся, если деньгами не заманишь.
И да - фрилансер стоит дороже чем офисный сотрудник. Отталкивайся от этого факта в первую очередь. 30$/h на апворке берут только жопорукие индусы.
Аноним 03/09/20 Чтв 11:07:25 1796067163
>>1795996
Так а что за тайны, кидай сюда тз и можно будет точно сказать стоит оно таких денег или нет.
Аноним 03/09/20 Чтв 11:24:33 1796089164
159711.jpg 18Кб, 240x323
240x323
Анонсы, сколько могут стоит такие работы на фрилансе как испольнитель спрашиваю:
- добавление пары таблиц в БД
- (возможно)расширение уже 1-2 существующих таблиц
- создание моделей: TableDataGateway(там какой-то самописный фрейм на них) под 2 сущности
- пара крудов на каждую сущность: админка и фронтенд
- скорее всего придётся верстать в админке пару страничек и на фронтенде(хз чё там - заказчик понаписал хуиты в стиле "сделай как у них")
- скорее всего будет дополнительная логика в 1 класс

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

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


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

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

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

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

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

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

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

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

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

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

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

>когда на фуллтайм на hh.ru куча вакансий по 100к/мес
Нологи с этой зарплаты посчитал? Электричество и прочую хрень?
Программер стоит не 100к\мес, а полную сумму. Сверху прикинь зряплату директора конторы - он тоже не даром там работает.
На хх вообще нефиг смотреть в твоём случае - ты человек не в офис берёшь.
Аноним 03/09/20 Чтв 13:20:02 1796211174
>>1796183
Ты какой-то мутный хуй. Будет миллион желающих сделать месячный кусок работы за 100к, какие нахуй 5000$.
Ты если на fl напишешь "yii макака, 100к за месячный объем работы", то заебешься предложения разгребать. Бля, да я сам хоть ленивый хуй, и бабки не проблема, но подкалымил бы за 100к делая "просто вывод из базы".
Так что, сдается мне, ни о каких 100к речи не идет. А идет речь о чашке риса за сложную хуйню, за которую тебе самому браться не охота.
Аноним 03/09/20 Чтв 13:53:16 1796256175
>>1796183
>но не тройную же
Эта тройная ставка подразумевает, что 2/3 времени из тебя будут клещами тянуть ТЗ, условия, допданные и прочую хрень.
Я очень сильно нагревался, когда целый день выяснял, что клиент хочет, что ему надо и как это реализовать в условиях кучи его говнокода, а потом мне на голубом глазу заявляли - ну ты же 10 строчек написал, там не больше получаса.
Аноним 03/09/20 Чтв 16:56:56 1796461176
Фриланс очень невыгоден, так как ты тратишь кучу времени на поиск заказов, переписку с клиентом, разбираешься в незнакомом коде - и все это зачастую не оплачивается. Подумайте, насколько лучше удаленная работа: заказы искать не надо, переписка с клиентом может оплачиваться, разобраться в проекте надо только один раз, а дальше его допиливать.
Аноним 03/09/20 Чтв 18:46:53 1796541177
image.png 4Кб, 443x41
443x41
Еще один вопрос по ларавель. Допустимо ли такие конструкции писать в шаблоне, или лучше это вынести в контроллер?
Аноним 03/09/20 Чтв 19:08:18 1796566178
>>1796541
Нельзя, прочитай про закон Деметры

Ты повышаешь так coupling
Аноним 03/09/20 Чтв 22:12:54 1796768179
>>1796566
Разобрался, спасибо!
Аноним 03/09/20 Чтв 22:46:54 1796801180
15427501582430.jpg 5145Кб, 2443x3479
2443x3479
На днях прислали тестовое, которое похоже на реальный рабочий кейс: не абстрактное, а предельно конкретное и под их рабочий фреймворк. Сама его суть в обработке некоторой инфы и отображении её на нескольких графиках и таблицах в наглядном виде с фильтрацией и сортировкой. Как-то подозрительно это всё. Не может ли быть так, что их прогер на меня свою рабочую таску скинул?
Просто одно дело - запилить абстрактный круд для микросервиса с аутентификацией и пользователями, и совсем другое - мутная комплексная хрень похожая на работу на пару дней времени.
Стоит связываться?
Аноним 03/09/20 Чтв 23:20:07 1796825181
>>1796211
Может, у меня просто неудачный опыт был с прошлыми двумя сайтами (на текущий сайт я еще не искал кодера, хотел перед этим проконсультироваться на двачах). Но спасибо, мне нужно было мнение со стороны. Видимо, чуваки перезакладывали, не зная, чего от меня ожидать как от заказчика.

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

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

Лучше поищи через знакомых. Ну или в треде фейкомыло оставь, мб кто-то свяжется. Было бы лучше всего, если бы ты сам в этом разбирался хоть поверхностно и имел возможность контролировать процесс.
Аноним 04/09/20 Птн 00:09:19 1796862183
>>1796853
Да причем здесь русский фриланс или не русский.

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

Я вижу типичное кроилово, когда за чел пытался найти долбоеба за еду. А теперь какие-то охуительные истории рассказывает про "200к не вопрос". Что несет, вообще охуеть.
Аноним 04/09/20 Птн 00:43:29 1796885184
>>1796862
>потом говорит что не хочет битрикс макак
Ни один человек в здравом уме не захочет Битрикс макак, это я говорю как Битрикс макака. Это говно криво, косо и ужасно.
Тривиальные задачи на нем превращаются в жопоеблю на ровном месте.
Аноним 04/09/20 Птн 00:57:47 1796895185
>>1796885
Какое говно? Битрикс макака крива и ужасна? Кто на ком верхом ездит и в жопу ебет? Ты можешь отличать инструмент и программиста?
Аноним 04/09/20 Птн 01:17:46 1796903186
В /b кто-то назвал ларавел колхозом и порекомендовал учить симфони. Судя по паре приличных книг, которые также были рекомендованы этим анонимом, можно предположить, что он не хер с горы. Неужто в приличном обществе ларавел действительно считается колхозом?
Аноним 04/09/20 Птн 01:21:36 1796906187
>>1796895
Битрикс программисты зачастую не очень как программисты.
1. На Битрикс неплохо так платят и поэтому многие просто зависают там и никуда дальше не двигаются по скиллам.
2. На Битрикс не используются распространённые паттерны и решения, придуманные и вылизанные тысячами других программистов. Это такой манямирок обособленный. Помню, как какой-то чел радовался когда к ним в битрикс-команду пришёл новичок с умением в Симфони - типа тот, говорил, просто на голову выше местных макак оказался.
Аноним 04/09/20 Птн 01:52:40 1796916188
>>1796903
Ну бывают фреймворки и похуже. Ларавел хуже с точки зрения архитектуры, но зато попроще симфони и менее требовательный к прослойке между креслом и монитором. Но при этом наголову лучше всякого дна типа битрикса. Я бы сказал, есть Москва (Симфони), созданная по образу других европейских столиц (Берлин) с кучей денег и тп. Есть какой-нибудь Новосибирск (Ларавел), который вроде тоже ничо так, но сравнивать их глупо. А бывает Барнаул или вообще деревня Нижние Васюки (Битрикс).

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

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

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

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

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

Но тут блядь твоя нейросеть ебучая увидела слово "битрикс". У тебя в комнате взвыла сирена, и ты начал сюда копипастить свою хуйню о том какой хуевый битрикс и как заебись на фреймворках. Какую-то дженерик графоманию про архитектуру, еще пару раз про то какой хуевый битрикс, и еще немного графомании. О чем вообще шла речь тебя не ебет. Ведь ты увидел слово битрикс, а значит пройти мимо никак нельзя. Посты пусть долбоебы читают.
ньюфагопроблемы Аноним 04/09/20 Птн 05:59:33 1796952193
Мудохался день со школьниками и айфонами,
в итоге пришел к этому
https://ideone.com/XlQz9T
как я понимаю, изначально задача не задумывалась как сложная?
Аноним 04/09/20 Птн 08:51:31 1796978194
Аноним 04/09/20 Птн 10:28:29 1797020195
Я хотел бы призвать уважаемых анонимов, горячо спорящих о битриксе в постах выше, к благоразумию. Пожмите руки, пожалуйста. Ну...будьте ж вы людьми.
Аноним 04/09/20 Птн 10:38:12 1797022196
>>1796934
>но он выставил на бирже такой низкий ценник, что свои услуги предложили только битрикс макаки

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

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

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

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

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

>следующий раз сразу пошел на апворк - но там средний ценник мне показался сильно выше fl.ru
Потому, что на апворке дрючат безопасность и без жалости сливают мудака. Там исполнители действительно работают и цены\сроки соответствующие.
Аноним 04/09/20 Птн 11:00:29 1797030200
image.png 220Кб, 630x412
630x412
Аноним 04/09/20 Птн 11:02:06 1797031201
>>1797022
>Я прошлый проект создавал с ценником "по договоренности"
Это и есть кроилово. Сразу было понятно что ты что-то не договариваешь. Описываешь кисельные берега, и работа простая, и плата адекватная. А по факту ты выставил ценник "от 0 до скольки стргуемся". С очевидной целью минимизировать затраты.

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

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

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

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

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

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

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

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

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

Макаки и кидалы ему пишут потому, что рашен фриланс полутруп, а не потому, что цена такая. Напишет 200к - сбежится просто ещё больше кидал.
Аноним 04/09/20 Птн 14:37:22 1797215213
>>1796921
>Битрикс программисты идиоты что-ли клинические?
Смотрите - битриксоид порвался. У вас там та ещё ебанутая атмосферка.
У меня дружище как-то к вам с советом пришёл, а вы его в ответ говном облили и сказали, что он нихуя не знает ваш ссаный битрикс.
Я вашего ебанутого брата за версту чую.
Аноним 04/09/20 Птн 15:22:49 1797259214
>>1797199
>Дядь, ты рофлишь или всерьёз?
Я таблетки забыл выпить, прости
Аноним 04/09/20 Птн 16:10:46 1797319215
Лучше всегда использовать абсолютные пути? А то с относительными хуй поймешь откуда они считаются, вроде бы с публичной папки где лежит индексный файл, а вроде бы хз.
Аноним 04/09/20 Птн 17:36:34 1797382216
>>1797319
Лучше не использовать пути, я бы сказал. Грузишь все классы только через composer, include и require не используешь - и сразу становится хорошо.
Если нужны какие-нибудь фикстуры, то делай функцию, которая берёт их из _FILE_ и юзай её.
Если нужны просто файлы для приложения, то делай класс-обёртку, в которую в настройках будешь прокидывать абсолютный путь до каталога, а во время работы с ней или используй относительные пути (+ группируй всё по бакетам), или вообще имена/айдишники для файлов.
Аноним 04/09/20 Птн 17:40:31 1797387217
>>1797130
>почему нельзя прям в контроллере в базу залезть
Какой контекст у этого действия?
Я нуб (без иронии) и не понимаю. Например получить одну конкретную сущность по API (ресурс) в symfony. В контроллере я непосредственно воспользуюсь репозиторием, сериалазйером, а также неосознано кучей всего, что спрятано, типа эвентов. Вся бизнес-логика тут - это возьми и отдай, как это еще сильнее и глубже дробить?
Аноним 04/09/20 Птн 17:43:22 1797389218
>>1797387
Ну в общем нормально, если вся логика это взять из базы и отдать. Главное - никаких манипуляций с данными в контроллере, это не его дело. Он работает только с реквестами и респонсами, валидировать их может и проверять всячески, но предметной логики не должен содержать.
Аноним 04/09/20 Птн 18:27:47 1797423219
>>1797387
Потому что бизнес-логика - это не про сериализацию. Как замечает анон из >>1797389 в частном случае такое делать можно, но в целом нужно разделять бизнес-логику и работу с источниками.
Прочитай про гексагональные приложения, чистую архитектуру и DDD (информации там дохуя, но всё равно).
Следует разделять инфраструктуру (принимает http запросы и передаёт их на следующий слой, маппит всё, сериализует, лазит в базу и тп) и предметную область (бизнес-процессы).
Соответственно, контроллер - это инфраструктура, всего лишь адаптер для http, он принимает запрос, парсит его, валидирует на корректность схемы (отсекает случаи "число вместо строки", "отсутствует необходимый аргумент" и тп) и вызывает соответствующий бизнес-сценарий. Потом получает ответ от этого сценария, форматирует его и отдаёт обратно.
А бизнес-сценарий - это, сюрприз, сценарий, например "создай юзера", "создай заказ", "оплати заказ", "поменяй юзеру пароль", он ничего не знает ни про http, ни про базу, он просто вызывает нужные бизнес-сущности и что-то с ними делает.
Таким образом, ты можешь вызывать один и тот же бизнес-сценарий из веба (контроллеры), из консольки (консольное приложение), на событие из кафки (обзервер), по крону и как ещё угодно.
Аноним 04/09/20 Птн 18:29:10 1797425220
>>1797387
Потому что бизнес-логика - это не про сериализацию. Как замечает анон из >>1797389 в частном случае такое делать можно, но в целом нужно разделять бизнес-логику и работу с источниками.
Прочитай про гексагональные приложения, чистую архитектуру и DDD (информации там дохуя, но всё равно).
https://walkerjordan.com/wp-content/uploads/2020/05/The-Clean-Architecture-layers.png
Следует разделять инфраструктуру (принимает http запросы и передаёт их на следующий слой, маппит всё, сериализует, лазит в базу и тп) и предметную область (бизнес-процессы).
Соответственно, контроллер - это инфраструктура, всего лишь адаптер для http, он принимает запрос, парсит его, валидирует на корректность схемы (отсекает случаи "число вместо строки", "отсутствует необходимый аргумент" и тп) и вызывает соответствующий бизнес-сценарий. Потом получает ответ от этого сценария, форматирует его и отдаёт обратно.
А бизнес-сценарий - это, сюрприз, сценарий, например "создай юзера", "создай заказ", "оплати заказ", "поменяй юзеру пароль", он ничего не знает ни про http, ни про базу, он просто вызывает нужные бизнес-сущности и что-то с ними делает.
Таким образом, ты можешь вызывать один и тот же бизнес-сценарий из веба (контроллеры), из консольки (консольное приложение), на событие из кафки (обзервер), по крону и как ещё угодно.
Аноним 04/09/20 Птн 19:26:42 1797453221
>>1797389
Потому что бизнес-логика - это не про сериализацию. Как замечает анон из >>1797389 в частном случае такое делать можно, но в целом нужно разделять бизнес-логику и работу с источниками.
Прочитай про гексагональные приложения, чистую архитектуру и DDD (информации там дохуя, но всё равно).
https://walkerjordan.com/wp-content/uploads/2020/05/The-Clean-Architecture-layers.png
Следует разделять инфраструктуру (принимает http запросы и передаёт их на следующий слой, маппит всё, сериализует, лазит в базу и тп) и предметную область (бизнес-процессы).
Соответственно, контроллер - это UI, всего лишь один из многих Middleware, он принимает запрос и вызывает соответствующий бизнес-сценарий. Потом получает ответ от этого сценария, форматирует его и отдаёт обратно.
А бизнес-сценарий - это, сюрприз, сценарий, например "создай юзера", "создай заказ", "оплати заказ", "поменяй юзеру пароль", он ничего не знает ни про http, ни про базу, он просто вызывает нужные бизнес-сущности и что-то с ними делает.
Таким образом, ты можешь вызывать один и тот же бизнес-сценарий из веба (контроллеры), из консольки (консольное приложение), на событие из кафки (обзервер), по крону и как ещё угодно. Но я так ни разу не делал, и не в курсе, что обработать пачку в 10К событий из кафки это нихуя не тот же сценарий, что при обычной работе приложения.
Аноним 04/09/20 Птн 23:58:20 1797694222
Аноним 05/09/20 Суб 14:09:39 1797982223
Аноны, я чет с регулряками затупил. В целях любопытства я заморочился парсингом 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. Почему у меня в квадратных скобках символ точки "." ничего не ищет?
Аноним 05/09/20 Суб 15:24:59 1798013224
Как заменить табы на пробелы?
Предпочитаю пользоваться табами в IDE Eclipse PDT, но тот же гитхаб их криво отображает. Если настраиваю форматтер в редакторе, то он даже в момент редактирования начинает вставлять пробелы, и меня это не устраивает выглядит как говно.
В идеале хотелось бы иметь возможность локально писать так как мне нравится, а перед тем как заливать проект была возможность прогнать и отформатировать его с нужными настройками.

Должно же быть что-то такое?
Аноним 05/09/20 Суб 17:06:02 1798094225
>>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/
Аноним 05/09/20 Суб 17:26:40 1798103226
>>1798013
Хз, IDEA автоматически табы на пробелы заменяет. Кто вообще эклипс юзает в 2020?
Аноним 05/09/20 Суб 17:52:12 1798121227
>>1798103
Если тебе нечего написать по этому кроме восхваления своей IDE, то мог бы и не стараться - я твоих советов по этому поводу не спрашивал.
Ты даже пост не прочитал толком.
Аноним 05/09/20 Суб 20:59:04 1798239228
Аноны, такой вопрос, немного копаюсь с psr-7, не пойму что в сущности представляет следующий интерфейс:
Psr\Http\Message\RequestInterface - Representation of an outgoing, client-side request. - Представление исходящего запроса на стороне клиента - это как?
Этот интерфейс представляет запрос, который я с сервера отправляю куда нибудь?

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

Аноним 05/09/20 Суб 22:22:01 1798354229
>>1798239

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

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

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

Вот я добавил файл, например, test.js в resources, выполнил "npm run dev", создался файл test.js в public с уже написанным кодом. И что дальше? Что за это код? В каком из двух файлов писать код? Зачем вообще нужно 2 файла?
Аноним 06/09/20 Вск 13:39:30 1798620236
>>1798614
Я всё пилю тупо в assets\js, потом подключаю в шаблонах. Если в Ларе есть возможность минифицировать и всячески конпелировать js и css, то не факт, что этим надо обязательно пользоваться. Будет отдел фронтенда, который на фреймворке станет писать - будем собирать, а так - если один пилишь, то нахуй это надо.
Аноним 06/09/20 Вск 13:41:05 1798623237
Аноним 06/09/20 Вск 14:00:14 1798636238
Hue9S2QZGE.jpg 83Кб, 802x616
802x616
>>1798614
ressources - для исходников, которые собираются и вываливаются дефолтным конфигом в public.
Аноним 06/09/20 Вск 16:01:52 1798714239
>>1798614
>Вот я добавил файл, например, test.js в resources, выполнил "npm run dev", создался файл test.js в public с уже написанным кодом. И что дальше? Что за это код? В каком из двух файлов писать код? Зачем вообще нужно 2 файла?

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

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

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

По flush() он проходится по списку, сравнивает поля каждой сущности с ранее сохраненной копией и определяет, какие поля изменились. На основе этих данных он генерирует SQL-запросы INSERT/UPDATE и выполняет их.
Аноним 06/09/20 Вск 22:39:37 1799096243
1599421192064.png 50Кб, 847x353
847x353
>>1799089
Спасибо что расписал. Не с собеседования, я просто очень любопытный. Начал читать пикрил про транзакции в доктрине и не понял, почему обычный persist()-flush() назвали неявной транзакцией, отсюда появилась мысль что там под капотом происходит что-то более интересное.
Аноним 06/09/20 Вск 22:55:46 1799111244
>>1799096

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

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

persist тут не при чем.
Аноним 07/09/20 Пнд 16:06:07 1799628245
Объясните зелёному, что за единица в конце документа появляется если отправлять php в котором написан html?
Я юзаю echo для вывода html.
Аноним 07/09/20 Пнд 16:43:05 1799658246
>>1799628
Это оценка кода интерпретатором. Научишься писать код получше, будешь десятки получать. Есть какой-то параметр, чтобы эти оценки скрывать в продакшене.
Аноним 07/09/20 Пнд 17:19:37 1799679247
>>1799658
Бля, у меня ведь раньше была оценка 2к+. Чё то я не в ту сторону свернул значит
Аноним 07/09/20 Пнд 17:24:41 1799681248
анчоусы, есть такая задача по тому как перенести контент данные.
мне их скидывают в формате json с какой-никакой структурой и я уже должен буду самостоятельно написать какой то плагин-мигратор который мне из этого json распарсит уже в бд.
так вот встало два вопроса:
1)пыха же ведь без проблем даст мне такую возможность чтобы я мог открыть этот json файл, прочитать, пересобрать в массив и его уже загнать в бд через тот же цикл например?
2)сейчас смотрю этот json файл и там все данные в виде:
"name": "\u0448\u043a\u0438" как пример
и это можно спокойно будет обрабатывать и ззагонять прямо вот так в базу чтобы мне это нормально потом прочесть или же надо как то преобразовывать ?
Аноним 07/09/20 Пнд 18:28:44 1799718249
>>1799681
Ну ты должен по крону видимо запускать консольную команду или просто скрипт который будет делать импорт в БД

Ну а юникодовские крякозябры не проблема, почитай про флаги у функций json_encode/decode, если надо в кириллицу красивую перегонять
Аноним 07/09/20 Пнд 19:58:51 1799779250
>>1799628

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

>>1799681

> \u0448\u043a\u0438

Это нормальный способ кодировать Юникодные символы, они превратятся в буквы после json_decode.
Аноним 07/09/20 Пнд 21:13:12 1799886251
Аноним 08/09/20 Втр 00:35:29 1800097252
ksnip20200908-0[...].png 79Кб, 499x405
499x405
ksnip20200908-0[...].png 59Кб, 1388x183
1388x183
ksnip20200908-0[...].png 10Кб, 456x75
456x75
ksnip20200908-0[...].png 67Кб, 836x292
836x292
>>1799779
>>1799628
хуй знает что конкретно показывать. выхлоп вот такой
Аноним 08/09/20 Втр 01:09:44 1800116253
Делаю тестхаб и дошел до создания новых тестов пользователем. При создании нового от юзера приходит большой ассоциативный массив с сложной структурой, который содержит все данные по тесту(вопросы, ответы, всякая общая инфа и т.д.), и функция проходится по нему, валидируя и добавляя в базу вопросы и ответы. И вот тут я немного сомневаюсь, насколько это хорошо с точки зрения архитектуры и читабельности кода. Не лучше ли разбить этот большой массив, который приходит от юзера, на несколько маленьких, которые будут содержать по отдельности вопросы, ответы и т. д. и затем их уже загружать в сервис, который редактирует и создает тесты?
Аноним 08/09/20 Втр 02:32:25 1800133254
>>1800097
Вот на последнем скрине оценка кода, она после всего остального выводится.
А то что внутри body это ты где-то нахуевертил.
Аноним 08/09/20 Втр 10:30:08 1800323255
>>1800133
Он ещё походу под виндой запускает код, на линуксе уже давно численная система A-F есть
Аноним 08/09/20 Втр 14:11:31 1800610256
анонсы, скажите будет ли нормально идти на SoF спрашивать вопрос по ебучей joomla ? в гугле естест ниче не нашел
inb4: джумла говно
Аноним 08/09/20 Втр 14:58:11 1800678257
>>1800097

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

Тебе надо убрать require из return. Можно вообще убрать return.
Аноним 08/09/20 Втр 15:04:30 1800682258
>>1800116

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

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

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

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

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

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

Объекты из функций по ссылке передаются?
Аноним 08/09/20 Втр 17:45:11 1800924260
>>1800868

Да, объекты передаются в функцию и из функции "как бы" по ссылке. Копирования не происходит.
Аноним 08/09/20 Втр 20:28:02 1801068261
>>1800868
а че это за паттерн?
мимо джун
Аноним 08/09/20 Втр 20:51:23 1801084262
>>1800610
Нахуя в 2020 джумла нужна?
Нормально, но думаю хуй кто ответит.
Аноним 09/09/20 Срд 01:04:42 1801278263
>>1801084
Ну если долбоёб и хочется заняться полной хернёй (а чего, альтернатив-то джумле нет), то это оптимальный вариант.
Аноним 09/09/20 Срд 08:13:26 1801349264
Аноны, кто глубоко разбирался в потрохах slim 3 подскажите - где у него точка входа в роут , я чет нихера не пойму пока что.

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

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

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

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

Если кто в курсе - набросайте принцип действия.
Аноним 09/09/20 Срд 09:46:47 1801375265
>>1801084
>Нахуя в 2020 джумла нужна?
понятия не имею
>>1801278
так то много норм проектов в конторе на нормальном стеке на которых работаю, но щас спихнули этот кал. поэтому надо разбиратьсся
Аноним 09/09/20 Срд 18:40:46 1801862266
Изучаю ларавел, пытаюсь сделать логин, Auth:attempt() перенаправляет на отрицательный результат.
Даже не представляю почему не получается и не знаю как посмотреть, если можно вообще.
Есть подозрение что он Auth не туда смотрит, хотя я поменял в config/auth.php ,в разделе User Providers, table => на название нужной таблицы (driver => database оставил).
Кто-нибудь может подсказать куда посмотреть?
Аноним 09/09/20 Срд 19:23:44 1801944267
>>1801862
Auth:attempt() использует стандартный гвард "auth" по дефолту. В документации читай о том где и что ты мог изменить, там разные вариант, в auth мидлвэйре, и в провайдере аутентификации есть настройки.
Смотри по каким полям ты лоигруешься, том по дефолту email и password
Аноним 09/09/20 Срд 20:28:33 1802018268
>>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 - тогда все было бы очевиднее.
Аноним 09/09/20 Срд 20:41:03 1802030269
Нормальная ли практика пихать приходящие от клиента данные в публичные поля контроллера в конструкторе? Сегодня такое увидел и немного подвис.
Аноним 09/09/20 Срд 21:55:53 1802135270
>>1801349

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

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

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

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

>>1802203

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


Бекенд можно делать на чём угодно. Хоть на java хоть на python хоть на руби-на-рельсах, хоть на go, хоть на node js, хоть на пыхе. Вон, половина(или около того) сайтов работает вообще на вордпрессе, и ничего. Вопрос выбора инструмента нельзя задавать в общем, надо в частных случаях смотреть почему тот или иной взят за основу.
Аноним 10/09/20 Чтв 10:29:37 1802443276
>>1802421
>фронтенд на чём то КРОМЕ html+css+-js?
так можно же на других языках писать которые потом скопилятся тебе в js. только не понятно нахуя это надо
в питон треде зимой кидали ссыль на какой то сайт где был фронт на питоне написан. но там дакая лажа и дичь устаревшая лет на 10, что лучше бы вообще не делали этого
Аноним 10/09/20 Чтв 11:15:49 1802460277
>>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',
],

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

Что я упускаю?
Аноним 10/09/20 Чтв 12:37:26 1802525278
ананасы, пытаюсь разобраться с mail() на своем локальном компе. стоит апач, в php/apache2/php.ini настраиваю естесн. делал по этому гайду http://aleksandr.ru/blog/fiktivniy_sendmail_dlya_linux/ и сука она нихуя тупо не работает блять. создал на сайте testmail.php , перехожу на него и результат функции mail() возвращает мне false. в чем мб проблема то ? куда копать ?
Аноним 10/09/20 Чтв 14:03:48 1802571279
>>1802353
Вопрос какой то тупой.
Аноним 10/09/20 Чтв 15:24:02 1802652280
>>1802353
В общем-то не нужен, как не нужны и прочие 90% языков. В конце-концов, любую задачу можно решить на любом языке общего назначения, мог бы быть один язык для всего.
Но человечество так не работает, мы всему создаём альтернативы. Веусовщина, какие-то уникальные требования, по приколу - есть много причин, которые порождают множество языков, на которых люди пишут множествосхожих фреймворков, библиотек так далее.
Я тут хотел привести пример с розетками или кабелями для телефонов, чтобы ты понял, что всегда есть ещёодин стандарт или реализация,но внезапно вспомнил, что даже на метрическую систему ещё не все страны перешли.
Так что выберай язык под задачу и далее на свой вкус, на этом всё.
Аноним 10/09/20 Чтв 15:25:54 1802655281
>>1802030
Хуйня. Состояние приложения не должно зависеть от контекста конкретного запроса.
Аноним 10/09/20 Чтв 15:46:45 1802682282
>>1802525
ну же анон, помоги. уже второй день ебусь
Аноним 10/09/20 Чтв 15:46:49 1802683283
>>1802443
>так можно же на других языках писать которые потом скопилятся тебе в js
>потом скопилятся тебе в js

Ну и нахуя тогда? В чём профит?
Аноним 10/09/20 Чтв 15:48:51 1802685284
>>1802652
Тогда чем же PHP лучше и в каких задачах?
Аноним 10/09/20 Чтв 15:51:30 1802688285
>>1802685
Прост на старте, на нём не надо думать про рантайм по сути(всё равно запрос-ответ-смерть процесса).
Аноним 10/09/20 Чтв 15:56:51 1802695286
>>1802685
Он лучше по скорости разработки. Хотя ответ должен быть более комплексным.
Есть вот джава или шарп, строгие и очень многословные (однако выразительные весьма) языки.
Есть питон или жс - не так выразительны как джава/шарп, но сделать можно тоже самое, местами даже лучше, а что главное очень сильно быстрее.
И есть пхп, где-то по середине выразительности, и что важнее, хоть и вытекает из предыдещго - быстрее по скорости разработки.
По скорости тут не оч все, изза модели родился-сдох, сам по себе язык очень быстрый сейчас, но модель исполнения пускает это все по пизде (и нежелание разрабов делать коробочную асинхронность).
Ну и все выше сказанное относится к разработке на фреймворках или на голом пхп (если опытными людьми), но не относится к разработке на цмс разных (вордпресс, друпал, битрикс и тд). Ну или проще - не относится к разработке на пхп по старым гайдам. Это вообще другая сфера, она даже к программированию почти не относится. Чуть чуть пересекается только, потому и популярна так. Почти все норм разрабы предпочитают зрелую разработку, но на всяких цмсках такая тонна всего понаписана, что пыха от этого уже не отмоется наверно.
Аноним 10/09/20 Чтв 16:16:54 1802712287
>>1802695
В целом соглашусь, но сентенцию про скорость разработки надо раскрыть детальнее.
Если писать на php "как надо", с типами, паттернами, слоями и так далее, то скорость написания будет несколько медленнее, но зато приложение не схлопнется в коричневую дыру после года разработки. Но при этом скорость будет очень близка или даже равна скорости разработки на джаве или шарпах.
А если писать на отъебись, чтобы побыстрее, забить на типы и архитектуру, то да, написание кода первое время будет быстрее.

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

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

Аноним 10/09/20 Чтв 19:09:15 1802887289
Пхп код в теге <script> - это ведь в 2к20 на новых версиях языка не должно встречаться?
Аноним 10/09/20 Чтв 20:16:21 1802959290
Аноним 10/09/20 Чтв 20:29:05 1802990291
>>1802887
Это способ сразу гидрировать данные для твоего реакта без лишнего Аякс запроса, ничего плохого не вижу
Аноним 10/09/20 Чтв 20:36:17 1802994292
>>1802959
>>1802990
Ну просто помимо человека, который так пишет в каком-нибудь пхпшторме или что там это считает нормальным, есть я - и я захожу немного поправить фронтенд и уйти заниматься другими делами, поважнее, а vs code хуяк, и форматирует код в теге script, как js скрипт, со всеми вытекающими. И тут есть 2 варианта развития событий - я либо не знаю, о том, что где-то произошла такая хуйня и ничего не исправляю, а потом люди охуевают с того, что оно всё само сломалось, либо я сижу и дрочу этот код, пока всё не поправится. Выключив перед этим prettier и прибуду, которая пхп форматирует.
Ну и я мельком глянул документацию пыхи, там пишут, что с 7й версии так делать не надо. Я конечно не секу, но как по мне, тег скрипт для жс, а не для пхп.
Аноним 10/09/20 Чтв 21:14:45 1803053293
>>1802353
>>1802685
>>1802695
>>1802712
Нахера эти платиновые извечные вопросы нужны. Во фронт тредах говорят что фронд для вкатывальщиков, но вот потом нужно обязательно что-нибудь нормальное учить! В ява треде говорят что это устарело и надо переходить на асп, в си тредах говорят что ява-то огого, там где-то хайпят всякие языки. Везде одни и те же вопросы, везде одно и тоже. Зачем это все. У соседа всегда трава зеленее будет.
Аноним 10/09/20 Чтв 21:27:20 1803056294
>>1803053
>У соседа всегда трава зеленее будет.
Не видел еще чтобы где-то пхп нахваливали, кроме как в среде пыхеров.
Аноним 10/09/20 Чтв 21:33:03 1803058295
>>1803056
Я не видел дочерей Мела Гибсона, и что.
Аноним 10/09/20 Чтв 21:57:29 1803074296
>>1803056
потому что кроме пыхеров никто не в курсе, что PHP ВНЕЗАПНО единственный скриптовый язык с нормальным ООП здорового человека
Аноним 10/09/20 Чтв 22:06:09 1803078297
>>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"

Аноним 10/09/20 Чтв 22:23:42 1803085298
>>1802353

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

И почему ты решил, что писать бекенд на JS эффективнее? Нужны аргументы.
Аноним 11/09/20 Птн 00:15:40 1803212299
>>1802994
>есть я - и я захожу немного поправить фронтенд и уйти заниматься другими делами, поважнее, а vs code хуяк, и форматирует код в теге script, как js скрипт, со всеми вытекающими.
Честно не сильно представляю что там может сломаться, я у себя не замечал чтобы вскод в php файлах у меня жс вообще форматировал (может я отключил это, хз)

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

>Я конечно не секу, но как по мне, тег скрипт для жс, а не для пхп.
Как по мне, то если у тебя инлайновый жс никогда не меняется, то имеет смысл ебануть этот кусок сразу в бандл и выполнять по условию
Аноним 11/09/20 Птн 01:18:11 1803264300
>>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 даёт больше возможностей, как язык, но несколько требовательнее к разработчику.
Аноним 11/09/20 Птн 01:18:56 1803266301
Аноним 11/09/20 Птн 07:12:48 1803336302
>>1803085
то что нода менее удобна для "обычных" приложений - это очевидно.
Там где на пхп без единой зависимости нуб накидает сайтец, даже динамический с базой. Нуб на ноде начнет сосать бибу на этапи парсинга входящего бинарного потока от банальной post-формы. В ноде такая банальная задача сразу тянет за собой понимание потоков, буферов, событий и их обработчиков, асинхронности. А еще и банально распарсить этот запрос нужно, выдрать из него файлы и все такое.

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

>>1803264

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

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

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

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

>>> Если мне не изменяет память, шаблнизаторы в JS послабее того же твига.
Думаю имеентся ввиду серверная шаблонизация mustache или pug
Аноним 11/09/20 Птн 09:51:09 1803386305
>>1803339
ну так ты отключи эту хуйню. есть вещи которые ты можешь ебануть туда только инлайном как анон выше описал. например мне с бека прилетают точки для карты которые надо парсить на js . и как предлагаешь мне это делать? писать на бэке отдельный ajax-контроллер для того чтобы он мне эти точки выгружал и еще раз гонять его ?
Аноним 11/09/20 Птн 11:02:49 1803425306
>>1785871 (OP)
как не быть долбаебом и начать твой курс?
Аноним 11/09/20 Птн 12:51:11 1803519307
>>1802994
>>1802887
Не слушай всяких долбоёбов. В 2020 не пользоваться шаблонизаторами-уебанство, так что у тебя никаких ни html ни js элементов в коде не должно быть.

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

Аноним 11/09/20 Птн 16:58:28 1803754312
>>1802460

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

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

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

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

Простые роутеры я сам конечно писал, где входящий url просто парсится регуляркой.
Аноним 11/09/20 Птн 22:36:33 1803996317
>>1803841

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

Но по моему опыту, даже в системах на Симфони с Twig приходится действовать через поиск по имени класса или тексту. Так как шаблонов там могут быть тонны и это самый быстрый способ найти элемент. Хотя, конечно, криворукий верстальщик и проект на Симфони способен испортить.
Аноним 11/09/20 Птн 23:05:32 1804016318
>>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.
Аноним 12/09/20 Суб 03:34:16 1804126319
>>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, как и в питоновой джиндже, готемплейт или где-либо ещё.

Аноним 12/09/20 Суб 03:49:51 1804131320
>>1803794
Максимально двачую. Сам несколько лет "разрабатывал" на cmsках, в том числе были очень крупные интернет-магазины уровня Эльдорадо (не русские, были субподряды от европейских аутсорсеров).
Так вот, цмски всегда заточены на то, чтобы наклацать себе сайтик мышкой и потом мышкой же им управлять. В итоге, вся логика как ядра, так и модулей заточена на какой-то определённый флоу, что пользователь может накликать и зачем (что в базе от таких подходов твориться - не спрашивай. Про нормальные формы эти ребята только слышали). И пока ты действуешь в тех же рамках (накликиваешь поля, подсовываешь шаблончики, настраиваешь триггеры, ставишь модули для кеша и тп) всё прекрасно. А потом клиент хочет, к примеру, динамическое ценообразование в зависимости от ползунка (скажем, баррели нефти продаёт), а у тебя в цмске екоммерц-модуль работает в стиле "1 продукт типа ААА стоит 5$. Сколько продуктов добавить в корзину?" и 0.9 баррелей ты не насчитаешь никак - и всё внезапно коллапсирует в сверхкоричневую звезду, с матами и борьбой с cmsкой в её же кишках, которые на нестандартную логику ну вообще не рассчитаны.
И таких случаев возникает намного больше, чем может показаться, на очень средненьком проекте (от 600человекочасов) борьба бобра с ослом может занять от трети всего времени! И это не считая шквала неожиданных багов после всего этого дерьма. И всё это из-за того, что вместо того, чтобы взять бизнес-логику и просто реализовать её в коде (через симфони, что угодно), приходится ломать, гнуть и шлифовать логику цмски и её плагинов, чтобы оно приняло приблизительную форму той самой желательной бизнес-логики.
И это я ещё не упоминал дохерищу конфликтов между плагинами самой цмски, умение обходить которые - это отдельный сорт чёрной магии.
Аноним 12/09/20 Суб 07:26:52 1804155321
>>1803603
> wordpress/bitrix сверхлюди?
Я тута. Работаю в конторе, которая пытается выбиться в люди пытается делать хорошо, когда бюджет это булка с изюмом, с постепенным повышением ценника для будущих клиентов. В принципе работает, но это нужны такие опущи как я, которые готовы за еду стартануть в сфере. Но я что-то уже всё и похоже она лучше, чем многие в плане задач, в которые я не попал. Возможно когда-то и придёт к успеху, но я предпочту уйти на х3 к зп в уже успешную контору.
В общем за год задач в стиле "передвинуть кнопку" я не встречал, но иногда надо было целиком что-то адаптивным сделать - обычно футер или хэдер, делается это за час-два неча торопиться. Несколько сайтов верстал и натягивал на битрикс - довольно интересно по первому разу, но всё быстро сводится к копированию шаблона компонента news.list и его кастомизации. Поначалу верстал блоки для сайтов, когда только стажировался - верстал откровенное говно, но на уровень конторы оно тянуло - теперь верстаю пиздато и ситуация обратная.
Ещё есть 2 долгосрочных направления - собственный шаблон по-моему сначала стоило делать шаблон поменьше, что-то специализированное - для жкх например, где конкуренции меньше и сайт конторы, это вечные задачи, они не закроются, хоть обосрись, надо просто постепенно делать и стараться делать не говно.
Ещё остопиздевший тип задач - нерабочие или вовсе отсутствующие формы обратной связи - тоже быстро сводится к дрочеву одного и того же, а если нет - то лучше бы да.
>>1803767
Подтверждаю.
А ещё в битриксе обычно предсказуемо стили лежат в папке шаблона в файле со всеми стилями шаблона.
Аноним 12/09/20 Суб 10:41:02 1804232322
как вам лара8?
Аноним 12/09/20 Суб 11:55:32 1804283323
>>1804126
>>А что такое "обычное" приложение?
Это приложение для которого пхп более чем достаточно, а остальное оверхед.

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

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

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

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

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


Аноним 12/09/20 Суб 12:10:45 1804290324
>>1804283
>отрицательно отнесся к тому что в пхп ввели стрелочные функции
Просто не то чтобы они пиздец какую погоду делают, в то время как реально важнейших вещей в пхп еще целый ворох не достает. Сахар оно канеш хорошо, но больше хочется хорошего такого подъема по качеству самого языка, сахарок бонусом (как в свое время с 7 было, которая язык практически с дна спасла).
Аноним 12/09/20 Суб 12:51:52 1804313325
>>1804290
>>Просто не то чтобы они пиздец какую погоду делают
Не, он выразился как то в духе "дай Бог их не введут в стандарт", хз ему чем они не угодили.
Аноним 12/09/20 Суб 13:14:14 1804331326
>>1804313
Ну я так же могу выразиться про введение атрибутов в том виде, в ктором они сейчас. Может он чтото подобное имел ввиду (говенный синтаксис).
Аноним 12/09/20 Суб 13:21:45 1804336327
Что вообще должна содержать в себе модель ActiveRecord? Я могу её представить только как для получения или сохранения данных. А вот обрабатывают ли в них данные, которые возможно потом будут сохранены? И можно линк на гит, где посмотреть это(стандартную модель в проектах) можно?
Аноним 12/09/20 Суб 13:31:25 1804345328
>>1804336
Если сам реализуешь весь АР, то нужна прямая связь с хранилищем с возможностью построения всех круд операций (для скл это построение запросов будет). Если просто спрашиваешь что в модели должно быть - только то, что описывсает саму модель (поля) и не привязанная никаким образом к базе логика.
Знаю, странно звучит, вроде как с АР удобно как раз логику пилить прямо так, но это как раз то, что делает Ар антипаттерном.
Аноним 12/09/20 Суб 13:33:20 1804347329
>>1804345
Логику в сервисы/валидаторы отправлять?
Аноним 12/09/20 Суб 13:33:37 1804348330
Аноним 12/09/20 Суб 14:04:23 1804370331
>>1804331
Думаю что его пугало то что стрелки автоматом будут захватывать контекст, а не только то что в use() прописано. хз в общем, я и на JS пишу, так что мне это по душе.
Аноним 12/09/20 Суб 18:58:21 1804570332
>>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 = () => {}.
Аноним 12/09/20 Суб 19:09:06 1804578333
>>1804570
>проекты уровня Яндекса
Ох уж эти проекты уровня яндекса. Там до сих пор жиквери наравне или даже больше реакта используется. Размер и репутация компании нихера не значит, что там код не дно.
12/09/20 Суб 19:23:02 1804586334
>>1804578
Удваиваю этого господина. У меня с галеры чел ушел в яндекс в 2019м, работал с трекером вроде, такой то фидбэк от него шел про дремучий пиздец, что даже не очень верилось сначала, но позже от еще одного знакомого из Казани точно такие же отзывы услышал. Тимлид 40 летний дегрод, который все эти "новомодные" js-фрэймворки знать не хочет и везде проталкивает свой велосипед, написанный ими почти 10 лет назад. При этом все это говно увязывалось с соседями, которые параллельно пилили микросервисы для них и свой фронт делали на реакте. Даже если они вполовину приврали, мне дико, что такая хуйня может быть в крупных корпорациях.
Аноним 12/09/20 Суб 19:42:53 1804607335
>>1804586
Именно в крупных чаще и происходит.
Аноним 12/09/20 Суб 21:10:59 1804719336
>>1804347
>>1804348
>Логику в сервисы/валидаторы отправлять?
Please, no! Какая к чёрту логика в валидаторах.
А что касается логики в сервисах - это рабочий, но неудачный вариант. Логику лучше писать прям в моделях. Гуглите Anemic model vs Rich Domain model
Аноним 12/09/20 Суб 22:32:02 1804778337
>>1804719
>Какая к чёрту логика в валидаторах.
Это вообще пушка. Приведи пример валидатора без логики.

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

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

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

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

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

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

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

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

Аноним 13/09/20 Вск 13:24:36 1805119352
Нравится PHP больше чем Java. Пугает, что через полгода когда буду вкатываться на джуна ларавелиста - буду по итогу битриксы и вордпрессы чинить. Так оно на рынке по итогу или не так?
Аноним 13/09/20 Вск 13:30:08 1805123353
>>1805119
Так. Просто посмотри вакухи.
Аноним 13/09/20 Вск 13:34:21 1805129354
>>1805123
А в джаву я так не успею за полгода вкатиться. Чего стоит только Java EE и спринг. А я студентота, мне на работу надо до весны успеть чтобы начать кушать еду.
Аноним 13/09/20 Вск 13:50:45 1805150355
>>1805129
>А я студентота, мне на работу надо до весны успеть чтобы начать кушать еду.
Ну тогда в джаваскрипт тред загляни.
Аноним 13/09/20 Вск 14:00:11 1805157356
>>1805150
Жс и фронтенд не интересны.
Аноним 13/09/20 Вск 14:45:16 1805191357
>>1804570
Сам пишу на фремфорках, как же вы заебали со своим "фреймфорк, куча макак". Фреймворк за вас писать код будет или установил фремворк и проект готов? Макаки часто пишут мимо фрейморков: гуглить как в доктрине делается union? А хуй, сейчас сырой скл напишу. В этом говне без документации потом не придется разбираться? Что происходит с каждым проектом на симфони через год? Куча заброшенных бандлов, куча самописных велосипедов.
Аноним 13/09/20 Вск 17:48:38 1805360358
>>1804795

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

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

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

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

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

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

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

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

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

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

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

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

В общем, я наверно, путанно объяснил, но твой подход неправильный. Хотя я такое видел, но так делают из-за неумения разбить логику на части или слои: отдельно у нас валидация, отдельно обработка запроса и отдача ответа. А твой подход нарушает это разделение ответственности.
Аноним 13/09/20 Вск 18:49:35 1805451360
Какой код возвращать при ошибке от необработанного исключения? 503?
Аноним 13/09/20 Вск 18:56:01 1805461361
http-5xx.PNG 44Кб, 596x685
596x685
>>1805451
Тебя в гугле забанили или ты по английски читать не умеешь?
Аноним 13/09/20 Вск 19:01:09 1805467362
>>1805360
>Это учебный тред.
Двачую. Это продвинутый подход из области DDD. Для простых проектов а-ля CRUD это всё слишком сложно и нафиг не надо. Но для сложных - только так

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

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

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

Ну и как вишенка на торте - ОРМ, которая при получении данных из базы ничего не валидирует. И ты в принципе не можешь знать в валидном ли состоянии модель, полученная из репозитория.
Аноним 13/09/20 Вск 19:27:43 1805503364
>>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 в метод модели аргументом
>ОРМ, которая при получении данных из базы ничего не валидирует.
вот именно поэтому так важно изначально не допускать записи невалидных данных в БД, чтоб потом быть уверенным, что всё что из БД извлекается - всё всегда валидно
Аноним 13/09/20 Вск 19:47:09 1805518365
>>1805503
Начались маневры.
У тебя есть RegisterUserForm с пятью полями. Есть модель User. У User должно быть имя и фамилия на русском и уникальный email. Если что-то заполнено неправильно, то нужно как все нормальные люди делают, в конкретном поле написать что оно неправильно заполнено, и как нужно заполнить правильно.

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

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

А если сломался сам объект при создании, то просто залоггировать входные данные, потом посмотреть лог и исправить баг.
Если количество моделей будет хотя бы пол сотни поддерживать этот пиздец с "продуманной иерархией исключений" будет просто нереально.
Аноним 13/09/20 Вск 20:15:01 1805549366
Есть два вопроса от нюфага:
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 можно включать сразу несколько значений? Или подобную задачу решают как-то иначе?
Аноним 13/09/20 Вск 20:32:20 1805575367
>>1805461
Нет, я тупой просто. 500?
Аноним 13/09/20 Вск 20:57:04 1805599368
>>1805549
>1. Как точно работает DatePeriod?
Очевидно что ты обосрался с часовыми поясами. Вот пример прямо из документации DatePeriod https://3v4l.org/bWeOq . Как видишь все работает.

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

Вообще это азы. Скачай себе любой учебник по SQL и там все это будет расписано.
Аноним 13/09/20 Вск 20:57:52 1805601369
>>1805575
Возвращай 511, думаю норм будет.
Аноним 13/09/20 Вск 21:12:09 1805612370
>>1805599
>Очевидно что ты обосрался с часовыми поясами.
Но ведь я в начале объявил свой часовой пояс с помощью
date_default_timezone_set, и время в $dateStart выводится моё.
Аноним 13/09/20 Вск 21:15:00 1805614371
>>1805612
Ты сниппет видел? Добавь туда свои данные и проверь.
Аноним 13/09/20 Вск 21:17:38 1805616372
>>1805599
Получается DatePeriod не включается конечную дату? Чтобы он её включал, нужно модифицировать конечную дату на +1 день?
Аноним 13/09/20 Вск 22:07:45 1805666373
Вот предположим я нашел работу и работаю с yii2. Сложно ли будет перейти на другой фреймворк типа симфони или ларавел через какое-то время, пока копится коммерческий опыт? Или это по факту будет тоже самое что перейти на какой-нибудь другой язык и такой опыт особо не учитывается?
Аноним 13/09/20 Вск 22:28:22 1805676374
>>1805666
проще чем на другой язык, но всёж не так и просто
Всем надо чтоб ты пришел, и мог сразу со старта херячить таски. А для этого, как бы, фреймворк надо знать
Проще всего сделать какой нить пет проджэект на symfony, параллельно работе на yii, и тогда проблем возникнуть не должно
Аноним 13/09/20 Вск 22:50:12 1805690375
>>1805666
На ларавель легко относительно потому что много общего на самом деле, на симфони сложно
Аноним 13/09/20 Вск 23:46:13 1805724376
>>1805451

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

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

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

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

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

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

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

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

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

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

Э, не. Возможна ситуация, что правила меняются со временем, и то, что было валидным, стало невалидным.
Аноним 14/09/20 Пнд 00:08:17 1805736379
>>1805549

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

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

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

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

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

Собственно сам вопрос, подскажи, как решить эту задачу, без наследования, с использованием композиции или агрегации, у меня совершенно нет идей.
Правильно ли я понимаю, что любое решение задач, где применяется наследование, можно заменить агрегацией/композицией, кода станет больше, но он будет более гибкий ?
Аноним 14/09/20 Пнд 09:16:56 1805861382
>>1804016
Спасибо за ответ, я по возможности разбираю код слима.
Сейчас в пакете fast-route. Мне этот пакет кажется сложноватым.
Ответь на такой нубский вопрос - в фаст-роут есть вариант настройки кэширования, я не оч хорошо понимаю что это есть вообще.
фаст роут кэширует маршрут? как это работает?