Предыдущий тред был тут: >>3254950 (OP)
Старые треды тут https://2ch.hk/pr/arch/ (М) (искать по слову php), а также на архиваче и в гугле по словам по словам "клуб изучающих PHP".
С чего начать - основы PHP
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook . Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный справочник ( https://www.php.net/manual/ru/langref.php ). Или все сразу.
Если что-то непонятно, запости код и попроси подсказку или поищи задачу в архиве тредов.
Какой редактор использовать
Простые задачки можно решать в онлайн-песочницах вроде https://onlinephp.io/ , https://paiza.io/en/projects/new?language=php , https://www.programiz.com/php/online-compiler/ , но для программ посложнее лучше установить редактор. Есть (дорогая) IDE PhpStorm, есть бесплатный Netbeans и VSCode, условно-бесплатный Sublime Text. Чтобы в последних получить автодополнение для PHP, нужно установить и настроить PHP language server.
Вот инструкции по установке PHP на компьютер: https://github.com/codedokode/pasta/blob/master/soft/php-install.md
Гайд по командной строке: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Что изучать дальше
Зная лишь основы PHP, сайт ты не сделаешь и работу не найдешь. Обычно от начинающего требуют чуть-чуть больше:
PHP, ООП, основы HTTP, HTML/CSS (основы верстки), JS, SQL, PDO, MVC, git, composer, какой-нибудь фреймворк (Laravel или Symfony), основы автоматического тестирования, основы linux, английский.
Вот неофициальный роадмап (карта того, что можно изучать): https://miro.com/app/board/o9J_lbUUBBQ=/
По многим из этих тем у нас есть уроки или задачки:
- для понимания, что такое веб-сервер, прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- для понимая MVC, работы с БД и формами, реши задачу про студентов, в ней много полезных советов: 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
- почитать про паттерны можно тут https://designpatternsphp.readthedocs.io/ru/latest/ (если ты не изучил ни одного фреймворка, то это будет рановато). Если хочешь увидеть примеры использования паттернов в реальном коде - ковыряй исходники Симфони, например Symfony Forms. Ну и скажем честно, начинающему без опыта, который не видел сложный код, паттерны понять будет сложно.
- для улучшения английского можно читать news.ycombinator.com - там много статей на тему IT.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- задачи на HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- хороший учебник по JS: https://learn.javascript.ru/
- задачи на 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/
- задачки на SQL: https://www.sql-ex.ru/ (нужна регистрация), https://sql-academy.org/ru/trainer и немного наших задачек: https://github.com/codedokode/pasta/blob/master/db/databases.md
Что еще почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- https://phptherightway.com/
- Книга: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книга: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- Про Git: https://git-scm.com/book/ru/v2
- Задачи на алгоритмы: https://codeforces.com/problemset
Дополнительно
- скачать учебник: зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Code -> Download ZIP, распакуй на рабочий стол и открой index.html
- что будут спрашивать на собеседовании, если 0 опыта - будут гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- сколько времени надо изучать все это? - все зависит от тебя, в районе 24-48 месяцев
ИДЕ для пхп мне сделай бесплатную
Ну ты понел
В нетбинсе есть бесплатная пыха иде. Только там плагины для симфони и пр устарели. Но они опенсорсные возьми и сам пофиксь.
>Вы даже иде бесплатную сделать не в состоянии. О чем вообще ты говоришь?
Маня, учись ездить на вс коде с плагинами, если не в состоянии скачать шторм бесплатно без регистрации
Мне приходится в блокноте писать из за того, что жидбрейнс монополисты и мрази.
Реализацию на пыхе можешь здесь посмотреть https://github.com/felixfbecker/php-language-server
Почитать как на голеге писать парсер в книжке Writing an interpreter in Go
Есть VS code and sublime
>на голенге
Чтобы на нем писать нужна ИДЕ. А тут, сюрприз, жидбрейнс тоже монополисты ебаные. Да они на всех яп монополисты, кроме C/++/#, JS/TS и все, нахуй.
Нихуя не понимаю.
Особенно слоты. Вот переменная $slot. И что дальше-то? Что она из себя представляет? Какие-то строчки html-кода? А в какой части кода нужно определять значение этой переменной? Да и вообще я не понял как это руками применять. Когда создается компонент на основе классов, то создается пхп класс и файл представления. Класс немного понял зачем, а представление зачем? Чтобы объявить там тег компонента и через атрибуты html передать значения переменных или что...
Все, я понял.
Но опять же от опыта зависит. Тут видно что джуна ищут или миддла который не знает сколько стоит миддл
нужно будет организовать впн сервис (Сайт с управлением openvpn)
я бы сделал это за 12*5 часов, сейчас я инвестор, понимаю что двачеры дауны и даю месяц
Фронт и бек на php8.2+, mysql. (nginx, php-fpm, mariadb, debian)
если не можешь в логику - не пиши.
мамкины фрилансеры хотят дохуя, поэтому здесь
телега @xvidis
Мускулы. Таскать коробки
А с хуев ему стать не актуальным
У меня сейчас аутентификация проходит так: проверяется куки на наличие токена, если его нет, то редирект на страницу ввода пароля, если пароль верный, устанавливается куки с токеном. Мб нужно не куки использовать, а сессию? Я никогда не работал с сессиями и не понимаю зачем они мне нужны... Никогда не было так, чтобы я сидел и такой: "Тут точно нужна сессия". Как я понимаю, сессия и куки это способ системе рассматривать несколько запросов к сайту под одной личностью, отличие в том, что куки проще и хранятся в браузере, а не на сервере.
Куки можно перехватить.
>Никогда не было так, чтобы я сидел и такой: "Тут точно нужна сессия"
Может это издержки фреймфорка, но у нас в проекте аутентификация всегда начиналась с сессии на бэке. Это потом уже, по мере расрастания проекта, добавлялись jwt в куки.
>>1008826 (OP)
Я использую Xdebug в PHPStorm. Во время дебага я хотел бы найти, когда происходит присвоение какой-то переменной или элементу массив значение 'Участвует в акции'. То есть проблема в том, что я не знаю где именно это происходит и куда записываются переменные. Можно ли как-то найти то место, где происходит присваивание какой-то переменной, свойству или элементу массива значением 'Участвует в акции'?
Типа поставить условие, если любое хранилище информации получает значение 'Участвует в акции', тогда сделай стоп?
Текст получается из БД, поэтому по тексту в проекте не получится найти. А проект легаси, поэтому сложно дебажить
А также что означает ":", например, docker run -d -r /host/dir:/container/dir test/webserver?
А также то, что означает "монтировать" в контексте томов docker.
У меня недавно так получилось, что я клонировал один такой репозиторий с bitbucket и у меня самостоятельно скачался торрент + открылись страницы с криптой и торрентом. Что делать с этой хуйней? Я ньюфаня. Перенести инструменты разработки в виртуальную машину и только там кодить?
Нет, нельзя
Пиздец, уже не могут стек вызовов просмотреть и пробежаться по нему, я хуею с вас
Надо было ставить Линукс
без опыту анрил думаю
звали на стажку в начале 23, на тот момент изучал 5 месяцев примерно, но очканул условий и отказался. Потом вышел в другую контору через полгода примерно(никак не выйду теперь).
з.ы. был прекол - позвали не тех собес, лясим-трясим, все ок, тимлид сказал что ему нравятся ответы. Но в потом спросил готовился ли я к собесу, типа слишком хорошо отвечал. Я честно сказал что не готовился, слишком дохуя всего себе поставил в план изучения. Обещали написать и конечно нихуя не пишут уже неделю.
Вот как блять с такими - плохо отвечать - плохо, хорошо отвечать - тоже плохо. Почему в этой сфере все такие ебненькие?
Испугался что ты его подсидишь
Все решил демпинг. Нашли кандидата за еду, который готовился к собесу, потому что ему очень нужна эта работа.
Все просто.
Если собес на сеньку, то нужно изображать занятость и вообще не тратьте мое время у меня каждая минута это огромные бабки, которые вам только снятся .
Если на мидла. То нужно говорить что еще работаешь за хорошую зепку, но хочешь роста в компании, а на текущем месте его нет.
Если на джуна, то нужно показывать что очень хочешь работать и учится 27/7 хоть за еду
>менее чем за полгода
Вводные какие? Если полный ноль, то нет. Если есть опыт, то опять же какой.
Интересно что сейчас набирает популярность тезис что пыха === изи вкат в it.
Вроде всегда продавцы курсов питон доили на эту тему. Но тут не в рынке дело а что у самого питона почему-то считается, что низкий порог вхождения, в цыганских схемах для обучения это важно чтобы вкатуну пыль пустить типа смотри прогресс пошёл
>всегда продавцы курсов питон доили на эту тему
Ну сейчас еще больше людей появилось которые смежные услуги предоставляют.
>схемах для обучения это важно чтобы вкатуну пыль пустить типа смотри прогресс пошёл
Ну эта тема с фронтендом тоже хорошо продаётся, первую страницу сверстали из header, main, footer и всё люди уже на рынок труда собираются. Теперь таких фронтендеров как говна за баней.
У меня такой вопрос. Юзают ли программисты Apache/Nginx
напрямую? Или это удел администраторов?
почему я задаю этот вопрос. Например я могу создать веб-приложение используя фреймфорк (Laravel, django, node и т.д.), которые возьмут всю поднаготную.
Но в тоже время на докерхабе node/apache одни из лидеров по скачиваниям. Кто их использует напрямую и зачем?
>Интересно что сейчас набирает популярность тезис что пыха === изи вкат в it.
ААА СУКА Я ВО ФРОНТ ЕНД НЕ СМОГ ПОПАСТЬ ПО ЭТОЙ ПРИЧИНЕ, ПОСМОТРЕЛ НА СТАТИСТИКУ, ПЫХА НОРМ ПО КОНКУРЕНЦИИ. НО БЛЖДАД И СЮДА ТАБУН ГОЛОДРАНЦЕВ РВЕТСЯ ВПЕРДЕ МЕНЯ!!!1!! ИДИТЕ НАХУЙ СУКИ В ТАКСИ И НА СТРОЙКЕ ХОРОШО ПЛАТЯТ. МНЕ СКОРО 30 ЛЕТ, Я НЕ ХОЧУ НА ЗАВОД ОБРАТНО
Пыха медленно работает с I/O, поэтому выгодно отдавать статические файлы через веб-сервер, минуя php. В большинстве случаев дополнительная логика тут все равно не нужна.
Да, ебаные продаваны курсов нашли нишу которая была занята скуфами. Даже пидор хауди хо недавно видос запилил по пыхе (вылезло в реках), хотя раньше ему подобные даже не знали что кроме жс и питона другие языки есть.
Минуточку, хауди хо ещё в 2к21 году видосы пилил, где говорил, что вкот проще всего делать через Битрикс и ВордПресс.
Губами
А что, в России в него разве не также просто вкатиться? Я что-то не вижу повсеместно курсов по вордпрессу, только джавв и петухон везде вылазят
Хз, попробуй. Потом отпишешься если вкатился
Есть VS Code, есть протокол LSP и language server вроде phpactor. Конечно, есть шероховатости и недоработки, но это все при желании можно исправить. Если бы каждый жалующийся на отсутствие IDE внес хотя бы 100 строк доработок, думаю, IDE давно бы была готова.
Если ты ориентируешься на Россию, то тебе нужны протоколы с обфускацией, так как чистый OpenVPN легко распознается и блокируется.
Ты про кривую кодировку либо же про ошибку? Ошибка в том, что у тебя включено расширение php_imagick, но оно не может загрузить библиотеку imagick.
Ты можешь либо отключить это расширение в конфиге php.ini, либо убедиться, что расширение (php_imagick.dll) и библиотека (imagick.dll) установлены и находятся в правильных директориях и их версия совместима с версией Windows. На странице ImageMagick много всяких файлов, я советую попробовать ImageMagick-7.1.1-38-Q16-HDRI-x86-dll.exe отсюда https://imagemagick.org/script/download.php
Если что, порядок установки описан тут (переведи сам): https://www.php.net/manual/en/imagick.installation.php
> Windows users can download prebuilt DLL from the » PECL website. These packages already contain the extension DLL (php_imagick.dll) which needs to be put into the extension_dir. They also contain the ImageMagick DLLs, which need to be put somewhere in the PATH. As of Imagick 3.6.0, they also contain XML configuration files in config; to use these instead of the built-in defaults, they need to put into %USERPROFILE%/.config/ImageMagick, or alternatively in the path given by the environment variable MAGICK_CONFIGURE_PATH. Refer to the » ImageMagick configuration files documentation for further details.
Если твой вопрос был про русские буквы, выводящиеся неправильно, то попробуй погуглить, как настроить кодировку в терминале VS Code под Windows. У тебя явно включена CP866, а надо utf-8.
Отличия сессии и кук:
- сессия годится для кратковременного (1-7 суток) хранения данных, куки до нескольких лет
- данные в сессии не видны пользователю, а куки он может видеть и модифицировать (но ты можешь их шифровать для защиты от этого)
- объем кук ограничен 1024 байтами, в сессию можно запихнуть побольше данных
Сессия при этом использует куки, но только для хранения идентификатора сессии.
>>285928
Нельзя, если все правильно настроено и используется HTTPS.
Контейнер докера это что-то вроде виртуальной машины: он изолирован от основной (хост) системы. И директории и файлы с хост-системы в нем не видны. "Том" как раз позволяет сделать директорию хост-системы видимой внутри контейнера. "Примонтировать том" значит подключить "том", то есть директорию хоста, чтобы он стал виден внутри контейнера.
> А также что означает ":"
Это разделитель, который отделяет имя директории на хосте и место, куда ее надо примонтировать внутри контейнера. То есть на хосте у тебя директория имеет путь /some/dir, а в контейнере ее можно примонтировать по другому пути, например, other/dir.
Я советую изучить основы использования и администрирования Linux, прежде чем браться за Докер - без этого многое непонятно.
Само по себе клонирование подразумевает просто скачивание файлов из репозитория к тебе на машину. А вот если ты их запустишь, не проверяя, то может произойти что угодно. Могу посоветовать проверять файлы антивирусом (можно упаковать в zip и отправить на вирустотал, если ты не можешь позволить себе антивирус), и виритуальная машина тоже неплохой вариант.
Не понял вопрос, куда они его пихают? Mimetype это просто обозначение для типа файла, например image/png.
>>287809
Прокси, VPN, но он все равно денег начнет просить со временем.
>>287873
Отказать мог не только тимлид, а еще кто-то другой, например, служба безопасности. Или вдруг оказалось, что кандидат сейчас не очень-то и нужен из-за смены планов.
Апач в наши дни особо использовать смысла нет. На продакшене используют nginx + php-fpm (это не то же самое, что php), а локально ты можешь настроить то же самое или запускать php в режиме веб-сервера: https://www.php.net/manual/ru/features.commandline.webserver.php
Кстати мне нравится, что в новой капче надо уметь различать кандзи. Не зря учил!
>Интересно что сейчас набирает популярность тезис что пыха === изи вкат в it.
Я даже догадываюсь у кого ты это слышал 😑
https://youtu.be/aY3fRexyhAI?t=247
Вакансий на вордпрессе меньше по сравнению с битриксом. Толку от твоих курсов если на нем работы в РФ мало так что для вката лучше все таки битрикс
>для вката лучше все таки битрикс
А чем лучше? Что это дает помимо ачивки что вкатился? С битрикса опыт не сильно релевантный. Опыт работы на битрикс требуют аналогично други вакансиям.
>Смекаешь?
Нет, не смекаю. Потому что, например, я изучил laravel и иду на вакансию и после мне предлагают битрикс. И чем идея? Будут обучать битриксу или мне придется самостоятельно его осваивать? И в том и в другом случае это для бизнеса проёб.
Много вакансий где надо писать на ларавеле используя битрикс апи. Никому чистый фреймворк в вакууме не сдался. На фреймворке решают бизнес задачи и если бизнесу надо, чтобы заявка с сайта попадала в воронку в Битрикс CRM, то хоть на хаскеле с есодом пиши, придется с битриксом взаимодействовать.
Чел, 99% задач программистов сводятся к тому, чтобы одно говно к другому прилепить. Даже голангером ты пойдешь ебаные бизнес задачи решать, а не в хакатонах учавствовать.
мимо шел
Нормально гоев прогревает)
И чем он плох и в чем он не прав? Я серьезно без подъебов
Это лучший канал по вайти что я видел, говорит довольно объективные и реальные вещи без цели продажи курсов
>И чем он плох и в чем он не прав?
Да никто не говорит что он плох. Просто рубит на хомяках бабки, норм тема)
> вещи без цели продажи курсов
Ну конечно, только на бусти подпишись)
> Просто рубит на хомяках бабки
>только на бусти подпишись
Ну ты ебать срыв покровов устроил, он буквально говорит что делает это тупо ради бабок и все его каналы называются аля дайте деняк.
На качество роликов это никак не влияет, он не пускает пыль в глаза про то как ты сейчас из грузчиков за неделю станешь наносеком за неделю. В чем он не прав в видосах то
Нет, все теперь на битриксе
>про то как ты сейчас из грузчиков за неделю станешь наносеком за неделю
Падажжи, а что нет? Я не стану наносеком???7??
мимо грузчик
>Интересно что сейчас набирает популярность тезис что пыха === изи вкат в it.
О чем ты, шиз? Он всегда был популярен.
>кто нить вкатывался в 23-24 году менее чем за полгода в пхп разработку?
Ну я за две недели вкатился недавно. Правда до этого пол года пытался вкатиться на ноде пока не осознал что она мертва. Два дня почитал о пыхе на метаните, сделал половину пет проекта на ларавеле и создал резюме с 1.5 годом накрученного опыта. Прошёл три собеса и получил оффер. Причём оффер получил с самого первого собеса. Ну а если ты с нуля вкатываешься то за пол года вкатиться более чем реально. Просто нужно не быть распиздяем и уделять по 5-6 часов учёбе каждый день, избегая траты времени на всякую лишнюю залупу
Любой кабанчик тебе пиздит, недоплачивает и желает чтобы тебя поскорее черный ящик с AI заменил.
>Просто нужно не быть распиздяем и уделять по 5-6 часов учёбе каждый день,
Вот в dr чел ведет дневничок, как вкатывается в пхп/ларавел с марта 22 года, ежедневно уделяя учебе по 7 часов в день. Можешь пойти, заценить.
>Можешь пойти, заценить.
Заценил. Чел третий год не может дойти до примитивнейшей мысли что нужно крутить опыт и пиздеть на собесах. Значит его уровень интеллекта катастрофически низок. У таких 8 часов обучения по эффективности равны примерно 20 минутам у нормисов.
Ну да, давно пользовался им. Интересно может ли он в 1с программирование русскими буковками
>У таких 8 часов обучения по эффективности равны примерно 20 минутам у нормисов.
Под нормисом себя наверное подразумеваешь? Или нет, ты даже круче нормиса? 100 часов их занятий равны 1 минуте твоей, не меньше.
Как не зайду на двач, так в голосину кекаю с коупинга местных чсв-обезьян.
>Под нормисом себя наверное подразумеваешь?
Ну смотри, я вкатился за 1.5 года уделяя вкату в среднем полутора часа в день и ебланя буквально неделями. Тот чел даже ни на один собес не попал за 2.5 года вката. И тут получается два варианта:
Либо я 180iq сверх человек, а тот чел нормис
Либо я нормис, а тот чел долбаёб. И ты соответственно.
Ну и учитывая что я решил вкатываться через бэк на ноде сверхчеловеком меня трудно назвать. В итоге получается что ты долбаёб.
Папка мой меня устроил тимлидом в свой it отдел. Говорит пора учиться руководить. Ну и плюс по "моей сфере" всё таки, как никак я инженер-программист дипломированный. Хожу шугаю работяг и играю в игоры остальное время.
Вопрос к вкатунам, хули вы такие тупые?
Это для умника выше, который думает что вкат как-либо связан с обучением или знаниями, когда это чистая социалка, пусть зачастую и не такая прямолинейная, как в моём примере. Вкатиться можно ваще ничего не зная про программирование, в интернете полно присеров где челы проходили собесы, наебывая даже техлмдов. При этом полно реально крутых программистов, которые нигде не работали и им с нуля будет пиздец как тяжко вкатиться. Я лично знаю ебейше талантливого джависта, которого слали нахуй даже дно-вакансии, в итоге он просто стал сам писать скрипты на заказ и зарабатывает теперь прилично, а hrы ему отказы ставили, вот и думайте головой
У тебя логическая ошибка. Скорость вката напрямую не коррелирует с твоими знаниями. Ты можешь выучить хоть всё айти мира, но если тебя hr автоматически бракует по опыту, то эти знания тебе никак не помогут.
Опять-же пример с моим знакомым джавистом. У чела по факту опыт с десяток лет, но он кодил не для коммерции, а для себя, рння у мамы на шее. Потом прижало зарабатывать и его нахуй посылали даже на дно-вакансиях, ибо hrы срали брать чела 28 лет без образования и опыта, хотя у него уровень уверенного мидл+ по знаниям.
Можно потратить немного времени на софты, это не рокет саенс. Твой знакомый как минимум мог бы популярно сделать что-нибудь полезное для людей и за счёт этого получить рефералку. Это посильно для уверенного мидла+.
А если за 2.5 года львиная доля - это дноработа и бытовуха? А чисто на кодинг был 1 месяц и то твердо и четко не было известно получится ли покодить или опять отвлекут и придется всё бросать на затычку жизненных дыр?
Давай тоньше
В это нужно углубляться или это все не используется на работе как правило?
class MyClass
{
public ?int $google = null;
public function __construct()
{
$this->google = '3';
$this->google = ''; //Exception
}
}
Не совсем понял, что ты хочешь сделать. Пустая строка и null-значение - это принципиально различные данные. Скорее всего у тебя ошибки в проектировании, если с этим возникают затруднения.
Ну вот в $_POST например ['google' => ''], а в форме MyClass это свойство не обязательное. В твоем фреймфорке если загрузить данные из поста в форму, он разберется, что пустую строку нужно в null превратить? И если нет, то как у вас данные с формы на фронте попадают в класс формы?
>Пустая строка и null-значение - это принципиально различные данные
А если в int записать (string)"3.01", то он не ругается что там флоат. Я понимаю что это numeric. Но там же в обявлении типа стоит не просто int а ?int. Можно было бы наверное еще проверку на длину строки делать.
>>292371
$this->google = '3';
Тоже строка, но он разруливает преобразование тут.
>немного времени на софты
Но есть нюанс, что софты зависят а некой степени от внешки, харизмочки, от врождённого характера и врождённого ай си кью. За немного времени нереал пофиксить стартовые характеристики наролленые в генетической лотерее.
Ты полагаешься на неявное преобразование типов, которое может без предупреждения меняться от версии к версии интерпретатора.
Советую зафиксировать типы везде, где это возможно и ограничить жонглирование типами через declare strict_types. Так у тебя с меньшей вероятностью что-то сломается, будет проще дебажить и не нужно будет держать в голове, что как и каким образом к чему приводится.
В твоём случае правильно было бы (1) делать проверку строки на empty и в зависимости от результата возвращать либо null либо (2) делать следующую проверку на int через фильтры и либо возвращать int либо выбросить исключение с ошибкой валидации.
https://www.php.net/manual/en/function.filter-var.php
Фреймворки делают то же самое, но прячут логику под капотом, позволяя тебе просто выбрать нужные для конкретного параметра правила валидации.
>>292383
Избавляйся от иллюзии, что ты живёшь в рпг с фиксированными параметрами. На самом деле не существует никакой таблицы статов и проверки от них не кидаются.
Но конечно чмоня, неспособный компенсировать недостатки хотя бы упорством, не сможет конкурировать с другими людьми. Его даже жалеть неинтересно.
>declare strict_types
Вот отсюда и пошли все беды. Раньше вот хорошо было, создал класс со свойством public $google и все. Потом приходят зумеры и про то как здорово иметь строгую типизацию и все. Начинаешь под капотом там в фреймфорк лезть, трейты писать, блокировать инпуты если они пустые, чтобы в пост или гет запрос не попали пустые строки.
>делать проверку строки на empty
Упустил что 0 все таки стоит записывать. 0 и не заполненный инпут это разные вещи иногда.
> Начинаешь под капотом там в фреймфорк лезть, трейты писать, блокировать инпуты
Никогда не возникало таких проблем.
> Упустил что 0 все таки стоит записывать
Да, ты прав. Надёжнее использовать 0 === strlen(trim($input)).
>Раньше вот хорошо было, создал класс со свойством public $google и все. Потом приходят зумеры и про то как здорово иметь строгую типизацию и все.
Еблуша, как раз зумеры в типизацию не умеют. А говорить, что строгая типизация хуже нестрогой может только совсем бездарный вкатыш с нулем опыта работы на нормальных проектах
>Никогда не возникало таких проблем.
Ты ларавель используешь наверное? Или в симфони тоже есть обнуление пустых строк в реквесте?
>Вот отсюда и пошли все беды. Раньше вот хорошо было, создал класс со свойством public $google и все. Потом приходят зумеры и про то как здорово иметь строгую типизацию и все.
Ебать дебил
>то как у вас данные с формы на фронте попадают в класс формы?
Какие нахуй классы формы?
мимо ларавел боярин
Я так класс для получения данных с фронта и их валидации называю. Вы всегда с Eloquent-ми работаете получается?
Не. Запросы приходят в роут и спрашивают "чё-каво"? В роуте написано "пиздуйте в контроллер". Но когда залётные пасанчики пытаются зайти с ноги в контроллер, им мидлвара (смотрящий) говорит "не-не-не, вы кто ваще и чо такие дерзкие?". Запрос представляется по форме смотрящему и либо идёт нахуй, либо его заворачивают в закуток к остальным реквестам, где проходит уже шмон-валидация. Всё достают из карманов и предъявляют "чо у тебя тире короткое?". Если запрос чотко понимает, куда попал, и какой положняк на хате, то проблем с содержимым не будет. И вот тогда-то его и пустят в хату (контроллер). В принципе, при шмоне можно что-то дополнительно напихать запросу в панамку, либо изъять ненужное. В любом случае, в контроллер он попадёт уже чистеньким, без всякого сифилиса.
Ну у нас в ларочке форм-реквесты есть, в которых можно играться с данными, валидировать, преобразовывать, перед передачей в контроллер и далее.
А ну понял. Это мидлваре у вас там есть, а я просто тоже самое делаю в контроллере.
А, ну под капотом там пади мидлеваре, да. Просто я макака тупая - не вникаю особо.
Норм паста, схоронил
>>292379
С какой стати пустая строка вдруг должна стать null? В php строки используются не только для изъятия значений из полей. Пустые строки, как и не пустые, должны корректно сшиваться друг с другом безо всяких дополнительных движений. К примеру, для генерации текста наподобие $a$b$c, где $b это color="green" в теге font, и т. п.
>> Упустил что 0 все таки стоит записывать
>Да, ты прав. Надёжнее использовать 0 === strlen(trim($input)).
Зачем strlen звать? (trim($input) === "") быстрее. На пустых строках до 10%. А на длинных почему-то одинаково считает. Не очень понимаю. По логике вроде на первом символе уже должен дать false. Хотя если strlen - это макрос над всегда известеным где-то рядом со строкой значением в памяти, то должно, наоборот, быстрее считаться сравнение с нулём...
Щас бы сидеть какие-то 10% на функции в пыхе считать...
>Он всегда был популярен.
Вот лысый уебан твердит что нет https://www.youtube.com/watch?v=aY3fRexyhAI
Присоединяюсь к реквесту
Мне впадлу протыка твоего смотреть. Пыха всегда была один из основных легких путей.
как же я орнул с этого объяснения MVC )) АЖ ХРЮКНУЛ
К счастью, вкатыши не повалят массово на пыху, ведь она умирает, на ней не пишут новые проекты, все переписано на го и прочая шиза от псевдопрограммистов.
Нейронка так и поняла, что ты с помощью гета пытаешься получить инфу о файле, которая где-то на бэке хранится.
https://stackoverflow.com/questions/15201976/file-uploading-using-get-method
https://www.php.net/manual/en/features.file-upload.php
> твой ротик,
и твоя тугая попка, с тех пор как отребью массово впарят что пыха изивей, а не умирающая рвотно-блевота.
Вот когда разбавишь участь питухондриев и жаберов тогда и попиздишь за популярность
Мб чтоб маслят не привлекать, за счет этих лозунгов и едем
Насколько я понял, тебе обязательно использовать GET? Так-то для вывода инфы о файле используется запрос OPTIONS.
Из того что сам знаю: hls и dash, но не понимаю генерируют ли они их «налету» или заранее режут на чанки и по CDN рассылают? Как это работает вообще? Просто как я это вижу, для своего сата, например: заходит чел на сериал, выбирает серию, я на сервере в этот момент через запуск ffmpeg начинаю нарезать кусочки и отправляю на клиент плейлист с таймингами и ссылками на куски(m3u8, например)
Но это же достаточно долго(5-6 секунд ждать челу пока там все приготовится для вещания такое себе), поэтому и задаюсь вопросом, может популярные чата заранее нарезают видос и потом просто их как статику уже отдают?
Нашел репозиторий с Dockerfile, docker-compose файлами. Скопировал файловую структуру, названия папок, нажал docker-compose up и...ошибки, ошибки, ошибки...Гуглишь ошибки, ничего не помогает. как я заебался почему с этой хуйней столько проблем...8 часов въебал сегодня на эту шляпу и профита 0, ничего толком не развернул. ну что что мне блять делать чтобы это говно работало, почему все так сложно блять
За то девопсы свою зарплату и получают.
Хз, докер - это чудо чудесное. При самом примитивном использовании без каких-то особых заморочек там и обезьяна разберется.
Не хочу в офис ходить, поэтому буду битрикс учить и на удаленку сразу залечу, а дальше как видно будет
Так я готов. Но скока вешать в граммах?! Вот куплю я два гига, а потом окажется, что Эластик меньше чем на 10 даже не запустится. Вот и спрашиваю.
На впс же всегда можно без проблем накинуть мощей нажатием одной кнопки.
10 тебе, наверное, не понадобиться, а 2 таки будет мало.
Все же уже обсосано в интернете. Так и вбей - сколько гигов надо ебластику.
Самые низкие зп на рынке
Зачем он нужен тогда?
>сколько времени надо изучать все это? - все зависит от тебя, в районе 24-48 месяцев
А в жс за 8 месяцев можно вкатиться
Да там в шапке шиза
Ну и пиздуй в свою жаву. Там наверняка только синтаксис знать надо и 300к твои.
Кабанидзе, спок
>ТРЕБУЮТ
Так требуют, что ни разу с этим не сталкивался
Или ты еблан на фуллстек-вакансии смотришь? Так они и на джаве есть
Ну в "плюсом будет" почти всегда фронт подтягивают. Оно вроде и не обязательно, но чтобы обскакать конкурентов...
мимо
Кстати да, или еще какую рандомную дрисню
Ставь roadrunner, сейчас модно на нем приложения заводить.
Большинство вакансий - фулстек, часть с желательным умением во фронт, минимум вакансий - чистая пыха.
на хх так, может конечно не 80, но больше половины точно.
Пыха вакухи это в основном в аутсорс студии с битриксом, а в "нативном" битриксе фуллSuck это норма.
Пхп вака на чистый бек это уже более серьезные кабаны, а их конечно меньше, вот вы ходит что фуллsuck в основном.
Там, где ищут со знанием фронта - очевидно, ооо васянка, куда не стоит идти даже если бы там была чистая пыха в требованиях. Вакансий с голым пхп полным-полно, хуй знает че вы тут устроили
пиздаболы ебаные везде есть требования фронта на пыхе умеренные хумеренные но есть верстала ваш посрать отойдет с запором ты будешь за ним говно чистить
И чтобы изменилось в твоей жизни?
Фронт для работы на ларе не нужен. В нормальных конторах всегда есть разделение на фронт и апишку. Если в вакухе написано что нужно знать фронт - значит перед вами вакуха нищей черве-пидорской галеры и она вам не нужна, если вы не червь-пидор, конечно.
>Если в вакухе написано что нужно знать фронт - значит перед вами вакуха нищей черве-пидорской галеры и она вам не нужна
База
Только лара кал ебаный
>Фрезерный станок тупа кал малые у меня знакомый слесарь с 8 годами опыта срал и ссал на него
Ларавель предпочитает конвенцию конфигурации, поэтому в коде получается порядочно магии. К тему же местная ORM намертво связывает бизнес-модель и базу данных и, чтобы эти слои разделить, придётся вручную мапить eloquent-записи в классы модели.
> фасады
В доке есть табличка соответствия фасадов и имён классов. При желании можно пробросить их в конструктор через di.
Она и нужна только для того, чтобы привязать код проекта к фреймворку неявными зависимостями.
>Да фасады ебучие
Лол, меня недавно один крендель собеседовал, тоже про фасады втирал. Вообще не понимаю, что вы до них докопались? Ну фасады. Ну скрывают реализацию всей хуйни под капотом. Блин, это фреймворк, он для этого и создан. Что не так-то?
Недавно по работе пришлось с композом дохуя возиться, аж хуёк привставал что не надо этот говнокод лопатить
Кому-то не нравится, что валидация прописывается на уровне контроллеров или форм реквестов, а не на уровне сущностей\моделей.
Тащить валидацию реквеста в модель? Это где такие упоротые сидят?
А почему бы и нет? Кто, если не модель, должна знать, какие данные в нее можно сохранять?
Пример: юзер загружает фото. Берём файл, делаем ресайз, сохраняем на диск, пишем в базу путь до него. Допустим, есть ограничение на размер файла. В ларавеле реквест не пройдёт дальше валидатора. А там, получается, произойдёт загрузка, ресайз и сохранение в сторедж, а потом база "да не, чот ты здоровый больно, давай ошибку юзеру вернём"?
Ну сделаешь модель для работы с загрузкой фото, на уровне контроллера или напрямую вызовешь валидейт или из метода аплоад.
>>299326
Давай другой пример. Все как ты и описал, юзер загружает фото, только лимит не на это фото, а на общий объем загруженных файлов.
То есть правила не статические, а определяются СОСТОЯНИЕМ СИСТЕМЫ. Это состояние нужно в каком-то виде откуда-то получить, проверить на соответствие правилам, а потом изменить. Это и есть буквально работа с моделью. Это то зачем модель вообще существует.
Правила типа: длина строки, только цифры/буквы/залупы, мыло/телефон простые. Их можно легко продублировать, даже в js запихнуть. А начнешь дублировать работу с состоянием - потеряшь консистентность. Понадобится работу с лимитами по файлам поменять - будешь скакать как козел по всему проекту, да еще обязательно где-то правила поменять забудешь.
А зп? 55к до вычета?
Воспринимай работу как изменчивый рынок с клиентами, а не как блядь воспринимает папика, к которому хочет присосаться. Понимай что ты можешь продать, а что не можешь. Будет легче жить.
Ставь линукс или по крайней мере wsl. Когда вкатишься, тебе все равно никто не даст разрабатывать под виндой без виртуализации, это моветон.
Тот же Rails
Процессы используются через разные варианты : запуск через крон, очереди в ларке. Инженер не ждет когда ему лазерную сварку подгонят, а берет синюю изоленту и..
2 системы поставь или виртуалку.
Wsl + docker ставь.
Челы с годами опыта год могут сидеть без работы
С годами на 5.6.x и жиквери?
Ну хоть не десятилетия!
Налету генерировать будет очень дорого, поэтому все режется и конвертируется заранее, думаю что консольными утилитами вроде ffmpeg (у нее впечатляющий набор возможностей).
> Но это же достаточно долго(5-6 секунд ждать челу пока там все приготовится для вещания такое себе), поэтому и задаюсь вопросом, может популярные чата заранее нарезают видос и потом просто их как статику уже отдают?
Именно так.
Какая у тебя цель? Развернуть этот репозиторий или изучить Докер? Если изучить, то лучше начинать с простых примеров: к примеру, установи Докер-образ с PHP и пробрось директорию с кодом внутрь него.
Напомню, что перед изучением Докера надо изучить основы работы в Линусе и основы администрирования.
Ну и можешь еще конечно описать, что ты делал и какая вышла ошибка, может так будет быстрее разобраться.
Ошибка 502 (bad gateway) означает, что nginx пытался переслать запрос на бекенд, но он либо неверно указан, либо не работает. Тебе надо почитать документацию nginx (благо она на русском есть) и проверить каждую строчку в конфиге.
Elastic обычно много ест, минимум 1 Гб если данных мало. И на дохлом VPS он будет где-то минуту стартовать только. Попробуй в его конфиге по максимуму все отключить тогда.
А Докер может использовать много места на диске (гигабайты) под образы.
При выборе VPS обращай внимание на систему виртуализации, так как они по-разному считают память: 1 Гб на OpenVZ может быть эквивалентен 512 Mb на KVM. Не знаю как сейчас, а раньше в дешевых VPS как раз OpenVZ и использовалась.
Кстати за 3 Гб памяти (KVM) плачу 5 евро в месяц и то это дорого так как это Европа, а не Россия.
Не валидацию реквеста, а валидацию модели. Причем делается это с помощью аннотаций по типу:
class User
{
#[Assert\NotBlank]
private string $email;
...
Выгода в том, что ты всегда модешь валидировать модель, независимо от того, откуда ты ее взял: из базы, создал руками, создал через форму итд. Это как раз правильный и удобный подход.
А как ты валидируешь модель из базы, если у тебя правила повешены на форму?
При этом, ты также можешь делать дополнительную валидацию на уровне формы или добавить правила валидации в DTO, так как их можно повесить вообще на любой класс, не обязательно модель базы данных.
Это как раз правильная и грамотная архитектура, выбранная в Симфони.
Все зависит от того, как ты выстроишь архитектуру. Ты можешь повесить валидатор и на форму, или сделать свой виджет для загрузки файлов, который их будет обрабатывать по твоим правилам.
В Симфони правила валидации можно добавить вообще к любому классу, и это правильно.
Попробуй так, в файле docker/nginx.docker:
FROM nginx:latest
ADD ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www
Файл конфигурации в docker/nginx/default.conf:
server {
listen 80;
index index.php index.html;
root /var/www/public;
index index.html;
location / {
try_files $uri /index.php?$args;
}
location /docs {
try_files $uri $uri/;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
В docker-compose.yml:
services:
nginx:
build:
context: ./
dockerfile: docker/nginx.docker
volumes:
- ./:/var/www
ports:
- "8080:80"
links:
- php-fpm
Попробуй так, в файле docker/nginx.docker:
FROM nginx:latest
ADD ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www
Файл конфигурации в docker/nginx/default.conf:
server {
listen 80;
index index.php index.html;
root /var/www/public;
index index.html;
location / {
try_files $uri /index.php?$args;
}
location /docs {
try_files $uri $uri/;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
В docker-compose.yml:
services:
nginx:
build:
context: ./
dockerfile: docker/nginx.docker
volumes:
- ./:/var/www
ports:
- "8080:80"
links:
- php-fpm
Давай разберемся. DLL это "библиотека", то есть файл с набором функций, которую можно подключить в приложение. Но у библиотеки в свою очередь может быть зависимость от других DLL-библиотек (и функций в них), которые нужны ей для работы.
Ты можешь увидеть это, используя утилиты вроде Dependency Walker, или может сейчас есть что-то поновее.
Раширение php_pdo_sqlite позволяет вызывать из PHP функции библиотеки sqlite, и тебе надо и расширение, и эту библиотеку.
Судя по ошибкам в консоли, не удается найти библиотеку с именем sqlite3 или php_sqlite3.dll. При этом, если скачать sqlite с официального сайта ( https://sqlite.org/2024/sqlite-dll-win-x64-3460100.zip ) то там в архиве лежит sqlite3.dll.
При этом в документации https://www.php.net/manual/en/ref.pdo-sqlite.php написано:
> This extension requires the following files to be in the PATH: libsqlite3.dll.
Налицо несоответствие имен в документации, в расширении и библиотеке. И не очень понятно, кстати, что за файл положил ты, так как у тебя отключен показ расширений в проводнике и возможно ты вообще sqlite3.exe положил вместо sqlite3.dll.
Попробуй скачать по моей ссылке библиотеку и переименовать ее в php_sqlite3.dll и положить туда. И проверь, что ОС, PHP и библиотека одинаковой битности (я думаю, у тебя 64-битная ОС, но вдруг).
По хорошему, это надо зарепортить, чтобы они поправили названия библиотек. К сожалению, Windows тут как гражданин 2-го сорта и в последнюю очередь получает внимание.
Также, настрой уже кодировку в терминале:
Попробуй вводить команды chcp 1251, chcp 866, chcp 65001 и посмотри, исправится ли проблема.
Также, включи показ расширений в проводнике.
Так JS тоже однопоточный, несмотря на промисы. Попробуй что-то тяжелое посчитать и у тебя весь веб-сервер зависнет.
А где у тебя контейнер с php-fpm? Ты только nginx же описал тут. И, конечно, было б хорошо объяснения добавлять, а то образовательная ценность стремится к нулю.
Пердеж, ты спокуху то оформи. Совершенство не требует изменений.
Да разобрался уже, можно вручную добавить закинув папку и define и через композер поставить
Ну так у него только с нжинксом не получается
Внутри тела функции можно объявить локальные переменные. Зачем? Затем, что они нужны только на момент выполнения функции. А что если объекты это и есть функции? Что такое объект с точки зрения наиболее часто даваемого определения? Это совокупность состояния и функций, которые работают с этим состоянием. А что такое локальные переменные внутри функции? Разве не состояние и операции, которые работают с этим состоянием? Отсюда следует, что определяя атрибуты объекта, нужно давать ему такие атрибуты, которые нужны на момент выполнения его методов, а остальные вынести как параметры этих методов. Меня эта тема до сих пор волнует, а именно: как понять какие атрибуты должны быть у объекта? И не заливайте мне о том, что нужно моделировать аналогичный объект из реального мира, ведь в любом случае приходится отбрасывать часть атрибутов из-за того, что они оказываются ненужными для выполнения задачи. Получаются, что нужно отталкиваться не от того, как представлен объект в реальном мире, а от того, какие задачи он решает, какое состояние ему для этого нужно и как я выше написал, нужно делать его атрибутами только те атрибуты, которые нужны на момент выполнения задачи. Что думаете, аноны?
> Зачем?
Для читаемости и удобства. Записывание промежуточных результатов выполнения процедуры в переменные с понятными именами - более очевидное и поддерживаемое решение, чем цепочка вложенных вызовов.
Сравни
$this->step4($this->step3($this->step2($this-step1())));
И
$step1 = $this->step1();
$step2 = $this->step2($step1);
$step3 = $this->step3($step2);
$step4 = $this->step4($step3);
Между вызовами step3() и step4() может быть промежуточный вызов, не возвращающий результата, но оставляющий побочные эффекты, необходимые для корректной работы step4(). В таком случае придется записать результат step3() в переменную и затем передать ее в step4().
Думаю, что ты вкатун, который хуйней страдает.
>Получаются, что нужно отталкиваться не от того, как представлен объект в реальном мире, а от того, какие задачи он решает, какое состояние ему для этого нужно и как я выше написал, нужно делать его атрибутами только те атрибуты, которые нужны на момент выполнения задачи.
Охуеть! Он познал АБСТРАКЦИЮ!
Так это немного не про то. Тяжелыми вычислениями при желании можно что угодно раком поставить
Асинхронщина.
В JS есть такая штука, называется Event Loop. И вот она позволяет, например, сделать запрос на сервер и как-бы подписаться на ответ. А пока ответа нет выполнять другие команды. А после того, как ответ придет - выполнить ту часть кода, для которой требовались эти данные. И, я так понимаю, пхп из коробки такое делать не умеет?
PHP такое делать умеет, но в нем это не очень удобно и никто особо так не делает.
Судя по всему, ты просто не понял, про что я говорил.
>FastCGI-скрипты высрал@умер
Ты путаешь FastCGI и CGI. Зачем тебе в принципе своё мнение по этому вопросу? Только честно
>Ты путаешь FastCGI и CGI
Ну ок, высрал@умер с пулом заранее заготовленных говнопроцессов, и вся эта хуйня по-прежнему сосёт по производительности у современных технологий примерно в 3 раза. Это всё ещё не сервис, это пачка скриптов, понимаешь, челик? Так делали пердиксы в нулевые. У тя небось ещё и I/O синхронный в твоих говноскриптах, да, скуфандрий?
А тебя че трясет то так?
Но есть и плюсы:
в некоторых случаях ты не работаешь на большую корпоративную кассу, а забираешь деньги с этого херово сделанного сайтика себе.
подумай об этом.
Тебе надо изучить, что такое FatCGI, потому что по моему, ты ничего не понял. FastCGI процесс не завершается после обработки запроса и может обработать много запросов подряд.
Названия "современных" технологий, которые быстрее в 3 раза, и при этом не менее удобны, писать ты, конечно же, не будешь.
В атрибуты ты кладешь то, что должно сохранятся между вызовами методов (между вызовами любой пары методов).
В PHP (в отличие от устаревшего Си) длина строки в байтах записана отдельно, и никто по символу ее не считает. А вот если ты вызовешь mb_strlen, то будет подсчет.
Щас надо учиться на оператора нейросетей, бумерки!
Троллинг тупостью
Poe через Протон хорошо работает
Тебе же сказали ставить WSL, дура. А вообще удаляй эту игру - она только все твое свободное время украдет и ты не вкатишься в айти
Как быть? Можно ли в симфони использовать только действительно нужный мне функционал, как например формы, роуты, шаблон твиг, а остальное уже на своё усмотрение?
Но ведь если с нуля писать, то там говнокод по идее и будет, с нуля реализовывать mvc, не имея огромного опыта в этом может быть провальной идеей, или стоит попробовать? По идее мне не так важно, чтобы внутри была конфетка, на которую отрадно смотреть, самое главное с безопасностью сайта не наговнять, это одно из моих главных соображений при разработке. Есть какие-нибудь статьи/ресурсы специально под мой кейс?
>Хочу сделать сайт на пыхе
Это не задача, это фантазия.
Что тебе конкретно надо?
Тебе нужен форум ДЛЯ ДЕЛА, чтобы на этом форуме завтра общались конкретные люди, котрые сидят и ждут этот функционал?
Тогда бери готовое решение https://flarum.org/ и ставь его.
Ты хочешь изучить язык чисто ДЛЯ СЕБЯ? Разобраться как работают веб приложения, изучить тему? Тогда пиши форум сам, на технологии, котроая позволяет хуячить быстро https://laracasts.com/series/lets-build-a-forum-with-laravel
Ты хочешь получить навык ДЛЯ ЗАРАБОТКА? Тогда ебись с симфони, делай все по бест практисам и въебывай кучу времени.
Господи, делай на ларавел и все, ебаный в рот.
> Можно ли в симфони использовать только действительно нужный мне функционал, как например формы, роуты, шаблон твиг, а остальное уже на своё усмотрение?
Конечно. Любой фреймворк предлагает только платформу, а то, что на ней будет реализовано - решаешь уже ты сам.
Например, вместо использования orm ты мог бы создать рядом с классом сущности класс-репозиторий, в котором уже делал бы sql запросы в базу данных через pdo.
Т.е. организовать структуру вроде следующей:
Model
| Comment
| | Comment.php
| | CommentRepositoryInterface.php
Infrastructure
| Persistence
| | PdoCommentRepository.php
Ещё можешь посмотреть в сторону микрофреймворков вроде Slim.
Разве репозиторий может обращаться к бд? Это же просто хранение сущностей, по идее надо уже другой класс делать для самого обращения к бд?
мимо
Просто нужно разделять интерфейс репозитория и его реализации. Слой приложения, дергающий репозиторий видит только интерфейс вроде:
interface CommentRepository {
find($commentId): Comment;
save($comment): void;
remove($comment): void
// ...
}
Для него репозиторий - это просто коллекция объектов, к которой он может обращаться и не задумываться о том, как объекты хранятся на самом деле.
А непосредственной логикой хранения занимаются реализации интерфейса, которых можно придумать безграничное количество: PdoCommentRepository, OrmCommentRepository, CacheCommentRepository, MemoryCommentRepository, FileCommentRepository, ...
Спасибо. Есть книги какие-нибудь где про это почитать можно и как потом применять это все на практике? То есть понимать, когда следует использовать определённый паттерн, а когда и без него обойтись можно?
Книг посоветовать не могу, но могу указать направление - проектирование и архитектура.
Так в Symfony так и есть?
Репазиторий это дата шлюз. Остается проблемка
1) DataMapper - бизнес логика должна вызывать метод persist на EntityManager и соответственно получает зависимость от EntityManager, что не очень гуд с точки зрения чистой архитектуры.
2) ActiveRecord - бизнес логика должна вызывать save на объектах, которые возвращаются из репозитория. Соответственно ломается независиость бизнес логики от ORM. Это нарушение закона Деметры.
мимо
Репозиторий ничего не хранит, это не реалиация хранилища. Это чистый паттерн gateway
>репозиторий - это просто коллекция
>Репазиторий это дата шлюз
>Строго говоря, это не коллекция
>Репозиторий ничего не хранит
Сколько шизов - столько и мнений.
Нахуй он нужен твой оп. Мне не нужен. Репозиторий как колекция трактуется у мартина фаулера. Но посмотри на практический пример из док симфони https://symfony.com/doc/2.x/doctrine/repository.html
то репозиторий нечего не хранит in memory, это классический шлюз для изоляции бизнес логики от ORM
Пример из nestjs точно такой же https://docs.nestjs.com/techniques/database#repository-pattern
Не. Я говорю как раз про паттерн, а не реализацию.
https://martinfowler.com/articles/gateway-pattern.html
>An object that encapsulates access to an external system or resource
>A gateway is typically a simple wrapper.
А зачем Фаулер говорит про in-memory collection я хз. На практике я такого не видел, определение Фаулера вводит в заблуждение
https://martinfowler.com/eaaCatalog/repository.html
>A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection.
И то он написал acting like а не is
>А зачем Фаулер говорит про in-memory collection я хз.
Затем что это писалось для нормальных языков, а не для однопоточных одноразовых пхп ебланов?
Нет это не совсем так. Ждун напишет. скл портянку в контроллере, а лид как закричит
- Долбаеб, тонкие контроллеры!
Джун испугается и вынесет весь код в сервис. Тимлид увидит это и опять закричит
- Долбаеб, вынеси запросы в репозиторий!
Покажи другой пример. Репозиторй это кеш по-твоему, чтобы он был одновременно коллекцией in-memory и посредником? Я понимаю он хотел сказать что репозиторй содержит методы типичные для коллекций. Но это не суть паттерна репозиторий, суть в том что это обертка-посредник.
>он хотел сказать
Ты недавно из шкилы? Марьванна влечивает "что этим хотел сказать пушкин", а он просто был закомплексованным карликом с темной кожей и кривым ебалом и в тот день набухался сильнее обычного.
Додик, там помимо сейва еще дохуя интересного: транзакции, блокировки при чтении и прочая реляционная поебень. Как ты все это впихивать в свой репозиторий будешь?
Я уж не говорю что репозиторий может сохранять данные сразу в несколько мест, в базу и в тот самый кеш, а еще в эластик, а еще в очередь события отправлять. Если ты не кукаретик, а реальный код пишешь, то сразу приходит понимание что репозиторий всего этого делать не может и не должен.
Поэтому он блядь и остается просто ин мемори коллекцией, которую анализируют другие сервисы и построив по этой коллекции список изменений сохраняют данные туда куда надо и как надо.
Я устал быть никем и бояться вката
Увидел в шапке книжку с аниме картинками и я смотрю аниме так что мне сюда
Я больше не боюсь не вкатиться я боюсь ничего не делать ещё 5 лет подряд
Иди в тестировщики лучше, там за месяц можно вкатиться, а на разраба, даже пхпшника, придется долго и упорно учиться.
да-да, лал, у меня один знакомый дЖва года уже вкатывается в тестировщики
Это просто не правда, зачем ты врешь мне, анон?
Когда я заходил сюда 5 лет назад с вопросом о тупейшей задаче мне очень вежливо ответили и указали на недостатки
А нахуй нам в пхп-семье анимешник? Пиздуй в петухон или джс
Пинал хуи и плакал, больше причин не бывает. Может быть ещё он просто ДУМАЛ вкатить но не вкатывался, но это проходит за выше обозначенные причины.
ns1\funcA();
ns2\funcA();
ns3\funcA();
funcA() везде одна и та же. И таких функций, как она, много.
А ты почему не вкатился?
Не знал об айти?
Как и все потыкал чето решил что не мое что тупой и забил
В том и разница, что сюда сто лет никто не приходит с задачами. Никто код не пишет. Просто пытаются превратить тред в филиал "перезвоним" шизочата.
К сожалению, не подходит. Мне нужно, чтобы работало следующим образом:
Foo1\Bar1\Namespace1\funcA();
Foo1\Bar1\ns1\funcA();
Это вложенное пр-во. Очень жаль, что нет такой возможности в языке.
Если бы ты сидел в этом треде каждый день, как и я, то ты бы со мной согласился. Я сижу в этом треде уже год и только наблюдаю мертвый тред и агрессивное быдло. Единственный человек, который нормально отвечает, это ОП, но он бывает тут редко, возможно, и тогда ответил тебе именно он.
Приходишь с задачей, вопросом, кодом.
Ожидание: конструктивный добрый ответ.
Реальность:
- игнор;
- агрессивный ответ.
Либо ответят троллингом, либо плохим советом, либо с наездом "ты хули задаешь вопрос по теме, которую не знаешь?", либо вообще не по теме, либо прямо не отвечают на вопрос.
Где твой вопрос с кодом? Кидай линк.
Я восимь лет назад вкатился. Пять лет назад тоже было просто прийти в студию и сказать что хочешь делать сайты. Ну задали бы тебе пару вопросов про ООП и CSS, для ответа на которых хватило неделю чтения смехуечков на программаче.
>Лучше задачи решайте на алгоритмы
Тебе платят деньги за решение бизнес-задач, а не тупые алгоритмы которые нужны только чтобы пройти собес в Яндекс, сбер и другие параши
Залупа понурая, ты стекломоя наебнул и в пространстве не ориентируешься? Ты в каком треде находишься сейчас, синька?
прости что задел твое хрупкое эго кодомартышка а я анонов наставляю на истинный путь и собратьев по пхп
Какие алгоритмы ты уже выучил?
А пыха умрет вместе с вебом или как-то отдельно сама по себе? Если сама по себе, то в вебе, если уж на то пошло, гораздо полезнее паттерны знать.
То на что заменяют пхп прямой сейчас? Тайпскрипт, го. Там нихуя этой ооп дрисни нет.
В голосину
Как понравиться эйчарке
Если ты хочешь именно разобраться, то возможно, стоит попробовать начать без фреймворка (чтобы понять, как все работает), а потом перейти на фреймворк (чтобы не изобретать велосипеды). Советую Симфони. Понадобится знание ООП, MVC, паттернов.
Если хочешь разобраться реально, то возьми хотя бы slim, как тебе выше советовали, и подрубай там к нему че хочешь.
> Как быть? Можно ли в симфони использовать только действительно нужный мне функционал, как например формы, роуты, шаблон твиг, а остальное уже на своё усмотрение?
Можно. Сейчас фреймворк Симфони делается из компонентов, и ты можешь подключать только нужные. Или ты можешь создать свой собственный фреймворк, используя компоненты Симфони: https://symfony.com/doc/current/create_framework/index.html
И, кстати, официальные туториалы по Симфони довольно хорошие.
Могу дать пару статей по безопасности: https://github.com/codedokode/pasta/tree/master/security
persist может вызывать сам репозитрий, когда ты добавляешь в него объект.
Не очень представляю, как это должно работать с active record, но тут тоже save должен делать репозиторий.
>>302641
Давайте обратимся к Фаулеру. Изучая различные проекты, он начал видеть похожие решения проблем, и решил описать их как "паттерны" в своей книге. Паттерны могут быть удобны тем, что 2 разработчика могут легко с их помощью обсуждать архитектуру, но почему-то в нашем треде это не работает.
https://martinfowler.com/eaaCatalog/repository.html
Пояснения для начинающих:
Domain Model (модель предметной области, "доменная" модель) - это набор классов, которые описывают предметную область. Например, для доски объявлений это будут классы Пользователь, Категория, Объявление.
Data Mapping Layer (слой отображения данных (на таблицы)) - это код, который занимается сохранением и загрузкой в/из БД объектов предметной области.
Collection, "Коллекция" - это класс, который имеет методы вроде "добавить объект", "убрать объект", "найти объекты по условию".
В принципе, этих 2 слоев (Domain Model и Data Mapping Layer) достаточно, но иногда можно сделать "репозиторий" перед Data Mapping Layer, и работать с репозиторием вместо Data Mapping Layer. Для кода репозиторий выглядит как "коллекция", то есть мы можем добавлять в него объекты, удалять, искать по условиям.
Например, когда пользователь добавляет Объявление, мы создаем такой объект и вызваем у репозитория метод "добавить объявление". А при просмотре Категории мы вызываем метод репозитория "найти объявления из данной категории с сортировкой по дате".
При этом, может быть несколько реализаций (вариантов) репозитория: одна реализация использует БД в качестве бекенда и сохраняет объекты туда. А другая - для тестов - просто хранит объекты в памяти в массиве. Код не знает, что использует репозиторий в качестве бекенда, ему это не важно.
Или же (как на картинке в статье), может быть один вариант репозитория, но разные "стратегии сохранения данных": одна Стратегия сохраняет в базу, другая в массив.
В качестве плюса Фаулер указывает то, что можно собрать в репозиторий различные запросы (запрос для поиска последних объявлений, запрос для поиска объявлений пользователя), которые иначе были бы раскиданы по всему коду. И то, что можно заменять используемое хранилище (вместо таблицы использовать массив при тестировании).
> Objects can be added to and removed from the Repository, as they can from a simple collection of objects, and the mapping code encapsulated by the Repository will carry out the appropriate operations behind the scenes.
Объекты (модели предметной области) можно добавлять и удалять из Репозитория, как будто это просто коллекция (массив) с объектами, и код для отображения внутри Репозитория выполнит нужные операции сам.
> Conceptually, a Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer.
Репозиторий представляет набор объектов, сохраненных в хранилище и набор операций, которые над ними можно выполнять, давая более объектно-ориентированный интерфейс к слою сохранения данных.
> то репозиторий нечего не хранит in memory, это классический шлюз для изоляции бизнес логики от ORM
Репозиторий может использовать разные способы сохранения данных: в БД, в памяти и тд. и менять их, не затрагивая основной код.
Слово "шлюз" не очень удачное, так как уже есть паттерн Gateway для обращения к внешнему API или программам ( https://martinfowler.com/articles/gateway-pattern.html ).
> Репозиторий ничего не хранит, это не реалиация хранилища. Это чистый паттерн gateway
У Фаулера gateway это клюз к внешним системам.
>>302641
Давайте обратимся к Фаулеру. Изучая различные проекты, он начал видеть похожие решения проблем, и решил описать их как "паттерны" в своей книге. Паттерны могут быть удобны тем, что 2 разработчика могут легко с их помощью обсуждать архитектуру, но почему-то в нашем треде это не работает.
https://martinfowler.com/eaaCatalog/repository.html
Пояснения для начинающих:
Domain Model (модель предметной области, "доменная" модель) - это набор классов, которые описывают предметную область. Например, для доски объявлений это будут классы Пользователь, Категория, Объявление.
Data Mapping Layer (слой отображения данных (на таблицы)) - это код, который занимается сохранением и загрузкой в/из БД объектов предметной области.
Collection, "Коллекция" - это класс, который имеет методы вроде "добавить объект", "убрать объект", "найти объекты по условию".
В принципе, этих 2 слоев (Domain Model и Data Mapping Layer) достаточно, но иногда можно сделать "репозиторий" перед Data Mapping Layer, и работать с репозиторием вместо Data Mapping Layer. Для кода репозиторий выглядит как "коллекция", то есть мы можем добавлять в него объекты, удалять, искать по условиям.
Например, когда пользователь добавляет Объявление, мы создаем такой объект и вызваем у репозитория метод "добавить объявление". А при просмотре Категории мы вызываем метод репозитория "найти объявления из данной категории с сортировкой по дате".
При этом, может быть несколько реализаций (вариантов) репозитория: одна реализация использует БД в качестве бекенда и сохраняет объекты туда. А другая - для тестов - просто хранит объекты в памяти в массиве. Код не знает, что использует репозиторий в качестве бекенда, ему это не важно.
Или же (как на картинке в статье), может быть один вариант репозитория, но разные "стратегии сохранения данных": одна Стратегия сохраняет в базу, другая в массив.
В качестве плюса Фаулер указывает то, что можно собрать в репозиторий различные запросы (запрос для поиска последних объявлений, запрос для поиска объявлений пользователя), которые иначе были бы раскиданы по всему коду. И то, что можно заменять используемое хранилище (вместо таблицы использовать массив при тестировании).
> Objects can be added to and removed from the Repository, as they can from a simple collection of objects, and the mapping code encapsulated by the Repository will carry out the appropriate operations behind the scenes.
Объекты (модели предметной области) можно добавлять и удалять из Репозитория, как будто это просто коллекция (массив) с объектами, и код для отображения внутри Репозитория выполнит нужные операции сам.
> Conceptually, a Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer.
Репозиторий представляет набор объектов, сохраненных в хранилище и набор операций, которые над ними можно выполнять, давая более объектно-ориентированный интерфейс к слою сохранения данных.
> то репозиторий нечего не хранит in memory, это классический шлюз для изоляции бизнес логики от ORM
Репозиторий может использовать разные способы сохранения данных: в БД, в памяти и тд. и менять их, не затрагивая основной код.
Слово "шлюз" не очень удачное, так как уже есть паттерн Gateway для обращения к внешнему API или программам ( https://martinfowler.com/articles/gateway-pattern.html ).
> Репозиторий ничего не хранит, это не реалиация хранилища. Это чистый паттерн gateway
У Фаулера gateway это клюз к внешним системам.
Это посредник, который делает взаимодействие с хранилищем более конкретным, "объектно-ориентированным", как выражается Фаулер.
Без репозитория, у тебя будут общие методы вроде "найти записи в таблице по критерию", "вставить запись", "обновить запись", "удалить записи по критерию".
С Репозиторием у тебя будут более конкретные методы: "добавить объявление", "скрыть объявление", "поднять объявление", "удалить устаревшие объявления", "найти новые объявления", "найти объявления пользователя".
Нет, он не является коллекцией, а выглядит для вызывающего кода как коллекция.
> Додик, там помимо сейва еще дохуя интересного: транзакции, блокировки при чтении и прочая реляционная поебень. Как ты все это впихивать в свой репозиторий будешь?
Интересный вопрос, в Доктрине транзакции делаются уровнем выше репозиториев. А блокировки при чтении, наверно можно и в репозиторий засунуть. Отправка в несколько мест может делаться как через Репозиторий (в Доктрине есть события), так и выше него.
> Поэтому он блядь и остается просто ин мемори коллекцией, которую анализируют другие сервисы и построив по этой коллекции список изменений сохраняют данные туда куда надо и как надо.
Я не вижу такого у Фаулера: https://martinfowler.com/eaaCatalog/repository.html - на диаграмме взаимодействия именно репозиторий инициирует поиск/сохранения данных.
А зачем тебе несколько синонимов для одной функции? Обычно ты просто импортируешь функцию как:
use function Database\Util\quoteIdentifier;
Нейсмпейс показывает, к какому модулю или компоненту относится функция и вряд ли она может относиться к нескольким сразу.
>>303551
Зная алгоритмы, ты сможешь придумать решения получше.
на HH:
Москва, разработчик PHP - 1071 вакансия
Go - 855 (+ есть еще 655 golang, но я не знаю какая часть пересекается с Go)
Typescript - 956
Python - 2679
JS - 2297
Java - 1945
C++ - 1237
C# (.NET) - 872
C - 3073 (но там в поиске много мусора, например "B2C" подпадает под этот запрос)
Rust - 71
Элита этой доски, Haskell - 3 ☺️
Тайпскрипт мне не нравится тем, что у него в основе лежит JS со всем его дремучим легаси. Назови аналог Доктрины, Симфони на тайпскрипте? Или Тайпскрипт только для чатиков на 500 строчек годится?
Go мне не нравится странными идеями его автора. Назови аналог Доктрины, Симфони на Go? Или Go только для чатиков на 500 строчек годится?
Мне нравятся: Питон (где не нужна скорость), Rust (где нужна), Vue (для прототипов UI, где надо сделать побыстрее, не для серьезных задач).
Объекты и классы нужны обязательно, как без них.
В 9 из 10 вакансий он есть вот просто сука как железное требование сидит ты обязан знать или иди нахуй
https://hh.ru/vacancy/107611710?query=php&hhtmFrom=vacancy_search_list
https://hh.ru/vacancy/107615499?query=php&hhtmFrom=vacancy_search_list
https://hh.ru/vacancy/108370821?query=php&hhtmFrom=vacancy_search_list
Тыкнул в 3 рандомные первые попавшиеся вакансии. Продолжай рассказывать про обязательный js, нам очень интересно
Длинные-короткие варианты, во-первых. Одни читаемы, другие компактны. yet_another_compiler и yac. Во-вторых, что-то пишется по-разному, а означает одно и то же. ffmpeg и avconv.
Есть же class_alias, почему бы не быть namespace_alias.
linux\ffmpeg\exec()
linux\avconv\exec()
Однако такой возможности нет. Есть только некий алиас внутри любого пр-ва. Но я даже не могу прописать глобальное use linux\ffmpeg as linux\avconv. Хотя вроде бы было бы логично.
>Ехала доктрина через доктрину
Орм протекла тебе в труханы. Изолировали изолировали да не выизолировали.
>Я не вижу
Кушай морковку.
>сохранения данных
А этого на схеме нет, мистер пиздобол с выборочным зрением. Потому что увеличит эту схему в несколько раз.
Короче.
Проектировать репозитории нужно без орм, доктрин-хуин и sql дерьма. Потому что эта залупа разрастается как раковая опухоль и начинает диктовать свои условия и влиять на проектируемые решения.
Еще и оторвать это говно от проекта будет невозможно. Банально выходит третья доктрина, а додики уже настолько зависимы от особенностей второй версии что им для перехода на новую нужны тысячи человекочасов.
>лежит JS со всем его дремучим легаси
Каким нахуй легаси? Жс макаки уже сто лет как пишут на подмножествах языка типа ECMAScript и тайпскрипта и никакого "легаси" в глаза не видели.
>Назови аналог Доктрины, Симфони на тайпскрипте?
Ну вот https://typeorm.io/ , дело тут исключительно в популярности. Как только на жабоскрипте взлетит аналог ларавеля - пхп тут же пизда. Даже кривая уебищная нода отъела часть рынка. А как только появится что-то нормальное, пхп макаки тупо станут не нужны, так и будут легаси десятилетней давности поддерживать.
>Назови аналог Доктрины, Симфони на Go?
Напиши в го треде этот вопрос, развлеки пацанов.
Вся эта орм-спринг залупа заебала всех в край еще лет десять назад. Все уже давно отсмеялись над абстрактными фабриками фабрик, бесконечными аннотациями и прочим говном. И только пхп уверенно колеса катит туда где была джава десять лет назад. И похуй что от джавы всех давно тошнит и все это считается устаревшим многословным калом. Мы блядь едем. Сделаем так же но хуже, с опозданием на десять лет. И не в коем случае не сдохнем.
План надежный, стоит вкатываться.
Понимаю, что для йододефицитного сложно ввести в поиск "php" и поглядеть первые 5-10 вакансий. Но поверь, это не так трудно
Но ты и правда долбоеб. Фронт просят почти в 2/3 вакансий, что даже и близко не 9/10. Но даже отсеивая вакансии с фронтом, мы получаем больше 1к вакансий - откликайся, не хочу.
Но поплакать на двачике важнее, чем немного применить мозги
> как только появится что-то нормальное, пхп макаки тупо станут не нужны
Джава не похоронила пыху, шарп не похоронил пыху, петухон не похоронил пыху, даже говноланг не похоронил, а лишь дополнил, но вот джс обязательно похоронит, вот-вот, надо лишь немного потерпеть!
>рряяяя вакансий нет
>так вот же вакансии
>ррряяяя не те вакансии!11
Очередной троллинг тупостью
Бля, ну вот хуй знает. Ну как с долбоебами разговаривать? Кто там писал про агрессию? А как нахуй без агрессии с вот такими поленьями разговаривать?
Как это в твоем тупорылом понимании работать должно? Джава или шарп своими действиями ЗАПРЕЩАЮТ писть код на пхп? Или как блядь? Пхп сервера отключаются потому что вышел новый язык?
Вот тебе факты. Прямо сейчас задачи которые делались на пхп растаскивают по разным языкам.
1. Отрисовку хтмл отжали фронтендеры полностью, все крупные сайты рендерятся на жабоскрипте сейчас.
2. Все тяжелые задачи, процессинги и числодробилки отжали го программисты.
3. Вся новомодная микросервисная хуйня строится сразу на го.
4. Очереди-хуечереди, события. Все это крайне хуево работате на пхп, потому что нужно держать открытый коннект, а пхп дохнет как сука и по памяти течет. Переносят на го.
Что остается? Остается то что делается с помощью фреймворков - круды, орм, бизнес логика.
Схуя-ли это тоже не уйдет жабоскрипт макакам? Они дешевле, их больше, проще нанимать, не надо держать две команды, у них прямо сейчас есть языки на котороых даже проще писать бизнес логику, с встроенной готовой многопоточностью, быстрые и эффективные.
Ответ: а он уйдет. Раньше были звоночки, а сейчас вам в КОЛОКОЛ НАХУЙ ЕБАШУТ. То что делало пхп долю рынка огромной - вордпресс перекатывают на жабоскрипт. И перекатят. И че останется? Дрочить копейки в столетнем легаси кале на битриксе? Если для тебя, тупорогого это и есть "не похороны", то хули тут сказать? Кайфуй, перспективно, свежо. На это стоит въебать жизнь.
Главное, почаще это писать, и тогда точно сбудется! Нужно верить!)
Ножкой сколько раз топнул , пока писал?
Людей, которые прогнозируют какие-то вещи, не приводя пруфов, статистики, аргументированной аналитики, в моей молодости называли пиздоболами. Особо упрямым еще и ебало били в кровь.
>Фронт просят почти в 2/3 вакансий, что даже и близко не 9/10
Ну 6\10 - это довольно таки близко к 9\10...
Но разве становление вордпреса жс фёрст по мнению его основателя это не аргумент? Даже сам Расмус Лердорф говорил что вордпрес это база пыхи, а не эти ваши хреньворки.
мимо
Как нехуй делать на голенг перепишут. Большая компания. Они облако развивают.
Да уйдет и уйдет, ваще поебать. Направление работы остается тем же.
Дохуя пхп макак и го тыкает периодически и с фронтом работает.
В рамках одного направления хули бы не полистать доку и не перекатиться тихонько.
Мем смешной, ситуация страшная.
Пруфстер, а ты видел где-то обратное? Ты где видел какой-то рост пхп?
Какбы факт падения даже не обсуждается. Весь спор идет только о том насколько быстро падает.
>Направление работы остается тем же
И каким же, долбоебина? Копаться в битрикс кале? Заебись направление. Перспективное.
>И каким же, долбоебина? Копаться в битрикс кале? Заебись направление. Перспективное
Веб разработка, шлюха тупорылая.
Просто отвалился вордпресс. Популярность лары, симфы и yii никуда не делась, че высрать-то хотел?
Верь, не верь. А там уже сейчас свой мир с ебанутыми фасадами и классами, которые пол фреймворка наследуют.
А что интересно?
Гайд из шапки двенадцатилетней давности? Или мнение долбоебов которые в треде пять лет сидят, но не то что работать, ни одной строчки кода не написали?
>А что интересно?
>Гайд из шапки двенадцатилетней давности? Или мнение долбоебов которые в треде пять лет сидят, но не то что работать, ни одной строчки кода не написали?
Неиронично это интересней очередного хуесоса пиздобольного с ютуба с кликбейтом для даунов типа тебя.
>Ребята примите в php семью
А зачем тебе? Работа на PHP это по сути даже не айти. Так, веб скриптинг
Они там "уже написаны". И ты будешь только все это гвоно перставлять, а не код писать.
А надо каждый раз с нуля все хуярить, чтобы быть ТРУ?
Такое кукарекать может только петушара, которая ни на кассе никогда не стояла, ни траншеи не копала, ни даже за пределы мкада не выезжала, скорее всего.
Опять троллинг тупостью, еблуша не в кусре, что такое фреймворк
> Как только на жабоскрипте взлетит аналог ларавеля
Не взлетит они спринг копируют или пыху десятилетней давности
>То что делало пхп долю рынка огромной - вордпресс перекатывают на жабоскрипт. И перекатят.
Это правда или твоя фантазия?
Поплачь еще
>>лежит JS со всем его дремучим легаси
> Каким нахуй легаси? Жс макаки уже сто лет как пишут на подмножествах языка типа ECMAScript и тайпскрипта и никакого "легаси" в глаза не видели.
ECMAScript это и есть тонна дремучего легаси. Примеры:
- можно обратиться к несуществующему свойству объекта и не будет исключения
- можно делить на ноль и не будет исключения
- до сих пор есть глобальные переменные, достаточно забыть слово let
>>Назови аналог Доктрины, Симфони на тайпскрипте?
> Ну вот https://typeorm.io/ ,
Нет UnitOfWork (методов вроде flush()), надо вручную каждую сущность сохранять. Иногда это неплохо, но иногда хочется больше автоматизации.
Интересно, кстати, что он так похож на Доктрину, что переучиться наверно можно за день. Такие же классы с аннотациями, как будто с PHP никуда и не уходил. У них еще и валидатор похож на тот, что в Симфони. Ну правда, все почти как в PHP.
Но вот PHP не надо компилировать при редактировании, а тайпскрипт надо. Да, там система типов получше, но в PHP через phpDoc тоже можно сложные типы городить.
> Вся эта орм-спринг залупа заебала всех в край еще лет десять назад.
Ты считаешь, что база данных больше не нужны и не актуальны? Или какую альтернативу ты предлагаешь для ORM? Руками SQL-запросы писать? Напиши конкретно.
При импорте ты можешь создать синоним:
use function My\longNamedFunction as lnf;
Но это ухудшит читабельность и понятность. Мне не хочется расшифровывать сокращения при чтении кода.
Я об этом написал в своем посте, но может быть я плохо выразил мысль. На схеме у Фаулера изображен Репозиторий и у него есть (увеличено на твоей картинке) Стратегия сохранения данных, в данном примере это Стратегия сохранения в память. Но само название "Стратегия" подразумевает что она может быть заменена на другую Стратегию - например, Стратегию сохранения в БД, Стратегию сохранения в key-value хранилище и тд. Слово "strategy" в названии это отсылка к паттерну Стратегия. Там не написано "in-memory storage", а "in-memory strategy"
То есть, на диаграмме у Фаулера показана идея, что есть Репозиторий, с которым работает код, а в качестве бекенда к Репозиторию можно подключить одну из Стратегий, и таким образом выбрать, куда будут сохраняться данные. Логика сохранения данных специально вынесена из Репозитория в Стратегию, чтобы ее можно было менять. Но я бы назвал Стратегию (заменяемой) частью Репозитория.
Фаулер не имел в виду, что Репозиторий всегда хранит данные в памяти. Он имел в виду, что можно выбирать, где их хранить, с помощью смены Стратегии.
> Проектировать репозитории нужно без орм, доктрин-хуин и sql дерьма. Потому что эта залупа разрастается как раковая опухоль и начинает диктовать свои условия и влиять на проектируемые решения.
Так а куда данные сохранять? Ты от БД предлагаешь отказаться или предлагаешь какой-то альтернативный способ сохранять данные? Какой?
Что-то платят мало. Переходи на го, тут повкуснее предложения:
- https://spb.hh.ru/vacancy/107385037?query=%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA+Go&hhtmFrom=vacancy_search_list
- https://spb.hh.ru/vacancy/107897289?query=%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA+Go&hhtmFrom=vacancy_search_list
Или на Си++ хотя бы:
- https://spb.hh.ru/vacancy/107634243?query=%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA+Go&hhtmFrom=vacancy_search_list (судя по описанию, работа унылая, но зато избавит от риска мобилизации)
Ты все упрощаешь. Перевод сайта на SPA имеет и недостатки:
- медленная загрузка, покажи мне SPA, которое при холодной загрузке показывает контент, а не крутящийся круг
- большая нагрузка на браузер из-за мегабайтов, как правило, не оптимизированного JS-кода
Поэтому, если можно сразу отдать с сервера контент и не требуется особой интерактивности, то я бы предпочел рендерить на сервере.
Но я сам использую Vue для написания простых бессерверных приложений для себя (интерактивные прототипы UI, простая программа для развития слуха). Vue и реактивное программирования мне нравятся для задач, где важно сделать как можно быстрее, когда без разницы производительность и скорость загрузки.
Что касается Го, я ловлю себя на мысли, что было бы интересно попробовать писать на нем нативные GUI-приложения с GTK вместо Си++, так как он более высокоуровневый и в нем есть сборка мусора. Если там есть еще какая-то реактивная или data binding библиотека, я определенно хотел бы попробовать написать, например, простую DAW или отладчик. Хотя Go не для этого делался, но все равно хочется попробовать.
> микросервисы
Отличный способ тратить деньги работодателя и время, не принося ничего взамен.
Залупа ты понурая. В том-то и дело что In memory стратегия превична. И остальные стратегии не должны протекать в репозиторий и менять его. В in memory стратегии нет save, значит и во всех остальных нет.
>Так а куда данные сохранять?
Туда же куда и раньше. Просто делать это надо не в репозитории. Твоя же любимая доктрина именно так и работает. Ты просто меняешь свойства объектов. А уже потом, когда контроллер отработал вызывается flush в специальной мидлвари, и доктрина чекает все изменения объектов, которые лежат в identity map и выполняет нужные sql запросы.
И ты не учел, что перейти с PHP на другой язык, например, Питон или Го, относительно легко. Так что если завтра PHP закончится, я могу писать на Си, Раст, Питон, Го, JS, Тайпскрипт, и на других языках при наличии документации.
А почему такое падение в 2021? Оно больше напоминает какую-то техническую ошибку (отвалился один из источников данных или поменялся способ подсчета), чем массовый уход с PHP. Массовый уход выглядел бы скорее как наклонная прямая или экспонента, а не резкий скачок.
А то как-то странно, тут за 1 неделю половина разработчиков ушла с PHP.
>И ты не учел, что перейти с PHP на другой язык, например, Питон или Го, относительно легко
Потому что...? Да хуй знает почему, просто высрал хуйню.
Все буквально наоборот. Пхп со всем остальным программированием пересекается минимально. Пхп макаки литературно не знают никакого CS и ни на каком другом языке писать не умеют, еще и на более низкоуровневом. 90% пхп макак даже ооп не осилили. Так и хуярят скриптовые портянки, а классы используют как папки для функций.
Доктрина в репозиториях ничего не хранит, обычно это просто набор методов findBySomething, которые делают запрос и возвращают список сущностей. Доктрина хранит все в Identity Map и UnitOfWork.
> А уже потом, когда контроллер отработал вызывается flush в специальной мидлвари,
В Доктрине нет middleware никакой. Ты, наверно, имел в виду middleware из какого-то фреймворка.
> и доктрина чекает все изменения объектов, которые лежат в identity map и выполняет нужные sql запросы.
Верно.
> В том-то и дело что In memory стратегия превична. И остальные стратегии не должны протекать в репозиторий и менять его.
Стратегия подразумевает возможность заменить ее на любую другую. Очевидно, что в примере in-memory используется для упрощения диаграммы, чтобы не рисовать, как данные идут дальше в ORM и в базу данных.
И прочитай еще раз внимательно статью: https://martinfowler.com/eaaCatalog/repository.html
> A Repository mediates between the domain and data mapping layers
Написано, что это слой между доменной моделью и слоем сохранения данных.
Откуда ты взял число 90%? Ты исследование читал или проводил? А то я так же могу тебе много чего рассказать про 90% TypeScript и Го-разработчиков.
Ну конечно блядь, разумеется. Пхп макаки это титаны мысли. Именно таких свергениев-уберменшей и производит среда из битрикса, ларавеля и вордпресса.
>Стратегия подразумевает возможность заменить ее на любую другую.
Ноу щит шерлок. Именно поэтому интерфейс, общий для ВСЕХ стратегий, определяется In memory стратегией, а не sql залупой.
>A Repository mediates between the domain and data mapping layers
>Написано, что это слой между доменной моделью и слоем сохранения данных.
Ебать ты чтец залупоглазый. "Data mapping" оказываетвся переводится как СОХРАНЕНИЕ.
Вся суть. Двух слов прочитать не может, но на серьезном ебале пытается кого-то поучать, о чем-то спорить. Пустая трата времени - пытаться таким оленям что-то объяснить.
Ебать тебя трясет ИТТ. Тебя когда-то толпа пхпшников изнасиловала?
Для того, чтобы освоить другой язык В РАМКАХ ТОЙ СФЕРЫ, В КОТОРОЙ ТЫ И ТАК РАБОТАЕШЬ, не надо быть гением мысли.
Сферы, хуеры. Давай побольше пизди.
Чтобы в эти сферы устроиться тебе придется пройти собес, на котором тебе будут два часа водить хуем по губам, а твой охуительно полезный опыт писанины на пхп даже читать никто не будет. Да ты и сам его из резюме вырежешь, чтобы не позориться, когда поймешь что без него приглашают чаще.
Учил питон до пыхи, трогал плюсы в молодости.
Так джава и сложнее х2
Хуй с ним с потолком, но хули большинство работодателей в рф считает что пыхарю джуну не нужно платить больше 30-40к когда в других языках давно уже зп от 70к
>потолок здесь ниже, чем в го/джаве. Т.е. условный сеньор на джаве это 500к, а на пыхе - 300
Забыл добавить что чистый пыхарь столько не получает, либо фулстак либо пыхарь-гошник
Хуйню не неси, даже в моей говногалере чистый пыхарь-сеньор 300 получает, фронт не трогает, го в помине нет
Да я прикололся чтоб проверить реально ли есть лохи сеньки пашущие за 300к и реально один такой вылез
Я знал что тебя это заденет и ты скинешь именно эту пикчу
Ты даже не программист нихуя а стремящийся шкила
О, шиз, который нонстоп тут хуячит "пыхеры больше 250 не получают", как дела?
Ты тот же шиз, который про "пхп не нужен, все перепишут на джс и го" затирает частенько?
>ECMAScript это и есть тонна дремучего легаси.
Люто двачаю весь js мир это тонны легаси с обратной совместимостью, там даже новые версии ничего не исправят
Ты даже не пытаешься работать тонко, додик...