Сохранен 695
https://2ch.hk/pr/res/2975215.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Клуб изучающих PHP#136 /php/

 Аноним 24/12/23 Вск 16:00:09 #1 №2975215 
php-noob-01-new-year.png
cat-cafe-osaka.jpg
anime-girls-studying-elephant-3.jpg
anime-girls-studying-programming.jpg
Кто-то уже празднует, а мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

Предыдущий тред был тут: >>2932466 (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 (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- сколько времени надо изучать все это? - все зависит от тебя, в районе 12-24 месяцев
Аноним 24/12/23 Вск 16:01:46 #2 №2975219 
В шапке что-то не то? Пишите предложения по улучшению.

Не ответили в предыдущих 10 тредах? Ну напишите в 11-й раз, вдруг ответят.

На праздниках скорость ответа может быть о-о-очень медленной.
Аноним 24/12/23 Вск 16:20:36 #3 №2975264 
ОП, спасибо за ответ из прошлого треда.
У меня все-таки два вопроса...Ага!

Как считаешь, как мне стоит поступить в этой ситуации:

Мне нужно выводить Enrollee и ErrorList в html-коде.
Я хочу перекинуть значения из объектов в массив и выводить как-то так:
$enrollee['name']
Короче, я просто хочу, чтобы в html-коде не было логики получения значения из объекта, по типу:
$enrollee->get('name')

Пока что я придумал 3 варианта:

1) Создать ViewHelper, добавить в него методы:
public function escapeMetacharacters(string $text): string

public function getEnrolleeArray(Enrollee $enrollee): array

public function getErrorListArray(ErrorList $errors): array

(разные методы нужны, потому что Enrollee и ErrorList хранят значения по-разному и инструкции для получения этих значений - разные)
+ метод, чтобы получать названия полей объекта.

2) Создать ViewHelper, добавить в него методы:
public function escapeMetacharacters(string $text): string
+ метод, чтобы получать названия полей объекта.

Наследовать от него двум классам: EnrolleeViewHelper и ErrorListViewHelper, у каждого будет соот. метод:
public function getEnrolleeArray(Enrollee $enrollee): array
или
public function getErrorListArray(ErrorList $errors): array

3) Не делать классы, объявить функции в отдельном файле и сделать require_once в контроллере.

Еще один вариант - сделать класс EnrolleeFormHelper, скинуть в него все вышеописанные методы и сделать их статическими.

Ну и еще вопрос, который меня волнует, я сделал функцию переноса значений из $_POST в Enrollee, куда мне ее девать?
Объявлять в отдельный файл и делать require_once в контроллере или добавлять в класс EnrolleeFormHelper?

Кстати, код:
Как я планирую переносить значения из $_POST в Enrollee:
https://3v4l.org/c7B5i
Я думаю также убрать new Enrollee() и принимать на вход функции переменную-ссылку на объект Enrollee и на выход - ничего, просто объект будет меняться в ходе функции.

Класс ViewHelper:
https://3v4l.org/GFXlX
Я уберу потом ReflectionClass как свойство.
Просто показываю код, чтобы нагляднее было.
EnrolleeVH: https://3v4l.org/OqvAD
ErrorListVH: https://3v4l.org/TfEmJ
И я еще сделал им интерфейс, но нужен ли он вообще?
https://3v4l.org/HeDFm
Аноним 24/12/23 Вск 19:55:04 #4 №2975788 
Бля, я ненавижу регулярки всею душою и просто пишу это для облегчения души. Ради интереса, может кто рассказать как составить цельную регулярку для пOиCKA лATиHицы в CлOBAX? Объединение результатов /w[a-z][а-я]/w и /w[а-я][a-z]/w не устраивает аутиста внутри меня
Аноним 24/12/23 Вск 20:36:34 #5 №2975854 
>>2975788
Я не пишу идеальные регулярки, но дам совет: чтобы понимать регулярные выражения, нужно рассматривать их как описание из каких символов состоит слово.

Например, опишем простые имена на русском:
Иван, Катя, Андрей
Из чего состоят эти слова? Сначала идет одна заглавная, потом несколько строчных букв русского алфавита.

На языке регулярок можно написать так:
[А-ЯЁ]{1}[а-яё]+

Можно читать как: одна заглавная буква русского алфавита, от 1 до бесконечности строчных букв русского алфавита

Как описать имена через дефис на русском:
Мария-Антуанетта
Анна-Мария

Эти слова состоят из: одна заглавная буква русского алфавита, некоторое количество строчных букв русского алфавита, один дефис, заглавная буква русского алфавита, несколько строчных букв русского алфавита.

Регулярка может выглядеть как-то так:
[А-ЯЁ]{1}[а-яё]+-{1}[А-ЯЁ]{1}[а-яё]+

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

Сайт для работы с регулярками, если не знал о нем: https://regex101.com/

Статья на хабре, можно листать до таблиц с обозначением синтаксиса: https://habr.com/ru/companies/otus/articles/484048/

Ну и да, чего ты добиться хотел своими регулярками я не понял. Можешь написать подробнее.

Ну и да, у ОПа в мануале, в шапке, есть учебник по php, там урок по регулярным выражениям, весь синтаксис там описан.
Аноним 24/12/23 Вск 20:40:56 #6 №2975858 
>>2975788
Ну и еще: нужно хорошо понимать что делает каждый элемент регулярных выражений, если ты ставишь квадратные скобки, не зная что они значат в синтаксисе, то будет путаница.
Аноним 24/12/23 Вск 21:28:38 #7 №2975945 
>>2973449 →
https://github.com/libin9iOak/ja-netfilter-all
Переведи гуглом и выполни пошагово
>>2975854
>>2975858
Спасибо за ответ, я уже знал это. Я как раз спрашивал про часть решения одной из задач по регуляркам из шапки. Нужно найти слова с заменами букв на латиницу (Oчень, слOво, хорошO), подсказка к задаче предлагает два поиска по регулярному выражению, первый ищет латинскую букву в слове после кирилической, второй после буквы кирилицы:
1) \w([а-я][a-z])\w\ui
2) \w([a-z][а-я])\w\ui
Если переписать с добавлением опциональных групп перед и после латиницы \w([a-z][а-я][a-z])\w\ui оно будет матчить ещё и полностью латинские слова, как быть?
Аноним 24/12/23 Вск 21:30:34 #8 №2975951 
>>2975945
От сука разметка символы сожрала, в третьей регулярке стоит * перед двумя диапазонами латинских символов
Аноним 24/12/23 Вск 21:34:36 #9 №2975955 
>>2975945
>https://github.com/libin9iOak/ja-netfilter-all
>Переведи гуглом и выполни пошагово
>Спасибо за ответ, я уже знал это. Я как раз спрашивал про часть решения одной из задач по регуляркам из шапки. Нужно найти слова с заменами букв на латиницу (Oчень, слOво, хорошO), подсказка к задаче предлагает два поиска по регулярному выражению, первый ищет латинскую букву в слове после кирилической, второй после буквы кирилицы:
>1) \w([а-я][a-z])\w\ui
>2) \w([a-z][а-я])\w\ui
>Если переписать с добавлением опциональных групп перед и после латиницы \w([a-z][а-я][a-z])\w\ui оно будет матчить ещё и полностью латинские слова, как быть?
Есть же |
\w([а-я][a-z])\w|\w([a-z][а-я])\w\ui
Аноним 24/12/23 Вск 21:37:09 #10 №2975961 
>>2975955
>Есть же |
>\w([а-я][a-z])\w|\w([a-z][а-я])\w\ui
Точнее даже
\w([а-я][a-z]|[a-z][а-я])\w\ui
Сделай ещё нежадный захват для обоих \w (\w*?), чтобы слово целиком матчилось.
sage[mailto:sage] Аноним 24/12/23 Вск 21:41:33 #11 №2975967 
>>2973449 →
https://blog.llinh9ra.ru/%D1%81%D0%BE%D1%84%D1%82/%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D1%8F-phpstorm-2022-1-4/
Это работало для меня, ссыль на гит протухла
Аноним 25/12/23 Пнд 10:02:20 #12 №2976646 
Стоит ли учить Yii? Я смотрю очень много вакансий по нему
Аноним 25/12/23 Пнд 10:08:32 #13 №2976651 
>>2976646
Хули там "учить"?
Аноним 25/12/23 Пнд 10:32:49 #14 №2976672 
А что будет, если я на собесе случайно скажу "пэ-ха-пэ", а не "пи-эйч-пи"?
Аноним 25/12/23 Пнд 12:19:54 #15 №2976778 
>>2975264

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

> Я хочу перекинуть значения из объектов в массив и выводить как-то так:
> $enrollee['name']

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

> Короче, я просто хочу, чтобы в html-коде не было логики получения значения из объекта, по типу:
> $enrollee->get('name')
А что в этом плохого? Конечно, лучше бы там было getName(), а не get('name').

Что касается экранирования, оно нужно так часто, что его можно даже сделать функцией вроде escape(), чтобы короче было писать. Если ты используешь автозагрузку через композер, то в нее можно прописать файл с функциями.

> Ну и еще вопрос, который меня волнует, я сделал функцию переноса значений из $_POST в Enrollee, куда мне ее девать?

Наверно в отдельный файл (utils.php). Еще можно сделать Utility Class со статическим методом и в него поместить код.

> $valueField = trim($valueField);
trim превращает число обратно в строку. Это надо раньше ставить. Также, в английском порядок слов обратный, то есть "значение поля" пишется как fieldValue.

> Я думаю также убрать new Enrollee() и принимать на вход функции переменную-ссылку на объект Enrollee и на выход - ничего, просто объект будет меняться в ходе функции.

Ок.
Аноним 25/12/23 Пнд 15:09:39 #16 №2976983 
Как перед собесом запомнить все эти стандартные функции? Мне кажется это не реально просто выучить.
Аноним 25/12/23 Пнд 15:22:30 #17 №2977011 
Лампово у вас тут.
Аноним 25/12/23 Пнд 16:55:28 #18 №2977125 
>>2976983
Зачем это заучивать?
Решаешь задачки, пишешь проекты и все само запомнится.
Аноним 26/12/23 Втр 09:53:50 #19 №2977921 
>>2976778
Спасибо за ответ.
>А что в этом плохого?
Я думал, что вид $name или $enrollee['name'] более лаконичный и удобочитаемый.
Кстати, а что ты думаешь о том, как я буду получать значения из объекта ErrorList:
$errors->implode(" ", getListOfFieldErrors('name'));
Т.е. сначала я получаю массив, где ключи - 0, 1, 2..., а элементы - строки. Потом я сшиваю их.
Я читал одну из твоих статей и там говорилось, что, по возможности, не стоит использовать встроенные функции в html-коде.
Как мне тут поступить?
Оставить как есть?
Преобразовать где-то в контроллере, а потом вывести как строку в html?
Аноним 26/12/23 Втр 09:58:20 #20 №2977926 
>>2977921
>$errors->implode(" ", getListOfFieldErrors('name'));
Я сейчас попробовал и такая запись не прокатит, ага :D
Аноним 26/12/23 Втр 09:59:58 #21 №2977929 
>>2977926
implode(" ", $errors->getListOfFieldErrors('name'));
Аноним 26/12/23 Втр 10:10:49 #22 №2977943 
>>2976983
Codewars же.
Идеально для запоминания всех этих функций
Аноним 26/12/23 Втр 10:40:03 #23 №2977980 
>>2976778
>Конечно, лучше бы там было getName(), а не get('name')
В прошлом треде ты советовал мне, если и использовать магию для создания сеттеров и геттеров, то использовать __call.

Я додумался только до такого варианта реализации: https://3v4l.org/WILb3

Как раньше я получал значение поля в валидаторе: у класса валидатора есть свойство-массив, ключи которого - строки - названия полей Enrollee.
И я просто вызывал $enrollee->get('name')

А сейчас что?
Как вариант - подготавливать название метода, чтобы получить значение.

Например, так:
Получить название поля, заменить первую строчную букву на заглавную, соединить название поля со строкой "get".
Вызывать метод с таким названием.
Как-то так: https://3v4l.org/MpibO
Как вариант, чтобы не ебаться с заменой регистра первой буквы - хранить название поля сразу с большой буквы

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

https://3v4l.org/v85Gq
Аноним 26/12/23 Втр 11:11:13 #24 №2978025 
>>2977980
Ну и да, как еще один вариант реализации __call под геттер/сеттер:
https://3v4l.org/dOVZM
Аноним 26/12/23 Втр 12:00:51 #25 №2978089 
>>2973449 →

Почему вы все ищете, где можно украсть пирастский иностранный продукт? Почему программисты не объединятся и не сделают свой открытый редактор?

Ну хотя бы взял бы VSCode, подключил phpactor и исправил там несколько багов.
Аноним 26/12/23 Втр 12:05:36 #26 №2978093 
>>2977921

> $errors->implode(" ", getListOfFieldErrors('name'));

Это неправильно. В PHP уже есть функция implode, зачем ты делаешь в объекте ее копию? И объект для хранения ошибок вообще не должен беспокоиться о том, как их потом выводить.

> Я читал одну из твоих статей и там говорилось, что, по возможности, не стоит использовать встроенные функции в html-коде.

Да, это правда не моя статья (о чем в начале написано). Я думаю, что этот совет не очень хороший. Функции для обработки строк и массивов типа implode использовать можно. Не рекомендуется использовать такие вещи:

- обращения к переменным типа $_GET, $_POST, $COOKIES напрямую
- вызовы функций для работы с БД, типа $pdo->execute('SELECT 2 + 2');

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

> Преобразовать где-то в контроллере, а потом вывести как строку в html?

В шаблоне получить из объекта список ошибок и склеить их, в том числе с помощью implode.
Аноним 26/12/23 Втр 12:12:41 #27 №2978105 
>>2978093
Окей, спасибо за ответ.
В прошлом треде ты писал, что лучше писать DIContainer по PSR-11, я читал PSR-11, но у меня был тупняк из-за того, что нет функции регистрации сервисов.
Сегодня решил почитать одну из статей, код из этой статьи:
https://3v4l.org/oAk18
Мне стоит реализовывать DIContainer как там?

Сама статья: https://habr.com/ru/articles/655399/
Аноним 26/12/23 Втр 12:15:36 #28 №2978114 
>>2978105
А вообще, стоп.
Автор вроде опустил момент с тем, чтобы не создавать один и тот же объект каждый раз...Я думаю, переписать немного get, добавить свойство - созданные объекты и все будет нормально.Но в любом случае, он мог ответить на вопрос где регистрировать сервисы - в конструкторе.
Аноним 26/12/23 Втр 12:16:49 #29 №2978117 
>>2977980

Я предлагаю такую логику для __call:

- если пользователь вызывает getXXX, то:
-- если поле XXX существует, вернуть его значение
-- иначе, выбросить исключение, видимо пользователь опечатался
- если пользователь вызывает setXXX, то действовать аналогично

То есть при обращении с правильным разванием ты делаешь обращение к полю, с неправильным - выбрасываешь исключение.

Дополнительно можно сделать аннотации #[Setter] и #[Getter] к полям, и разрешить через магический метод обращаться только к тем полям, где есть аннотация. То есть, делать доступными не все поля, а только часть.

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

> Я додумался только до такого варианта реализации: https://3v4l.org/WILb3

В регулярках нету ^ и $. В имени поля могут быть цифры. Имя поля можно извлекать из регулярки через скобки, например:

if (preg_match('/^get(....)$/', $name, $m)) ...

> А сейчас что?
> Как вариант - подготавливать название метода, чтобы получить значение.

Да, надо формировать из имени поля название геттера. Либо можно оставить твой метод get(...), но тогда валидатор будет поддерживать лишь классы с таким методом, а не любые.

В Симфони есть целый компонент PropertyAccess для таких задач.

> Получить название поля, заменить первую строчную букву на заглавную, соединить название поля со строкой "get".

Норм. Можно даже функцию или метод в utility class для этого сделать (вызвать геттер по имени поля).

> Как вариант, чтобы не ебаться с заменой регистра первой буквы - хранить название поля сразу с большой буквы

Не надо.
Аноним 26/12/23 Втр 12:25:19 #30 №2978142 
>>2978025

Вместо exit надо бросать исключение. return 1 писать не надо (зачем? что ты будешь делать с этой единицей?).

Для надежности советую еще проверять число аргументов и тоже бросать иключение.

Если хочется, метод __call можно засунуть в трейт.

> if (!($prefix === 'set' && $prefix !== 'get' || $prefix === 'get' && $prefix !== 'set')) {

Что за фигня? Просто $prefix !== 'get' && $prefix !== 'set' или !in_array($prefix, ['get', 'set']).

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

В остальном норм.
Аноним 26/12/23 Втр 12:30:55 #31 №2978154 
>>2978105

PSR-11 это интерфейс только для получения сервисов. Регистрацию ты делаешь как хочешь.

Это на самом деле правильно, что они сделали интерфейс только для части функционала. Так и надо делать - интерфейс представляет способность объекта выполнить какое-то действие (выдать экземляр сервиса), а не описывает все его методы.

> Сегодня решил почитать одну из статей, код из этой статьи:
> https://3v4l.org/oAk18

Можно, но тут список сервисов как бы встроен в контейнер намертво. Это не очень красиво с точки зрения ООП. Например, ты не сможешь использовать этот контейнер в другом проекте с другими сервисами.А контейнер с регистрацией более универсальный и переносимый между проектами.

Также, там не реализовано запоминание созданного объекта.

Также вместо имен типа user.repository лучше использовать имя класса UserRepository::class.
Аноним 26/12/23 Втр 12:32:03 #32 №2978155 
>>2978142
>return 1 писать не надо (зачем? что ты будешь делать с этой единицей?).

Разве php не будет ругаться?
Когда указываешь тип возвращаемого значения и ничего не возвращаешь (а сеттер обычно ничего не возвращает), то возникает ошибка. Вроде так, разве нет?
Аноним 26/12/23 Втр 12:42:27 #33 №2978165 
>>2978142
>Если хочется, метод __call можно засунуть в трейт.

Если добавлять этот метод в трейт, мб его нужно распилить на геттер и сеттер, чтобы классы брали только то, что им нужно - либо и то и то, либо что-то одно? У меня ведь часть классов не нуждается в сеттере, но геттер вполне был бы полезен им.
Аноним 26/12/23 Втр 12:59:15 #34 №2978184 
>>2978089
Может вкатунам в PHP ещё и замену PHP написать чтобы два раза со стула не вставать? Ну а чё, он же всё равно будет заменён, так чё ждать если можно заменить его самому
Аноним 26/12/23 Втр 13:05:32 #35 №2978192 
>>2978155

Ну так убери тайп-хинт mixed тогда, если функция может ничего не возвращать.

> Если добавлять этот метод в трейт, мб его нужно распилить на геттер и сеттер, чтобы классы брали только то, что им нужно - либо и то и то, либо что-то одно? У меня ведь часть классов не нуждается в сеттере, но геттер вполне был бы полезен им.

Это лучше решить использованием атрибутов, то есть явно помечать поля с геттерами или сеттерами.

>>2978184

Так PHP это открытый код. Ты какую-то глупость написал.
Аноним 26/12/23 Втр 13:05:39 #36 №2978193 
>>2978184
Уже есть голанг. Скоро на него перепишут все сайты.
Аноним 26/12/23 Втр 13:52:46 #37 №2978259 
>>2976646
>Стоит ли учить Yii? Я смотрю очень много вакансий по нему

А че учить? Приходишь на работу на Yii не зная Yii. Там тебя возьмут за готовность писать на этом говне мамонта
Аноним 26/12/23 Втр 16:56:01 #38 №2978812 
>>2978192
Я дописал, норм?
https://3v4l.org/oq2BZ
Аноним 26/12/23 Втр 16:59:46 #39 №2978822 
>>2978812
Ладно, стоило все-таки потестить сначала класс, чем скидывать!
Нашел мелкие проблемы.
Аноним 26/12/23 Втр 17:07:41 #40 №2978835 
>>2978822
Все вроде бы исправил:
https://3v4l.org/NpEpS
Аноним 26/12/23 Втр 17:10:59 #41 №2978841 
>>2978822
Т.е. не класс, а трейт, ага!
Аноним 26/12/23 Втр 18:12:11 #42 №2978930 
>>2978154
Я немного переписал прошлый DIContainer:
https://3v4l.org/DvVbH
Аноним 26/12/23 Втр 20:15:15 #43 №2979073 
Снимок.JPG
Почему не коммитится?
Аноним 27/12/23 Срд 00:18:32 #44 №2979400 
Как подружить nginx и php на винде?
Аноним 27/12/23 Срд 00:22:26 #45 №2979404 
>>2979400
Купи им платья, туфельки. Одень, усади на маленькие стульчики за маленький столик и налей им чаю в маленькие фарфоровые чашечки. Это будет добро и дружба на долгие годы.
Аноним 27/12/23 Срд 00:55:18 #46 №2979409 
>>2979404
У меня при открытии php файла происходит его загрузка
Аноним 27/12/23 Срд 02:16:40 #47 №2979450 
>>2979409
А у меня при открытии php файла происходит его редактирование.
Аноним 27/12/23 Срд 09:42:29 #48 №2979580 
>>2979400
Нужно писать не "подружить", а писать что конкретно не работает.
Аноним 27/12/23 Срд 10:44:32 #49 №2979607 
>>2979400
Откуда мы знаем, что ты там делаешь? Ты там опенсервер поставили или ксамп, а может вообще пытаешься через докер запустить? Вариантов миллион. Учись задавать вопросы.
Аноним 27/12/23 Срд 11:41:30 #50 №2979639 
Можно ли создавать Entity в Symfony не через консольную утилиту?
Аноним 27/12/23 Срд 12:23:55 #51 №2979665 
>>2979639
https://www.doctrine-project.org/projects/doctrine-orm/en/2.17/reference/basic-mapping.html
Аноним 27/12/23 Срд 12:25:24 #52 №2979668 
>>2978835

Названия длинноваты (но это у многих начинающих так, не беда):

$fieldNameFirstChar -> $firstChar
methodAllowedToBeUsedOnProperty -> getPropertyAccessMethods

В вызове get можно проверять, что аргументов 0.

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

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

[ Имя поля => список разрешенных методов (get, set) ]

Но, если подумать, то можно пойти еще дальше. Можно кешировать не список разрешенных методов, а функцию-геттер/сеттер. То есть, чтобы было так:

- При первом вызове типа getName срабатывает вся магия, все проверки, и генерируется функция-геттер и кладется в массив-кеш
- При повторном вызове она просто берется из массива и вызывается

Массив имеет вид:

[ имя геттера/сеттера => функция-геттер/сеттер ]

По типу:

['getName' => fn () => $this->name]

То есть, идея в том, чтобы сделать повторный вызов геттера как можно короче и не делать кучу проверок каждый раз.
Аноним 27/12/23 Срд 12:31:23 #53 №2979673 
>>2978930

Пара советов. Во-первых, исключения правильнее называть не по названию класса, который их бросает, а по типу ошибки:

ServiceAlreadyRegisteredException extends DIException
ServiceNotFoundException extends DiException

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

Обрати внимание, что в PSR-11 для исключений даны интерфейсы.

При регистрации можно использовать короткие анонимные функции:

$container->register(Some::class, fn () => new Some(1, 2, 3));

Также, если ты хочешь реализовать PSR-11, то ты должен не делать свой интерфейс ContainerInterface, а подключить интерфейсы с помощью композера.
Аноним 27/12/23 Срд 12:32:58 #54 №2979674 
>>2979073

Что значит "не коммитится"? Я не вижу на скриншоте запроса COMMIT.

Или ты хотел спросить, почему не подсоединяется к БД? Проверь логин/пароль, название базы, запущена ли СУБД.
Аноним 27/12/23 Срд 12:34:14 #55 №2979676 
>>2979409

Это значит, что у тебя не настроено в сервере, что надо для PHP файлов вызвать интерпретатор PHP. Готовые советы есть в интернете, даже в документации nginx есть пример. Обычно запускают php-fpm и nginx настраивают, чтобы он передавал ему запросы.
Аноним 27/12/23 Срд 12:34:52 #56 №2979677 
>>2979639

Можно руками просто создать файл.
Аноним 27/12/23 Срд 13:12:23 #57 №2979707 
>>2979676
А можешь гайд скинуть рабочий? Я пробовал как в документации пишут: https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
ещё с гитхаба статью но все равно не обрабатывает
Аноним 27/12/23 Срд 13:26:08 #58 №2979721 
>>2979707
У меня апач, но, мб это поможет.
Конфигурационный файл настроен?
Даже если настроен так, как написано в гайде, может оказаться, что какую-то инструкцию автор гайда пропустил.
Можно где-то посмотреть текст ошибки?
Там еще какая-то ебка с тем, используешь ли ты браузер, чтобы открывать файл php или запрашиваешь этот файл с локального своего сервера.
Я ставил апач давно, поэтому помню туманно с чем может быть ебка.
Аноним 27/12/23 Срд 13:39:48 #59 №2979726 
>>2979721
Если открываешь php в браузере как файл, например:
c://localhost/example.php
То ничего обрабатываться не будет и браузер покажет просто код.
Если пишешь в адресной строке браузера:
http://localhost/example.php
Код обрабатывается и выводится результат кода.
Аноним 27/12/23 Срд 13:40:39 #60 №2979727 
>>2979726
Это все апач, что там с nginx я не ебу.
Аноним 27/12/23 Срд 14:18:09 #61 №2979758 
>>2979665
>>2979677
А почему в шторме не сделают кнопку создания с красивой формой? За что мы вообще деньги платим?
Аноним 27/12/23 Срд 15:11:29 #62 №2979834 
17036422584940.png
Есть шансы на вкат в пхп или лучше в голанг вкатываться?
Аноним 27/12/23 Срд 15:58:32 #63 №2979891 
>>2979834
образование есть? Без технического диплома на работу сейчас не берут. Даже Письмо Деду Морозу не читают
Аноним 27/12/23 Срд 16:18:59 #64 №2979921 
>>2979891
Есть. Дед Мороз пересылает письма работодателям что ли?
Аноним 27/12/23 Срд 16:33:04 #65 №2979971 
Как думаете чтоб в мухосранске в веб-студию устроиться человеком-оркестром фуллкеком на пхп и вью, то для этого надо учить всякие там микросервисы, redis, rabbitmq, kafka?
Аноним 27/12/23 Срд 17:24:02 #66 №2980067 
>>2979673
Спасибо за ответ.
Я исправлю это позже.

Мы как-то с тобой обсуждали классы-проверятели-валидации.
И там было два класса: один проверяет структуру значения, другой - что значение содержит валидные символы.

Меня смущает выбранная мною формулировка для текста ошибки:
'Поле должно иметь следующий вид: %s. Вы написали - %s.';

Например, пользователь напишет: ИвАн, моей проверке на структуру не понравится этот вариант, потому что она допускает заглавные буквы только в определенном месте слова.
И как тогда будет звучать текст ошибки?

'Поле должно иметь следующий вид: бла-бла. Вы написали - ИвАн';

Получается я заставляю пользователя самому думать почему программа не принимает его вариант.

Наверное стоит все-таки переписать?

Кстати, я выбрал такие формулировки для текста ошибок (хотя такое лучше показывать пользователю до того, как он начнет вбивать значения в поля):

Для имени:
Сайт принимает 3 типа имен:
1) простое имя, пример: Анна;
2) имя с апострофом, пример: О'Генри;
3) имя с дефисом, пример: Анна-Мария.

Заглавные буквы русского алфавита можно использовать только в таких случаях:
1) первая буква простого имени;
2) первая и вторая буквы имени с апострофом;
3) первая буква и первая буква после дефиса в имени с дефисом.

Для фамилии:
Сайт принимает 5 типов фамилий:
1) простая фамилия, пример: Иванов;
2) фамилия с апострофом, пример: Д'Арк;
3) фамилия с пробелом, пример: Сан Антуан Кристоф;
4) фамилия с дефисом, пример: Римский-Корсаков;
5) фамилия со скобками, пример: Иванов(Римский).

Заглавные буквы русского алфавита можно использовать только в таких случаях:
1) первая буква простой фамилии;
2) первая и вторая буквы фамилии с апострофом;
3) первая буква и первые буквы после пробела;
4) первая буква и первая буква после дефиса;
5) первая буква и первая буква после открывающей скобки.
Аноним 27/12/23 Срд 17:53:37 #67 №2980099 
16946796652791.mp4
Аноним 27/12/23 Срд 18:47:35 #68 №2980213 
>>2979668
Кажется переделал: https://3v4l.org/Jfpr9

Ты не мог бы объяснить мне как работает область видимости переменных у стрелочных функций?
Аноним 27/12/23 Срд 19:27:34 #69 №2980281 
>>2980099
Мог бы кариес свой ебучий и пролечить раз такой бохатый
🎄осударь
Аноним 27/12/23 Срд 19:28:30 #70 №2980285 
>>2979971
backend без очередей как стрипуха без блядей
Аноним 27/12/23 Срд 20:49:41 #71 №2980369 
>>2979834
В голанг с нуля не вкатываются, там сразу Эльф нужен
Аноним 27/12/23 Срд 21:26:27 #72 №2980428 
>>2980067
Кто тебе сказал, что твои правила верные?
Как минимум имя бывает составное через пробелы. У моих детей, например, по два имени, но нет отчества, потому что они родились в Канаде, их российский паспорт выдан на основании канадского свидетельства о рождении, в котором нет никакого отчества, зато есть middle name (оно опциональное, но мы Прочитали дать).
В странах Южной Америки могут вообще 10 имён дать. Так чисто по приколу записать кучу святых, чтобы они присматривали за ребёнком лол.
А ещё у нас тут есть индейцы, у которых может быть одно имя вместо имени-фамилии. Я не знаю, как это в России разруливают.
У одного из детей Маска есть цифры в имени.

Короче говоря, не надо думать, что ты щас покроешь всё норм валидацией, и всё будет хорошо. Обязательно что-нибудь упустишь.
Так что просто проверяй на пустоту и обрезай пробелы по краям, больше ничего не надо.
Аноним 27/12/23 Срд 22:12:19 #73 №2980485 
>>2979707

В статье написано в самом начале:

> This guide assume 🎄 FPM already installed and configured either using tcp port (127.0.0.1:9000) or unix socket (/var/run/🎄-fpm.sock).

У тебя настроен 🎄-fpm? Вряд ли, какой может быть unix-сокет под виндой. Тебе надо заменить unix-сокет на использование TCP-порта.
Аноним 27/12/23 Срд 22:24:48 #74 №2980491 
Пхп теперь место куда идут питонисты не выдержавшие конкурс 2500 откликов на вакансию? Вкат через пхп тоже все?
Аноним 27/12/23 Срд 22:27:32 #75 №2980493 
>>2980491
>Вкат через пхп тоже все?
Да. Шалуны поняли что им ничего не светит на пайтоне и огромной толпой ринулись изучать 🎄. Это конец.
Аноним 27/12/23 Срд 22:29:06 #76 №2980500 
>>2980493
Опять питонисты все испортили
Аноним 28/12/23 Чтв 15:02:29 #77 №2981227 
>>2979673
>в PSR-11 для исключений даны интерфейсы
Я не представляю что мне с ними делать.
Вся моя работа с исключениями, на данный момент, заключается в том, что я просто создаю класс-исключение, делаю extends от Exception и выкидываю исключения с текстом ошибки.
И я не знаю что я должен делать, чтобы из интерфейсов исключений получить что-то, что можно использовать в коде...
Аноним 28/12/23 Чтв 15:56:09 #78 №2981311 
>>2979673
Еще как вариант - можно не проверять регистр вообще, а принимать значение как есть, если оно подходит под хотя бы один тип, и изменять регистр самому.
Тогда текст ошибки будет указывать только на то, что имена или фамилии такого типа не поддерживаются сайтом.
Да-да, я понимаю, что имена и фамилии бывают разными и кому-то может не понравиться, что его имя или фамилия не проходят по системе, но я не хочу писать идеальную валидацию для имен и фамилий. Я не хочу, чтобы моя валидация покрывала все случаи. Ты как-то скидывал ссылку какие символы могут использоваться в ФИО. Я часть не стал брать. Хотя бы потому что не могу нагуглить пример использования таких символов в имени. Не лучше ли вместо того, чтобы задрачиваться, Читать Белый Медведькие проблемы по мере их появления? Все-таки те системы, которые валидируют ФИО, сами могут заниматься тем, что добавляют варианты, которые раньше не допускали, потому что узнают, что существует кто-то, кто должен проходить валидацию, но система валидации под него не заточена.
Аноним 28/12/23 Чтв 16:40:58 #79 №2981375 
>>2981227
>>2979673
Я сделал так: https://3v4l.org/rcZVi
Я установил пакет через composer
Попробовал в VSCode, вроде как все работает.
Аноним 28/12/23 Чтв 20:38:05 #80 №2981767 
>>2975264
>getEnrolleeArray
>getErrorListArray
Зачем тебе венгерская нотация, если у тебя и так есть тип в сигнатуре?
Аноним 28/12/23 Чтв 20:44:14 #81 №2981777 
>>2977980
>использовать __call
Советую его не слушать, и писать максимально простой и читабельный код, магия в 🎄е это зло, которое надо под корень уничтожать, чем уже успешно занимаются в новых версиях 🎄, объявив устаревшим динамические объявления свойств объекта
Аноним 28/12/23 Чтв 20:49:43 #82 №2981783 
>>2979758
>>2979639
https://www.jetbrains.com/help/🎄storm/live-templates-list-symfony.🕛#symfony-live-templates-reference
Аноним 28/12/23 Чтв 20:54:38 #83 №2981785 
🎄 тред в какую-то метаиронию на самого себя превратился? Один не может загуглить как создавать энтити через шторм, другой мускли изучает, третий изобрел Новогодний Репертуар 🎄 винда нжинкса, четвертый не может загуглить шорткаты иде и дергает рефлексию ради геттеров. Обязательно вернусь снова следить за вашими результатами аноны!
Аноним 28/12/23 Чтв 20:56:16 #84 №2981787 
>>2981785
Уровень интеллекта в айти упал. В пхп соответственно тоже
Аноним 28/12/23 Чтв 22:43:51 #85 №2981938 
>>2981785

Ты не понимаешь, что использование атрибутов и магии это не то же самое, что использование автогенерации кода?
Аноним 28/12/23 Чтв 23:33:14 #86 №2981982 
>>2981938
Да, понимаю, только зачем делать магию на сеттеры-геттеры? Это:
1)Лишние действия
2)Отсутствие автокомплита от IDE
3)Отсутствие статического анализа от 🎄стана
Так какие преимущества?
Аноним 29/12/23 Птн 19:54:15 #87 №2982871 
Никогда не обращал внимания на последовательность вызовов в Stack trace, который показывают наследники Throwable. А сейчас обратил и немного нихуя не понял.

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

https://3v4l.org/G3O1t

Я как-то изначально ожидал, что line 20 будет первым (индекс 0) элементом Новогодний Репертуара, раз они идут от глубокого к поверхности. А она последний элемент Новогодний Репертуара. Но при этом они идут от глубокого к поверхности.

То есть, trace[0] это момент вызова функции, которая бросила исключение. А trace[(count(trace) - 1)] - непосредственно throw. Они в разных концах, хотя на деле оно идёт после другого.
Аноним 29/12/23 Птн 19:57:58 #88 №2982878 
>>2982871
> хотя на деле одно идёт после другого.
Аноним 29/12/23 Птн 21:24:21 #89 №2982969 
>>2982871
line 20 вообще нет в Новогодний Репертуаре. Сначала пишется Новогодний Репертуар вызова функций, а потом (отдельно) приписывается, на какой линии произошёл выброс.
Новогодний Репертуар:
#0 /in/G3O1t(16): five()
#1 /in/G3O1t(12): four()
#2 /in/G3O1t(8): three()
#3 /in/G3O1t(4): two()
#4 /in/G3O1t(23): one()
#5 {main}

(отдельно дописано, к Новогодний Репертуару не относится)
thrown in /in/G3O1t on line 20

https://3v4l.org/YLQnV
Аноним 29/12/23 Птн 21:28:11 #90 №2982976 
Петон фсё
Аноним 29/12/23 Птн 21:52:03 #91 №2983039 
>>2982976
>Петон фсё
И даже небо, и даже Аллах?
Аноним 29/12/23 Птн 21:59:21 #92 №2983056 
Пользуетесь мпв плеером? Это лучший плеер
Аноним 30/12/23 Суб 02:44:56 #93 №2983401 
>>2982871
>Ну и нахуя пхп дегенератам знать что такое Новогодний Репертуар?
>Пхп дегенераты: а пачиму исключение не в Новогодний Репертуаре?
Умоляю, скажи что ты тот самый слабоумный с рефлексией и геттерами, если вас несколько я веру в людей совсем потеряю.
Аноним 30/12/23 Суб 11:38:26 #94 №2983488 
Здарова мужики! Препод пригласил на стажировку в его компанию. Новогодний Репертуар Yii 2, Switch API, могу ошибаться ибо не знаю таких вещей. Попрошу посоветовать книги, курсы для продвинутого погружения в пхп и начала изучения Yii, а дальше разберусь
Аноним 30/12/23 Суб 12:45:58 #95 №2983513 
>>2983488
1) Yii2 это древний сухой кал говна. В 2к23 нахуй никому не нужен.
2) Вся инфа по фреймворку есть в блоге автора фреймворка https://rmcreative.ru/
3) Хули твой препод тебя "продвинуто" не погрузил? Пусть теперь на стажировке отрабатывает.
Аноним 30/12/23 Суб 13:02:32 #96 №2983520 
>>2983513
1. Препод сказал тоже самое
3. Это не мой препод, долго объяснять
Аноним 30/12/23 Суб 13:20:22 #97 №2983524 
>>2983520
Почитай доку (не шучу) Ларавеля. После нее доку Юии2 усвоишь буквально за вечер тру стори

Это как во Детям в костюмах звёздочек. Если знаешь Реакт, то легко выучишь за вечер Вуе тру стори

А ещё узнай, что там делают на Юии2 - рест апи или Дети в костюмах снежинок, который прям отдает отрендеренный 🕛. А ещё узнай, нужны ли знания Дети в костюмах звёздочека, чтобы не обосраться

А так не расстраивайся, что Юии2 - легасное говно. Потом найдешь работу на Симфони или Ларке
Аноним 30/12/23 Суб 13:21:01 #98 №2983525 
>>2983524
Как же заебала эта автоzамена, блять
Аноним 30/12/23 Суб 13:26:03 #99 №2983528 
>>2983525
>Как же заебала эта автоzамена, блять
Двачую
Аноним 30/12/23 Суб 13:27:04 #100 №2983529 
>>2983525
тричую
Аноним 30/12/23 Суб 13:27:10 #101 №2983530 
>>2983525
Хуй разберешь что означает каждая замена.
Аноним 30/12/23 Суб 13:33:18 #102 №2983532 
>>2983524
В доке ларки прям есть раздел "concepts", который прям поясняет за работу всех MVC-фреймворков и рест апи, на чем бы их не писали.

Хотя дока пхп-фреймворков упускает пару важных моментов. Это работа с Докером, HTTP-серверами (Nginx маст хэв), БД и SQL

Вас >>2983488 нормально в вузе гоняли по SQL и задачкам?
Аноним 30/12/23 Суб 15:06:42 #103 №2983656 
Может кто-нибудь дать простое определение бизнес-логики и пример?
Аноним 30/12/23 Суб 16:48:31 #104 №2983750 
>>2983656
Если бы у бабушки был хуй, то она была бы дедушкой.
Аноним 30/12/23 Суб 22:11:13 #105 №2984309 
>>2983656

Бизнес-логика - это правила "предметной области". "Предметная область" - это то, что моделирует приложение, ради чего оно пишется.

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

Кроме бизнес-логики, есть еще "техническая" логика, например: логгирование, логика отправки email-ов и тд, обработка ошибок.
Аноним 31/12/23 Вск 18:34:11 #106 №2984811 
image.png
С наступающим новым годом, анончики.
Аноним 31/12/23 Вск 18:45:05 #107 №2984819 
1704037477071.png
>>2984811
С наступающим!
Аноним 31/12/23 Вск 19:44:23 #108 №2984849 
>>2983656
Какой мудак вообще додумался до словосочетания "бизнес-логика", эти правила обычно уёбищно нелогичные.
Аноним 31/12/23 Вск 20:27:57 #109 №2984923 
>>2984849
Дымоходы они такие, да...
Аноним 31/12/23 Вск 21:47:38 #110 №2984985 
>>2975215 (OP)
Сап программач.
Раньше занимался веб Белый Медведьоткой за Сюрприз от Зайчика, сейчас перекатился в другую сферу и подвернулась подработка, требуется сделать сайт. Я не ебу как оценить сколько за это просить. Грубо говоря требуется сделать корпоративный сайт с несколькими страницами материалов. Также должна быть страница администрирования для изменения материалов сайта. Доступ к материалам только зарегистрированным пользователям. Собсна сколько просить за это?
Аноним 31/12/23 Вск 22:21:55 #111 №2985019 
изображение.png
Пиздос, с новым годом всех нас Шалунов и вкатившимся тоже
Аноним 31/12/23 Вск 23:08:27 #112 №2985050 
С наступающим, 🎄ны
Аноним 01/01/24 Пнд 20:47:15 #113 №2985541 
>>2980067

> Заглавные буквы русского алфавита можно использовать только в таких случаях:

Можно описать это проще: заглавная буква может стоять только в начале строки, после проблела, апострофа или дефиса. И проверять это одной регуляркой.
Аноним 01/01/24 Пнд 20:50:02 #114 №2985547 
>>2980213

А в мануале не написано? Стрелочные функции "захватывают" упомянутые в них переменные в момент создания.

$x = 1;
$f = fn() => $x; // функция захватывает текущее значение $x
$x = 2;
echo $f(); // 1

Что касается аргументов, то они видны только внутри функции:

// переменная $a видна только внутри функции
$f = fn($a) => $a + $a;
Аноним 01/01/24 Пнд 20:53:04 #115 №2985552 
>>2981227

> Я не представляю что мне с ними делать.

При ошибке ты бросаешь исключение. Для этого ты должен сделать исключение, которое реализует указанный в PSR-11 интерфейс.

Например, если сервис не найден в get() , то ты должен выбросить исключение любого класса, который реализует интерфейс Psr\Container\NotFoundExceptionInterface. Для этого достаточно просто дописать implements ... в твой класс исключения.

Почему интерфейс? Потому, что контейнеры от разных авторов могут использовать разные исключения с разными полями и методами, и интерфейс позволяет их объединить.
Аноним 01/01/24 Пнд 20:55:41 #116 №2985555 
>>2981227

Точнее, интерфейс позволяет пометить, что это именно исключение обозначает "сервис не найден". Интерфейс без методов, он только для добавления пометки к классу.

>>2981311

Можно автоматически исправлять. А ссылка, которую я давал как раз составлена на основе реального опыта работы с именами.
Аноним 01/01/24 Пнд 20:57:55 #117 №2985558 
>>2981375

Норм, только имена можно укоротить. Но можно и оставить так.

Для интерфейсов исключений надо дописать use. У них же неймспейс есть.

AttemptingToRegisterServiceUsingBusyName -> ServiceAlreadyRegisteredException

AttemptToObtainOrCreateUnregisteredService -> ServiceNotFoundException
Аноним 01/01/24 Пнд 21:10:27 #118 №2985572 
>>2980213

Не идеально, можно оптимизировать еще.

У тебя идет: сначала пара проверок правильности имени, а только потом это:

> if (isset(self::$listOfGettersAndSetters[$name]) && $prefix === 'get') {

Можно было бы поставить обращение к кешу в самое начало. Если функция есть в кеше, значит она прошла проверки и можно ее не проверять. Этим мы еще чуть-чуть ускорим работу с кешированными свойствами.

> $properties = $property->getAttributes();
переменную надо назвать $reflAttributes

> if ($methodName === 'Setter') {
... === Setter::class

Кстати, каждый экзепляр стрелочной функции это объект класса Closure (см мануал). В нем даже где-то хранятся запомненные значения переменных: https://3v4l.org/3rXUW
Аноним 01/01/24 Пнд 21:11:33 #119 №2985573 
>>2981777

Магия тут просто генерирует геттеры/сеттер в помеченным атрибутом полям, она не добавляет свойства динамически.
Аноним 01/01/24 Пнд 21:13:30 #120 №2985577 
>>2981777

То есть, добавляет функции типа getAge/setAge к полю age.

>>2981982

Объем кода меньше, читать легче, править легче, меньше времени тратишь на изучение, меньше денег тратишь на это.

Было бы конечно хорошо, если бы для геттеров/сеттеров что-то было в языке.
Аноним 01/01/24 Пнд 21:15:03 #121 №2985581 
>>2981982

Для статического анализа можно добавить @method перед классом.

>>2980213

О кстати, вопрос от анона мне подкинул идею. А может вместо атрибутов Getter/Setter смотреть доступ к полю по наличию аннотации @method getAge() ? Хотя это сложновато будет...
Аноним 01/01/24 Пнд 21:19:04 #122 №2985587 
>>2982871

Новогодний Репертуартрейс тут надо читать снизу вверх. То есть мы вызывали one, она two и так до функции five, где и выбросилось исключение. По моему, стандарта нет, в разных языках пишут то сверху вниз, то снизу вверх.

На номера типа #0 вообще смотреть не надо. Они тут явно от балды стоят.

> А trace[(count(trace) - 1)] - непосредственно throw. Они в разных концах, хотя на деле оно идёт после другого.

Неверно. throw находится в функции five(), которая в трейсе под индексом #0. То, что написано внизу "thrown in...", это как бы отдельно от списка функций.
Аноним 01/01/24 Пнд 21:20:06 #123 №2985589 
>>2982969

Да, перед именем функции указано из какой строки она была вызвана, например вызов five() идет в 16-й строке. Это тоже где как делают, никакого стандарта нет.
Аноним 02/01/24 Втр 13:26:13 #124 №2986015 
>>2985581
Окей. Спасибо за ответы.
>Хотя это сложновато будет...
Мб когда-нибудь я возьмусь, ага!..
Пока что не представляю как это можно реализовать.
Но все-таки когда-то нужно будет разобраться как работать с аннотациями.
>>2985547
>А в мануале не написано?
Написано! Но я хотел твою версию объяснения.
Те же атрибуты тоже описаны в мануале, есть статьи по ним, но +- я начал представлять что это такое и как своими ручками что-то с ними делать только после твоего объяснения.
Когда впервые узнал о таком поведении замыканий, я ничего не понял и отложил это знание. А ты довольно-таки просто объяснил суть. Официальный мануал по php это хорошо, но только тогда, когда изначально пришел к нему +- подготовленным, потому что часто формулировка подается сухо (не упрекаю мануал, все-таки мануал должен содержать четкую и лаконичную форму, чтобы легче было поверять какие-то моменты в работе языка) и лучше сначала прочитать простое объяснение, а потом читать формальное.

>>2985572
>... === Setter::class
Как ты считаешь лучше: создавать для атрибута класс или нет? Тот же php советует, но я пока что не вижу нужды в том, чтобы под атрибут создавать отдельный класс. Все-таки в своем коде я смотрю на наличие атрибута, а не использую объекты класса-атрибута.
Аноним 02/01/24 Втр 16:56:38 #125 №2986255 
>>2976672
ссылка в гулаг
Аноним 04/01/24 Чтв 08:54:30 #126 №2988324 
Только у меня появился баг в шторме, что нажимаешь коммит и пуш, шторм начинает анализировать код, а дальше ничего не происходит, как будто я кнопку не нажимал. Потом нажимаю вторую раз и он снова анализирует код и выдаёт своё тупое предупреждение, что типа там есть ошибки и стоит ли отправлять коммит. Жму энивей и только тогда происходит работа. В итоге сейчас жму кнопку 3 раза! За что мы вообще платим деньги!?
Аноним 04/01/24 Чтв 11:04:44 #127 №2988363 
Screenshot 2024-01-04 105829.png
>>2988324
>За что мы вообще платим деньги!?
Хуй знает за что. Лучше бы купил на эти деньги пиздатые очки.
Аноним 04/01/24 Чтв 12:32:38 #128 №2988439 
>>2988363
Думаешь, кто-то в РНР-треде понимает что ты там написал по-английски в коммите?
Аноним 04/01/24 Чтв 17:28:44 #129 №2988733 
Нужно ли учить бандлы Симфони?
Аноним 04/01/24 Чтв 17:38:23 #130 №2988742 
>>2988733
Как ты их научишь? Они же не люди...
Аноним 04/01/24 Чтв 19:54:28 #131 №2989020 
Когда стоит использовать require, а когда require_once?
Разницу между ними знаю, но не могу понять критерий выбора.
Аноним 04/01/24 Чтв 22:41:26 #132 №2989254 
>>2989020
>Разницу между ними знаю
Не знаешь.
Аноним 04/01/24 Чтв 23:10:55 #133 №2989282 
>>2989254
Прочитай еще раз мой вопрос. Прочитай еще раз свой ответ. Я не спрашивал, знаю я или нет.
Аноним 05/01/24 Птн 07:05:24 #134 №2989523 
>>2989020
>разницу знаю но не могу ее принять понять
Аноним 05/01/24 Птн 08:45:15 #135 №2989564 
>>2989020
Используй композер
Аноним 05/01/24 Птн 11:42:47 #136 №2989626 
>>2976646
Это все легасные параши. Кто-то там наговнякал и свинтил в туман, а ты в этом обмазываться решил.
Аноним 05/01/24 Птн 11:51:11 #137 №2989634 
>>2979971
Разве смысл веб-студии не в штамповке несложных сайтиков на коленке? Нахуй там нужны очереди, кеши и микросервисы?
Я бы никому не советовал связываться с кабанчиком, который не имея своей ниши хватается за разработку любой сложности и трясет своих разрабов за сроки работы. Это адская работенка чреватая скорым выгоранием. Такое лучше обходить десятой дорогой.
Аноним 05/01/24 Птн 12:31:53 #138 №2989655 
>>2989634
Насколько я знаю, там задачи чёкнутые. Типа там за сто тыщ надо сделать свою кастомную CMS, на которой можно делать сайты для розничной торговли и вести учёт проданного, налогов и ещё чего-то там. Хуй знает чем существующие CMS не угодили, ну надо почему-то заказчику кастомную делать при том в Мухосрани, на коленке и чтоб нубы студенты за копейки делали. Короче заказы сложные, платят мало, логики в заказах нет, они сумасшедшие. Но сгодится для того чтоб залутать наконец первый год опыта
Аноним 05/01/24 Птн 12:44:40 #139 №2989660 
>>2989655
В ИТ очень много проходимцев - надо быть внимательным и смотреть к кому идешь работать. Иначе банально выебут, высушат и ничего не заработаешь.
Когда вкатывался на каких только поехавших не насмотрелся. Часто, например, в разработку лезут какие-то левые окатыши, у которых никакого опыта в этой сфере как у руководителей. Нередко ещё и предлагают списочек требований со страницу А4 на зарплату курьера доставки.
Аноним 05/01/24 Птн 12:46:23 #140 №2989661 
>>2989660
>Когда вкатывался на каких только поехавших не насмотрелся.
Это ж шанс в нынешнее страшное время получить первый пруфнутый стаж
Аноним 05/01/24 Птн 12:52:11 #141 №2989663 
>>2989660
>зарплату курьера доставки
Вообще-то, в прошлом году они превзошли по заработку программистов
Аноним 05/01/24 Птн 12:53:02 #142 №2989665 
>>2989661
Даже первую работу надо искать более-менее внятную, а не хвататься за первое попавшееся дерьмо. Во-первых, тебя могут банально кинуть, во-вторых ты там ничему не научишься, и в-третьих тебя все равно будут на собесе спрашивать - что ты там делал, а в таких шарашках у тебя только один вариант - грести легаси говно за гроши. Такая себе заслуга для работодателя.
Аноним 05/01/24 Птн 12:55:25 #143 №2989666 
>>2989663
Ну так это смотря в какой компании. А вообще, хороший маркер появился у нас - если предлагают котлету как у курьера, то идут нахуй сразу.
Аноним 06/01/24 Суб 12:38:53 #144 №2990978 
По Симфони сам разработчик написал пошаговый туториал в виде книги, чтобы можно было ознакомиться с фреймвёрком. А по Лараверю что-то ничего подобного найти не могу. Есть документация, но это справочник, а хотелось бы учебник. Есть ли подобные текстовые ресурсы для пошагового изучения Ларавеля? Он по идее популярный, но что-то ничего найти не могу.
Аноним 06/01/24 Суб 18:55:37 #145 №2991311 
>>2985581
Как считаешь правильно поступить в этой ситуации:
Насчет того же валидатора, ага.
У меня есть главный класс - Валидатор и классы-проверятели-правил.

Я должен передавать объект TDG как зависимость моему валидатору или классу-проверятелю, который проверяет уникальность емайл?

Учитывая то, что мой валидатор можно настраиваться и в него вообще может не попасть проверка на уникальность емайл, я думаю, что мне нужно добавлять эту зависимость в класс-проверятель.

Если так, то получается, что класс-проверятель я уже буду регистрировать в DIContainer?

Остальные классы-проверятели я не планировал регистрировать в
DIContainer. Потому что у них нет зависимостей и потому что у этих классов может быть несколько объектов с разным содержимым, у класса, проверяющий уникальность емайл, этого нет и есть зависимость.
Ну и еще в пользу этого:
Если я не буду регистрировать этот класс-проверятель в DIContainer, то как я буду разрешать его зависимость в виде объекта TDG?
Я думаю, что раз уж я выбрал, что буду разрешать зависимости так, то нужно и дальше это соблюдать?
Аноним 06/01/24 Суб 18:57:34 #146 №2991315 
>>2990978
Я не читал конкретно этот учебник, но
Вот неплохой сайт, который публикует уроки по языкам программирования и т.д.:
https://code.mu/ru/php/framework/laravel/book/prime/

Пролистай, мб подойдет.
Аноним 06/01/24 Суб 19:09:10 #147 №2991336 
>>2985581
Я еще решил распилить класс-проверятель, который проверяет структуру строки.

Список классов:
ValidSymbolPosition = проверяет, что символ находится на определенной позиции, конкретно, им я хочу проверять, что апостроф будет находиться ровно на 1-ой позиции (считая от 0).

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

SymbolIsPresentBecauseThereIsAnotherSymbol = проверяет, что если строка содержит определенный символ, то она обязана содержать и другой определенный символ, планирую использовать для тех же скобок, потому что если есть открывающая скобка, то обязательна должна быть и закрывающая.

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

NumberOfSymbolIsValid = проверяет, что строка содержит символ определенное количество раз, планирую проверять, что апостроф и @ содержатся в строке ровно 1 раз.

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

Отдельно:
Я до этого писал о том, что буду проверять имена и фамилии на то, что они соответствуют определенному типу (для имени это - простое имя (состоящее только из букв русского алфавита), имя с апострофом, с дефисом), но потом я решил, что строго нужно проверять только определенные типы. Для имени это имена с апострофом, для фамилии - фамилии с апострофом, со скобками.

И я решил так.
Как я буду регистрировать валидатор для студента в DIContainer:
сначала создам массив, в него добавлю нужные классы-правила, а потом сделаю условие, если имя содержит апостроф, фамилия содержит апостроф/хотя бы одну из скобок, то соот. классы, которые проверяют что-то связанное с апострофом/скобками, будут добавлены в массив. А потом уже этот массив в конструктор.
Аноним 06/01/24 Суб 19:57:49 #148 №2991390 
А как вы изучали фреймвёрки?
Аноним 07/01/24 Вск 00:47:13 #149 №2991580 
>>2986015

> Как ты считаешь лучше: создавать для атрибута класс или нет?

По моему, должен быть единообразный подход. Либо всегда создавать, либо никогда. Классы имеют такие преимущества: тип аргументов проверяется при создании объекта, можно писать к ним комментарии.

>>2989020

Это редко сейчас используется. require_once используется, если ты хочешь подключить файл с функциями или классами вручную. require если ты хочешь прочитать какой-то конфиг.
Аноним 07/01/24 Вск 00:50:07 #150 №2991581 
>>2991311

TDG передается туда, где нужно, то есть в класс-правило. Валидатор про этот TDG знать ничего не должен.

Класс-правило можно положить (а можно не класть) в контейнер, если у него нет параметров. Если при создании надо указывать какие-то параметры, то придется создавать ручками.

> Если я не буду регистрировать этот класс-проверятель в DIContainer, то как я буду разрешать его зависимость в виде объекта TDG?

Ручками передашь в конструктор. DI не обязывает создавать все через контейнер.
Аноним 07/01/24 Вск 01:01:03 #151 №2991582 
>>2991336

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

Вот, например, многие из твоих правил можно реализовать правилом, проверяющим соответствие строки регулярке. Например: проверить, что перед апострофом ровно одна буква:

new MatchesRegexp('/^\pL`[^`]$|^[^`]$/', 'Апостроф можно использовать только после первой буквы имени')

Язык регулярок придумывался как раз для таких проверок. Или это правило не дает хорошее сообщение об ошибке?

> ValidSymbolPosition = проверяет, что символ находится на определенной позиции, конкретно, им я хочу проверять, что апостроф будет находиться ровно на 1-ой позиции (считая от 0).

Может лучше так: SubstringBeforeMatches - если в строке есть символ, то подстрока перед ним должна соответствовать регулярке. Ну или описанное выше правило проверки регуляркой.

> ValidSpacingBetweenCharacters =
> SymbolIsPresentBecauseThereIsAnotherSymbol =

Я бы объединил в MatchingPair, которая позволяет проверять наличие парного символа (что закрывающий символ есть и идет за открывающим).

> StringContainsSubstring = проверяет, что строка содержит указанную подстроку, планирую проверять емайл на то, что перед @ есть определенный набор символов
> NumberOfSymbolIsValid

Это слишком универсально, и, наверно, ни для чего кроме email, не понадобится. Советую сделать просто валидатор ValidEmail, и в него заложить несколько проверок и сообщений на разные случаи.

> сначала создам массив, в него добавлю нужные классы-правила, а потом сделаю условие, если имя содержит апостроф, фамилия содержит апостроф/хотя бы одну из скобок, то соот. классы, которые проверяют что-то связанное с апострофом/скобками, будут добавлены в массив. А потом уже этот массив в конструктор.

Как-то костыльно выглядит. Думаю, набор правил лучше сделать постоянным, чтобы упростить понимание кода. Иначе ты Логику проверки выносишь в код, который формирует список правил.
Аноним 07/01/24 Вск 08:40:41 #152 №2991655 
Я так понял, если хочешь на фуллстек, то учишь Лару, а если чистый бэк, то Симфони?
Аноним 07/01/24 Вск 08:45:00 #153 №2991656 
>>2991655
Ты плохо понял. Хочешь фулстак - устраиваешься в обычную средне/мелко галеру. Хочешь чистый бек - натаскиваешься для трудоустройства во всякие авито.
Аноним 07/01/24 Вск 08:50:09 #154 №2991661 
>>2991656
Т.е. можно выучить Лару и устроится чистым бэком? Мне почему-то казалась, что Лару создавали, чтобы быстро разобраться и начать клепать сайты, а у Симфони более фундаментальный подход и она больше заточена под солидный бэкенд.
Аноним 07/01/24 Вск 08:52:32 #155 №2991664 
>>2991661
Монописуально. На большом проекте может быть самописное легаси с большой вероятностью. Симфони с ларками в вебстудиях - галерах.
Аноним 07/01/24 Вск 08:54:44 #156 №2991667 
>>2991664
Дак что учить для чистого бэкенда?
Аноним 07/01/24 Вск 08:55:53 #157 №2991668 
>>2991667
Базу
Аноним 07/01/24 Вск 08:58:24 #158 №2991669 
>>2991668
Postgresql?
Аноним 07/01/24 Вск 08:59:42 #159 №2991670 
>>2991669
Cormen
Аноним 07/01/24 Вск 19:07:26 #160 №2992417 
Пригласили на стажировку, сказали закинут на техподдержку. Чем обычно занимаются там?

Какие продукты делают на Took 2?
Аноним 07/01/24 Вск 19:07:46 #161 №2992418 
>>2992417
Yiij 2*
Аноним 07/01/24 Вск 19:50:48 #162 №2992489 
>>2991582
Спасибо за ответ, но я все равно запутался.
У меня есть перечень правил для структуры строк, которые я хочу, чтобы соблюдались:
Для имен и фамилий с апострофом:
1) Апостроф можно использовать только 1 раз;
2) Апостроф должен быть 2-ым символом, считая от 1-го.
Для фамилий со скобками:
1) Использовать скобки можно только 1 раз;
2) Сначала должна идти открывающая, а потом закрывающая скобка;
3) Если есть одна скобка, то должна быть вторая.
Для емайла:
1) Уникальное имя почты должно начинаться с латинской буквы или цифры;
2) Емайл должен содержать уникальное имя почты (нельзя, чтобы перед @ ничего не стояло);
3) Емайл должен оканчиваться доменным именем (его реальное существование не проверяется, проверяется только структура, что там латинские буквы + точка + латинские буквы);
4) Емайл обязательно должен содержать символ @ и обязательно в единичном количестве.
Для года рождения:
1) Первая цифра должна быть от 1 до 2.
Для баллов ЕГЭ:
1) Первая цифра должна быть от 1 до 3.

Я могу попробовать сделать регулярные выражения, которые проверяют эти правила и реализовать все одним классом-правилом MatchesRegexp.

Есть одно "но". А что делать с секцией Имя и Фамилия? Я принимаю имена, которые либо просто состоят из букв русского алфавита, либо с апострофом, либо с дефисом, фамилии тоже самое, только + фамилии со скобками и пробелами.
Проверять нужно только с апострофом и со скобками.
Я не знаю какое значение на сервер придет из поле для Имени и Фамилии, может прийти имя, полностью, состоящее просто из букв, т.е. проверять его не надо. И что мне делать? Я другого выхода не вижу, кроме как добавить условие, что значение для имени и фамилии проверяется, если оно содержит апостроф/скобки.
Как вариант, можно использовать эту функцию - mb_substr_count.
Аноним 07/01/24 Вск 19:54:07 #163 №2992500 
>>2991582
Я только сейчас задумался, если я все равно проверяю год рождения и баллы ЕГЭ на адекватность - то, что они входят в валидный диапазон чисел, то, мб и не надо проверять их структуру?

У меня есть 2 проверки для этих полей:
Число должно входить в определенный диапазон;
Значение должно состоять только из цифр.

Ага!
Аноним 07/01/24 Вск 19:57:43 #164 №2992509 
>>2991582
>можно использовать эту функцию - mb_substr_count

Можно проверять такое условие:
if (mb_substr_count($name, "тут апостроф, пишу буквами, а то непонятно") !== 0) {
$validationRules['name'] = new MatchesRegexp('regexp', 'errorText');
}
Аноним 07/01/24 Вск 20:22:27 #165 №2992563 
Если выучить Ларавель, то есть шанс не попасть на фуллстека? Или всё таки лучше учить Симфони?
Аноним 07/01/24 Вск 21:30:48 #166 №2992689 
>>2991582
В прошлом треде ты давал мне ответы по поводу идентификации, аутентификации, авторизации.
Я все равно не понимаю что мне делать.
Ты предлагаешь три публичных метода в классе Авторизация:
1) Залогинить пользователя = установить куки с токеном;
2) Определить текущего пользователя = получить объект с данными студента;
3) Разлогинить пользователя.

Я понимаю так:
Когда я буду добавлять запись о новом пользователе в БД, я должен буду выдать токен в куки пользователю и положить токен в БД.
Потом на каждой странице я должен буду проверять наличие этого токена, чтобы отображать страницы так, как их нужно отображать для знакомого сайту пользователя (предлагать, мб, на главной, где будет список абитуриентов, ссылку редактировать свои данные).
И если залогиненный пользователь перейдет на страницу редактирования информации, то я должен буду выгрузить из БД его данные и заполнить форму, а пользователь уже сам исправит их и пришлет на сервер $_POST.

Методы залогинить и определить в таком ключе я понимаю, я не понимаю зачем мне нужно разлогинить пользователя.

И вообще, вот ты давал определения идентификации, аутентификации, авторизации и пример. Я это понял (хотя бы как мог). Но мне трудно переложить их на свою ситуацию. У меня нет логина, а, как я понял, идентификация это о том, кто пытается войти, а как я, имея токен просто в куки, скажу кто? Ну, просто пользователь с установленной кукой. Потом идет аутентификация, является ли тот, кто пытается войти, тем, кем он себя называет. Не ответив на вопрос о том, кто пытается войти, могу ли я ответить на вопрос о том, он ли этот кто-то?
Аноним 07/01/24 Вск 23:17:10 #167 №2992780 
>>2990978
Ты хочешь сказать, что знаешь Симфони, но не способен разобраться в Ларавел, который мало того, что проще чем Симфони так ещё и построен на его компонентах?
Аноним 07/01/24 Вск 23:21:52 #168 №2992782 
>>2991661
>начать клепать сайты
>фреймворк
Для сайтов есть CMS, а фреймворки для более кастомных проектов различные апишки, crm, какие-то онлайн-магазины, саас-сервисы и тд.
Аноним 07/01/24 Вск 23:25:52 #169 №2992784 
>>2992417
Компания случайно не с VIP начинается?
Аноним 08/01/24 Пнд 01:06:58 #170 №2992854 
philosophythroughtheagesaristotledescratesnietzschebertrandrussellcslewisliljon.jpg
>>2992689
>Не ответив на вопрос о том, кто пытается войти в айти, могу ли я ответить на вопрос о том, я ли этот кто-то?
Этим глубоким философским вопросом можно подвести итог нескольких последних тредов.
Аноним 08/01/24 Пнд 02:04:19 #171 №2992884 
>>2992489

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

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

Может, конечно, этого не хватит, и придется для какого-то случая сделать отдельное правило.

Например:

> Апостроф можно использовать только 1 раз;
> Апостроф должен быть 2-ым символом, считая от 1-го.

Это все проверяется 2 регулярками.

> Использовать скобки можно только 1 раз;
> Сначала должна идти открывающая, а потом закрывающая скобка;
> Если есть одна скобка, то должна быть вторая.

Это скорее всего тоже.

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

> Первая цифра должна быть от 1 до 2.
> Первая цифра должна быть от 1 до 3.

Это можео сделать через регулярки.

> Проверять нужно только с апострофом и со скобками.

А ты можешь сделать регуляру в стиле:

- или в строке нет апострофов, или он только один
- или в строке нет апострофов или он идет вторым

Или же, ты можешь сделать чуть усложненное правило с 2 регулярками, которое применяет вторую только если строка соответствует первой. То есть, проверяет положение апофстрофа если в строке он есть.
Аноним 08/01/24 Пнд 02:05:04 #172 №2992886 
>>2992500

> Я только сейчас задумался, если я все равно проверяю год рождения и баллы ЕГЭ на адекватность - то, что они входят в валидный диапазон чисел, то, мб и не надо проверять их структуру?

Верно.
Аноним 08/01/24 Пнд 02:08:37 #173 №2992887 
>>2992509

Так не надо делать. Логика проверки должна быть в валидаторе, а ты по сути переносишь ее на этап составления правил и все усложняешь.

>>2992689

> Методы залогинить и определить в таком ключе я понимаю, я не понимаю зачем мне нужно разлогинить пользователя.

Залогинить - значит, выдать куки. Это ты будешь делать. Разлогинить в задаче не нужно, просто мне в голову пришло, что если можно залогинить, то наверно надо иметь возможность и разлогинить. Но пожалуй тут эта функция не нужна.

> У меня нет логина, а, как я понял, идентификация это о том, кто пытается войти, а как я, имея токен просто в куки, скажу кто?

Ты ищешь токен из куки в БД и идентифицируешь пользователя по нему. По нему же ты его аутентифицируешь, так как токен сложный и неподбираемый.
Аноним 08/01/24 Пнд 05:13:54 #174 №2992926 
>>2992884
Спасибо за ответ.
>Для email лучше все интегрировать в одно правило, так как кроме проверки email это все вряд ли понадобится
Ты имеешь ввиду использовать одно регулярное выражение для проверки всех требований к емайл?
>Залогинить - значит, выдать куки
Получается, что логиниться пользователь будет только 1 раз - при первом добавлении его информации в БД?
Аноним 08/01/24 Пнд 09:37:14 #175 №2993029 
>>2992780
Нет, я посмотрел книгу Фабьена по Симфони и ожидал что-то подобное по Ларавелю.
Аноним 08/01/24 Пнд 11:18:44 #176 №2993110 
>>2991315
Уже кидали этот учебник и его обоссали итт местные синьоры-помидоры
Аноним 08/01/24 Пнд 11:19:46 #177 №2993113 
Вообще, берут ли новичков сразу на Симфони или вначале надо выучить Ларавель?
Аноним 08/01/24 Пнд 13:13:44 #178 №2993196 
>>2993113
Новичков не берут. Нахуй они нужны?
Аноним 08/01/24 Пнд 13:21:23 #179 №2993202 
>>2993196
Мне сказали, что наоборот в РНР берут новичков, в отличии от го
Аноним 08/01/24 Пнд 13:22:25 #180 №2993205 
>>2993202
Больше двачеров слушай. Как сказал один мудрый анон: Послушай двачера - сделай наоборот.
Аноним 08/01/24 Пнд 13:23:52 #181 №2993206 
>>2993205
И что ты предлагаешь? Идти в петон?
Аноним 08/01/24 Пнд 13:57:42 #182 №2993249 
>>2993206
Никуда не идти, айти пузырь лопнул, сейчас даже мидлы не востребованы
Аноним 08/01/24 Пнд 14:17:29 #183 №2993270 
>>2993202
В го не берут "новичков" потому что каждый пхп сеньор это "го новичек", ему только синтаксис почитать и хомяка плюшевого купить. А писать код, работать в команде над крупным проектом и все прочее он давно умеет.
Нахуй ты там усрался если ты все это не умеешь да еще и язык не знаешь?
Аноним 08/01/24 Пнд 14:41:21 #184 №2993291 
>>2993206
>И что ты предлагаешь? Идти в петон?
Язык программирования - не волшебная таблетка. Он не пофиксит конкуренцию на рынке, не сделает хуй на 20 см длиннее, не исправит проблемы с самооценкой. От того что ты один язык сменил на другой, это никак не повлияет на конкуренцию. Она как была так и останется. Если я сменю автомобиль хёндай на киа, стану ли я популярным у девушек? Если ты не можешь найти работу - скорее всего ПРОБЛЕМА В ТЕБЕ, а не в языке. Проблема в том, что ты негативно мыслишь, что у тебя низкая самооценка, нет боевого настроя, ты претендуешь только на вакансии для начинающих и ты неспособен сказать - ДА! Я добьюсь своего! Я выучусь и найду высокооплачиваемую работу! Ты воспринимаешь отказы как какую-то непреодолимую стену. Хотя нужно просто пробовать, пробовать, пробовать, пробовать, пробовать, пробовать, снова и снова. Какая-то чмошная фирма мне отказала? Ваще поебать! А уйду к конкурентам, а они будут кусать локти. Ты должен быть бойцом, а не спрашивать у незнакомых кукаретников на анонимном форуме советы, вот и всё.
Аноним 08/01/24 Пнд 15:52:32 #185 №2993350 
>>2993249
Мне не куда больше идти. С дипломом программиста больше никуда не возьмут.

>>2993270
Язык легко учится. Там микросервисы сложные. Всякие дребезжащие заслонки надо знать и транзакции между сервисами прокидывать.

>>2993291
Говорят, что в РНР уровень ниже и легче вкатиться.
Аноним 08/01/24 Пнд 16:46:00 #186 №2993419 
>>2993350
>и легче вкатиться
В разработку вообще вкатиться непросто - меньше пиздунов слушай. Легче всего вкатиться в сварщики или строители, а то и вообще в моряки - платят там примерно так же, а учить сильно меньше надо.
Если ты ждёшь ламповую удаленочку через год, то ты это зря - на удаленочку сажают только опытных челов, а ты сперва будешь пахать за копейки на мутных челов пару лет.
Аноним 08/01/24 Пнд 16:56:18 #187 №2993445 
>>2993113
Новичков берут в Руби
Аноним 08/01/24 Пнд 17:00:04 #188 №2993452 
>>2993350
>Говорят, что в РНР уровень ниже и легче вкатиться.
Кто так говорит? Назови по именам. Это зависит от работодателя. Если ты вкатываешься чтобы просто сайты верстать на вордпрессе или битриксе, то там требования минимальные. А бывает так выебут, начинают спрашивать такие тонкости пхп, типа что такое абстрактный класс, где он используется? Или в чём отличие $message от $$message? Или есть ли в пхп множественное наследование? Какой метод используется для хеширования паролей в пхп? Тебя бы туда посадить, я бы посмотрел как ты с понурым еблищем ушёл с "легкого" собеседования.

Не надо утверждать ЧЕГО ТЫ САМ ЛИЧНО НЕ ЗНАЕШЬ. Если ты не испытал на своей шкуре, не повторяй. Иначе будешь ныть в тредах плак-плак ну вы же говорили...
Аноним 08/01/24 Пнд 17:01:59 #189 №2993456 
>С дипломом программиста больше никуда не возьмут.
А у тебя программистская вышка? Так хули ты на двачах сидел, а не стажировку выбивал? У нас еще с курса третьего всех кто хотя бы шнурки умел завязывать разобрали.
Аноним 08/01/24 Пнд 17:03:59 #190 №2993462 
>>2993452
Мда блять, Дожили.
Аноним 08/01/24 Пнд 17:04:06 #191 №2993463 
>>2993456
>>2993350
Аноним 08/01/24 Пнд 17:15:22 #192 №2993491 
>>2993462
Проблема в ТВОИХ ОЖИДАНИЯХ. PHP может быть как очень лёгким, так и очень сложным языком. Там где конторы посолиднее, там огромные требования. Включая знание сторонних rabbitmq, elasticsearch, postgresql, чуть ли не kubernetes требуют.

Даже если ты прав, лёгкость вката компенсируются низкими зарплатами. PHP программисты получают меньше всего среди всех программистов. Даже наверно 1С-ники и то больше зарабатывают.
Аноним 08/01/24 Пнд 17:18:42 #193 №2993498 
>>2993452
Если я знаю ответы на эти вопросы, то меня возьмут на РНР?

>>2993456
У нас ни кого ни куда не брали. Помню только возле деканата висела рекламка, что отличников приглашают в местную "элитную" фирму. Остальные сами искали себе работу.
Аноним 08/01/24 Пнд 17:25:39 #194 №2993505 
>>2993113
Вот что мне не нравится в Симфони - это сплошная кодогенерация. Буквально на каждый чих надо писать symfony console make:... Хотя там буквально надо две строчки написать, нет надо скодогенерировать. Даже в Спринге, с которого слизан Симфони, такого нет, там как правило всё пишут ручками.
Аноним 08/01/24 Пнд 17:29:07 #195 №2993510 
>>2993505
https://blog.quickadminpanel.com/list-of-21-artisan-make-commands-with-parameters/

artisan make это другое?
Аноним 08/01/24 Пнд 17:30:00 #196 №2993513 
>>2993491
3-4 сотыги я думаю неплохо, при этом ни какие заслонки учить не надо как в гошке.
Аноним 08/01/24 Пнд 17:32:10 #197 №2993518 
>>2993510
Мне почему-то сложно принять кодогенерацию. Ещё боюсь, что мой код затрётся и всё сломается.
Аноним 08/01/24 Пнд 17:32:28 #198 №2993519 
>>2993513
Хочешь губозакатывательную машину? Всего за 3-4 сотыги...
Аноним 08/01/24 Пнд 17:33:31 #199 №2993522 
>>2993518
Ты гитом не пользуешься? Не можешь git diff глянуть?
Аноним 08/01/24 Пнд 17:36:25 #200 №2993525 
phpzp.jpg
>>2993519
Аноним 08/01/24 Пнд 17:37:13 #201 №2993528 
>>2993498
>Если я знаю ответы на эти вопросы, то меня возьмут на РНР?
Возьмут! Но если ты знаешь ответы на эти вопросы, то нахуя вообще вкатываться в PHP?
Зарплаты PHP-ников самые низкие по отрасли. Любой Go-шник обладая точно таким же багажом знаний будет получать 2х. При этом считая тебя червём-пидором.
То есть, тебе это надо вообще? Если ты потом будешь в тредах ныть, что у тебя 100к и дальше не растёт.
Я не вижу особого смысла вкатываться в PHP. Тут проекты тоже не особо интересные.
Если ты можешь проходить интервью на PHP, то и на другие языки точно также сможешь.
Аноним 08/01/24 Пнд 17:38:08 #202 №2993531 
>>2993522
Бывает, что в рамках одного коммита надо что-то самому написать, потом сгенерировать, потом ещё какую-нибудь фигню прикрутить и только потом коммитить.
Аноним 08/01/24 Пнд 17:38:20 #203 №2993532 
>>2993525
На заборе тоже написано...
Аноним 08/01/24 Пнд 17:39:23 #204 №2993534 
>>2993528
На го требуют знать микросервисы, а я их не знаю.
Аноним 08/01/24 Пнд 17:39:42 #205 №2993535 
>>2993498
>У нас ни кого ни куда не брали.
Я хз в какой шараге ты учился, но в учебном курсе обязательно присутствует производственная практика. Её блядь не может там не быть.

А уж сколько желающих заполучить такой сладкий послушный петушок, который до четвертого курса продержался. У нас если че диплом получило 8 (восемь) человек из 40, и я не в их числе.
Аноним 08/01/24 Пнд 17:40:15 #206 №2993536 
>>2993531
И почему нельза закомитить перед генерацией, а перед пушем
https://www.git-tower.com/learn/git/faq/git-squash
Аноним 08/01/24 Пнд 17:41:00 #207 №2993540 
>>2993535
>не может там не быть
Вот как раз в шарагах она обязательна, а в универах редко бывает
Аноним 08/01/24 Пнд 17:52:20 #208 №2993550 
>>2993540
Че ты несешь, это не по желанию делается. Практика как и вся программа обучения законодательно утверждается http://ivo.garant.ru/#/doclist/162:0
Ты вообще в кампус заходил, чучело?
Аноним 08/01/24 Пнд 17:58:02 #209 №2993561 
>>2993550
Бля, ссылка ебаная. Вот пример https://www.garant.ru/products/ipo/prime/doc/71188178/
Аноним 08/01/24 Пнд 18:01:22 #210 №2993564 
>>2993561
>Настоящий приказ вступает в силу с 1 января 2016 года
Аноним 08/01/24 Пнд 18:06:01 #211 №2993575 
Screenshot 2024-01-08 180415.png
>>2993564
Бля, ебанько, они там в министерстве по твоему че, перерывчик на пиво что-ли сделали?
Аноним 08/01/24 Пнд 18:08:25 #212 №2993577 
>>2993575
Ну не было у нас ни какой практике, а дипломы выдали государственного образца. Мне лично декан вручал на торжественной церемонии. ВУЗ один из лучших в моём регионе.
Аноним 08/01/24 Пнд 18:11:54 #213 №2993583 
>>2993491
Я имел ввиду, что это пиздец базовые вопросы, и я бы на собесе доебывал другим
Аноним 08/01/24 Пнд 18:19:49 #214 №2993597 
>>2993577
Ну не было и не было. Значит ты молодец, все правильно сделал. Сейчас на изи со своим охуенным дипломом вкатишься.

Ты чего-то такого ждешь? Ну пинал ты хуи четыре года, декан что-ли за тебя должен был думать нахуя тебе эта корка ебаная была нужна? Можешь в резюме написать как тебе декан с халявным опытом работы поднасрал, паскуда.
Аноним 08/01/24 Пнд 18:57:07 #215 №2993623 
>>2993110
Можешь вкратце написать что в нем не так?
Аноним 08/01/24 Пнд 19:00:28 #216 №2993628 
>>2993623
> что в нем не так?
Не знаю, мне так на дваче сказали
Аноним 08/01/24 Пнд 19:16:19 #217 №2993658 
>>2993623
Сам посмотри. Там каждая страничка: читаем тему в документации, а теперь примените эти знания в своём проекте. Это не учебник, а просто индекс по доке с набором тупых заданий без всякой проработки. Халтура в общем.
Аноним 08/01/24 Пнд 19:58:36 #218 №2993717 
>>2993658
Так в доке блядь примеры кода и написаны. Буквально целые классы прописаны.
Не, ребят, таким имбецилам даже кассу в пятерочке не доверят, только грузчиком.
Аноним 08/01/24 Пнд 20:03:06 #219 №2993732 
>>2993717
Практика показывает, что важнее быть не супер умным, а старательным. Как раз вот умники и не доходят до конца и бросают программирования, а старательные тупки шаг за шагом осваивают и становятся программистами на 300-400 тыщ
Аноним 08/01/24 Пнд 20:09:17 #220 №2993744 
>>2992784
Сам не знаю, могу лишь сказать что город начинается с А
Аноним 08/01/24 Пнд 20:13:35 #221 №2993750 
>>2993732
>Практика показывает, что важнее быть не супер умным, а старательным
Ну так старательно читай доку, там все про фреймворк написано. А лучше старательно наизусть выучи. Хуй с ними с супер умными, они в пхп не вкатываются. Надо как-то вкатунов среднего ума догонять.
Аноним 08/01/24 Пнд 20:16:04 #222 №2993755 
>>2992418
>Yiij 2*
Никаких не делают, легаси говно.
Аноним 08/01/24 Пнд 20:19:09 #223 №2993758 
Дак что? Никто не посоветует курс по Ларе хороший? Вот в джаве обычно все советуют Алишева с ютуба, а что в пхп?
Аноним 08/01/24 Пнд 20:22:40 #224 №2993763 
>>2993758
Мудила, открой доку и почитай. Там чтива на пару вечеров. Какой нахуй курс, любая обезъяна на ларавеле веб страничку сделает. Там и делать нихуя не надо - 90% кода генерится.
Аноним 08/01/24 Пнд 20:35:14 #225 №2993775 
>>2993510
В разы меньше надо писать. Даже миграции пишут ручками. Ещё в Симфони целые интерактивные консольные утилиты созданы, где надо отвечать на тупые вопросы.
Аноним 08/01/24 Пнд 20:37:45 #226 №2993779 
>>2993744
Отпишись если совпало
Аноним 08/01/24 Пнд 20:44:28 #227 №2993792 
>>2993744
Не совпало, я с города К
Аноним 08/01/24 Пнд 23:17:39 #228 №2994029 
>>2992884
>Или же, ты можешь сделать чуть усложненное правило с 2 регулярками, которое применяет вторую только если строка соответствует первой. То есть, проверяет положение апофстрофа если в строке он есть.
Не знаю, так ли я тебя понял.
Пытался разобраться в том, как работают условные подмаски.
https://3v4l.org/pcc9u
Вроде работает так, как мне надо.
Но я очень плохо понял как писать такие регулярные выражения.
Аноним 09/01/24 Втр 06:15:43 #229 №2994301 
Подскажите что делать в этой ситуации.

На компьютере стоит сервер apache.
Корневая папка сервера - public.
Есть index.php - единая точка входа.
Есть .htaccess, который перенаправляет все запросы на index.php.
Есть папки для остального кода.
Есть папка vendor под композер.

Сейчас часть этих файлов связаны с одним проектом.
Но я хочу добавить новые.
Как мне сделать так, чтобы каждый проект лежал в своей папке отдельно, но при этом это бы не сломало мне работу сервера?
Аноним 09/01/24 Втр 07:54:57 #230 №2994326 
image.png
image.png
Добрый день, пхп-анон!
Начну с тихого вопля непонимания:
ну почему, туды его в качель, в Laarvel из коробки НЕТ автоматической работы с post-запросами, это ведь одна из, наверное, топ-10 самых частых операций? да-да, я понимаю, что могу заблуждаться

А теперь, собственно, вопрос!

Как мне расчехлить возможность сделать post-запрос к базе?

Текущее состояние: локальный сервер xampp, база на нем же, интерфейс, из которого я делаю запрос (банально html+js) и серверный код (php) лежат в хамрр в РАЗНЫХ папках (так я нелепо имитирую существование api)

Что я делаю: отправляю post-запрос через fetch с сайта к бэкенду, а в ответ получаю ошибку на скрине.

Очевидно, срабатывает CSRF-защита и нужно в параметрах fetch в заголовках передавать csrf-токен, что я и делаю (темный скрин)

Как я это делаю:
почитав официальную доку Ларавеля дошел до того, что оптимальный способ это работа с Санктум https://laravel.com/docs/10.x/sanctum

Судя по всему, мне ближе всего подходит секция spa-authentication https://laravel.com/docs/10.x/sanctum#spa-authentication

Я сконфигурировал Middleware, пропустил CORS (потому что у меня localhost, а не разные под-домены, вроде, все так)
А вот дальше началось что-то совсем непонятное с этой login page, никакое залогинивание мне не нужно, нужно просто данные отправить и необходимость делать запрос к sanctum/csrf-cookie С ФРОНТА меня вообще ставит в тупик, когда я писал фронт для других проектов (где бэк делал не я), никаких предварительных запросов туда я не делал, сразу просто отправлял данные на сервер из формы

Если я меняю запрос с пост на гет, лол, то все работает, запись в базу добавляется (при соответствующих изменениях Route::post на ::get) (поэтому скрины из пхп-кода не прикладываю, к нему вопросов то нет)

В общем, пожалуйста, помогите разобраться с этой частью, как сделать post-запрос? Или не Санктум вообще?
Аноним 09/01/24 Втр 08:35:33 #231 №2994342 
>>2994326
Все проверки на авторизацию и csrf делаются в мидварах ларки и опциональны - могут включаться или отключаться для конкретных роутов.
Аноним 09/01/24 Втр 09:39:14 #232 №2994375 
>>2994342
Кстати, это я тоже делал, но тогда ->post() получается пустой!

Ну и это небезопасный путь, как я понимаю, не очень рекомендованный, когда все это в общем доступе
Аноним 09/01/24 Втр 09:40:17 #233 №2994377 
>>2994375 >>2994342

Под общим доступом я имею ввиду продакшен, конечно, в смысле, нормальное функционирование после релиза.
Аноним 09/01/24 Втр 09:52:00 #234 №2994381 
>>2994377
Тогда непонятно что ты хочешь. Ты же сам сказал что тебе авторизация не нужна. CSRF предназначен для защиты роутов авторизованых пользователей. Если нет авторизации, то каждый посетитель может делать что угодно бай дезин.
Если ты хочшь защитится, чтобы боты не постили, CSRF для этого не предназначен.
Обычно нет необходимости специально получать CSRF токен, потому что он живет в куках
Аноним 09/01/24 Втр 10:11:33 #235 №2994391 
>>2994381
Окей, допустим, но это не отменяет того, что при выключении csrf для конкретных роутов $request->post() пустой, как это фиксится?
Аноним 09/01/24 Втр 10:25:01 #236 №2994395 
>>2994391
1) Значит ты неправильно отключаешь
2) Отключать необязательно. VerifyCsrfToken в ларке по дефолту на всех роутах. CSRF отправляется вместе с кукисами и он невидим для жс.
Нужно разобраться в твоем кейсе. Что ты хочешь получить, что делаешь.

https://stackoverflow.com/questions/37806762/how-to-disable-csrf-token-in-laravel-and-why-we-have-to-disable-it

Тут кудахтают что НИЗЯ ОТКЛЮЧАТЬ не вдаваясь в детали, хотя по определению CSRF
>Cross-Site Request Forgery (CSRF) is an attack that forces authenticated users to submit a request to a Web application against which they are currently authenticated.
Аноним 09/01/24 Втр 10:33:37 #237 №2994398 
>>2994395
Если ты делаешь прубличное апи, например, то какая к ляду CSRF
Аноним 09/01/24 Втр 10:52:41 #238 №2994414 
>>2994398
Нет, не публичное, сайт будет публичный, общедоступный
Просто задача для меня такая: изучить laravel, дошел вот до post-запросов и очень сильно споткнулся. В принципе начал с работы с базами, потому что фронт для меня это вью, а поскольку вью работает с ларавелем так себе, то соответственно ларавелю остается функционал работы с базами, в основном (на моем текущем уровне).

>>2994395
ну там кажется сложно не так отключить, всего-то надо роуты добавить в массив с исключенными роутами в App\Http\Middleware\VerifyCsrfToken.php

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

гугление показало, что дело в csrf, который как бы превентит post, поскольку тут шибко опасен и если в headers нет csrf-token, то ничего не происходит, т.е . происходит ошибка

вот и весь сказ
Аноним 09/01/24 Втр 10:55:25 #239 №2994418 
>>2994395
>CSRF отправляется вместе с кукисами и он невидим для жс.
В Ларке есть axios специально для работы с ажаксом, он цепляет все нужные данные автоматически - только в конфиге ему указать надо.
Мне приходилось и без аксиоса делать запросы с жтими токенами - я их клал в meta страницы и оттуда доставал уже жсом. Но лучше использовать аксиос - просто меньше секса с мозгом изкоробки.
Аноним 09/01/24 Втр 11:00:33 #240 №2994422 
>>2994414
Хидер X-CSRF-Token, а не CSRF-Token
Но как я тебе сказал что обыно не нужно это делать так как CSRF токен в нормальных случаях содержится в кукисах

Вангую что у тебя фронт отдельно, а бек отдельно. По дефолту ларавел на такое не настроен
Аноним 09/01/24 Втр 11:02:33 #241 №2994424 
>>2994418
Да ненужен никакой каксиос, куки браузером отправляются если получены с того же домена
Аноним 09/01/24 Втр 11:28:43 #242 №2994487 
>>2994424
Куки отправляются, csrf - нет.
Аноним 09/01/24 Втр 11:34:58 #243 №2994497 
>>2994422
>Вангую что у тебя фронт отдельно, а бек отдельно.
Именно так, чего ванговать, я это с самого начала написал >>2994326

> По дефолту ларавел на такое не настроен
И как настроить? Вот же в чем вопрос

Как я понял, вся документация ларавеля о том, что фронт отрисовывается ларавелем же, а у меня то он отдельно
Аноним 09/01/24 Втр 11:35:37 #244 №2994500 
>>2994487
https://laravel.com/docs/10.x/csrf#csrf-x-xsrf-token
>Laravel stores the current CSRF token in an encrypted XSRF-TOKEN cookie that is included with each response generated by the framework.
Аноним 09/01/24 Втр 11:37:32 #245 №2994502 
>>2994497
Ну тогда правильный хидер X-CSRF-Token, а у тебя на картинке отправляется CSRF-Token
Аноним 09/01/24 Втр 11:56:11 #246 №2994520 
>>2994502
Кстати ты начал с хуевого примера изучать ларку. На 99,9% проектах на ларке используются серверный роутинг на ларке, а жс фронтенд загружается обычно в шаблоне. Nuxt очень редко используется, обычно в проектах максимально laravel way придерживаются, например inertia js использют, а не nuxt
Аноним 09/01/24 Втр 12:32:15 #247 №2994559 
>>2994326
Не думал роутинг прописывать в файле api.php, если ты на эти роуты запросы с отдельного фронта кидаешь? Файл web.php, как мне кажется, предназначен для приложения которое строится полностью на ларавеле(то есть отдельного фронтенда нет), могу ошибаться.
Аноним 09/01/24 Втр 12:33:32 #248 №2994561 
>>2994559
>Не думал роутинг прописывать в файле api.php
Ну и соответственно обращаться к апишным роутам
Аноним 09/01/24 Втр 12:36:27 #249 №2994566 
>>2994326

Я не очень понимаю, о каком API речь. Ты делаешь API для HTML-приложений, которые работают в браузере, или для отдельных приложений (десктопное или мобильное)? CORS нужен только если твоим API будет пользоваться браузерное приложение, размещенное на другом домене (не на том же, что и сервер API). То есть, для случаев, когда у тебя один сервер и несколько приложений на других доменах, шлющих к нему запросы.

Что касается CSRF, обычно токен просто вставляют в тело страницы. Почему в Laravel все так усложненно сделано, непонятно.

Также, я бы вообще не заморачивался с токенами, а проверял бы заголовки браузера вроде Origin, чтобы проверить, откуда пришел запрос. Это, по моему, проще. Почему в Laravel так не сделано, непонятно.

>>2994381

Неверно. CSRF предназначен для исключения ситуации, когда злоумышленник отправляет запросы от имени ползователя. Аутентифицирован пользователь или нет - не важно.
Аноним 09/01/24 Втр 12:38:57 #250 №2994568 
>>2994381

> Если нет авторизации, то каждый посетитель может делать что угодно бай дезин.

CSRF не для этого. Он для исключения ситуации, когда злоумышленник заманивает пользователя на свою страницу и та от его имени шлет запросы к серверу.

> Обычно нет необходимости специально получать CSRF токен, потому что он живет в куках

Неверно. Обычно токен есть в куке, недоступной для JS, и одновременно в теле страницы. JS берет токен и тела и отправляет в запросе, а сервер сравнивает токен в куке и в теле запроса. Также, токен может не храниться в куке вообще, а храниться, например, в сессии.
Аноним 09/01/24 Втр 12:45:46 #251 №2994577 
>>2994422

Ты, по моему, не понимаешь, смысл CSRF-токена. Вот статья про эту уязвимость: https://github.com/codedokode/pasta/blob/master/security/xsrf.md

Единсвтенная кука с CSRF-токеном не защищает от CSRF. Токен должен дублироваться в теле запроса или в заголовке.
Аноним 09/01/24 Втр 12:50:04 #252 №2994580 
>>2994566
От какого имени? От Васи или Пети? Как узнать Вася это или Петя без аутентификации?

Если у тебя есть роут /image/delete/1 без аутентификации, то какая разница есть CSRF или нет, если любой из интернета может перейти по этому роуту. Для того ему просто нужно зайти на страницу с сайта, получить CSRF токен и перейти по роуту /image/delete/1. Зачем злоумышленнику пользователь в этой схеме?

CSRF заключается в том что пользователь аутентифицирован на сайте и авторизован на какое-то действие, а злоумышленник посылает авторизованный запрос с фишингового сайта, куда зашел пользователь.
Аноним 09/01/24 Втр 12:52:08 #253 №2994583 
>>2994580
Ты как будто csrf токен с jwt каким-то путаешь.
Аноним 09/01/24 Втр 12:53:28 #254 №2994585 
>>2994577
HTTP only same site кука как раз лучше всего защищает, ты не сечешь
Аноним 09/01/24 Втр 12:55:31 #255 №2994589 
>>2994583
Нет ты как раз. JWT используется для авторизации действий, а CSRF токен при наличии авторизации от CSRF уязвимости
Аноним 09/01/24 Втр 13:08:21 #256 №2994603 
image.png
>>2994502
Вот кстати это помогло, ошибка исчезла, но теперь другая проблема, почему-то ->post() пустой! В на сервер в body отправляется объект, а в итоге там ничего (последний вывод консоли это собственно return из метода обработки поста контроллером)

Там почему-то в принципе $request пустой! хоть ->input() хоть ->post()
Аноним 09/01/24 Втр 13:38:53 #257 №2994657 
>>2994589
Решил себя проверить, залянул к код ларки

1) Вот токен извлекается из реквеста
https://github.com/laravel/framework/blob/10.x/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L151

Если в хидере нет то декоируется из кук
https://github.com/laravel/framework/blob/10.x/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L157

2) Вот токетн сравнивается со значением из сессии
https://github.com/laravel/framework/blob/10.x/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L138
Аноним 09/01/24 Втр 13:39:04 #258 №2994658 
image.png
image.png
Добавляю картнки с кодом к >>2994603
Вроде все дб просто (не обращайте внимание на мешанину из консольных выводов, это для создания картинок нужно, чтобы проще объяснять что где и как)
Аноним 09/01/24 Втр 13:42:07 #259 №2994669 
>>2994657
Это все круто и легко, если фронт и бек оба на Ларавеле, а если фронт это хтмл+жс -- то ни разу не легко! До глупого сложно, я бы сказал
Аноним 09/01/24 Втр 13:43:23 #260 №2994673 
>>2994657
Но я походу обосрался в том что ларка не делает куку http only так что однохуйственно чем отпавлять токен
Аноним 09/01/24 Втр 13:43:58 #261 №2994674 
Меня вот в Ларавеле больше всего раздражает, что набираешь Something:: и видно только часть методов, хотя на самом деле их там в разы больше. Фасады типа облегчают работу с фреймворков. В каком месте они её облегчают? Как по мне только усложняют всё своей магией, что метод высирается из ниоткуда.
Аноним 09/01/24 Втр 13:56:12 #262 №2994695 
>>2994674
Эти методы описаны в php доке фасада, оснальные методы ты не должен использовать, если не хочешь чтобы при обновлении был риск поломатьсся, потому что это внутренняя кухня фреймворка.
Аноним 09/01/24 Втр 15:22:20 #263 №2994777 
>>2994500
У тебя в тексте речь идет о Response - ответе от фреймворка, а ты посылаешь post-запрос с уже ранее сгенерированным csrf.

Тебе не доки Лары читать надо, а сперва базу бы изучить https://qna.habr.com/q/530168
Аноним 09/01/24 Втр 15:28:11 #264 №2994781 
>>2994669
Просто положи перед запросом на сервер нужную куку в поле где его ищет миддлвар проверки CSRF токена, если такой любитель ручного пердолинга. Все должно работать.
Аноним 09/01/24 Втр 15:40:33 #265 №2994786 
>>2994777
Нет ты. Тут ключевое слово each
Токен с кукисами прилетает на фронт в любом реквесте
1) Если это same site то его видит библиотека типа аксиос
2) Твоя библиотека добавляет токен в хидер
3) Если в хидер токен не добавлен то он парсится из кукиса https://github.com/laravel/framework/blob/10.x/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L157
который передается с реквсетом из п 1). Так что можно просто fetch испольовать
4) Проблема когда домены фронтенда и бекенда разные тогда надо токен через специальную ручку доставать и класть в хидер Тогда и твой каксиос самостоятельно не добавит.
Аноним 09/01/24 Втр 17:38:04 #266 №2994905 
>>2994786
Да что ты мне про то, что Лара на фронт присылает заладил? Речь идет об обратном процессе когда данные с клиента идут. Пост перечитай ещё раз.
Аноним 09/01/24 Втр 17:50:10 #267 №2994926 
>>2994905
Ну а по твоему как кукисы работают? Кукисы пришли одним реквестом в респосе в хидере, теже кукисы ушли следующим реквестом в хидере. Я тебе ссылку привел, что ларка из кукисов может токен читать. Я всегла fetch использовал, axios удалял как лишнюю хуйню. Что заголовки, что кукисы, эта вся хуйня все равно в хидере запроса передается. О чем споришь?
Аноним 09/01/24 Втр 18:07:25 #268 №2994952 
>>2994926
Подытожу
У чела который вопрос задавал была проблема не в аксиосе, а т том что он название хидера перепутал, но так как у него фронтенд и бек на разных доменах, то кукисы не отправлялись на бек, а хидер был неправильный и ларка не нашла токен. Если бы у него был один домен, то он бы не заметил что у него хидер неправильный, так как ларка нашла бы токен из кукисов А ты влез со своим акисосом, что надо через него запросы делать.

Я лично в спор ударился, чтобы освежить и провалидировать свое представление о механизме CSRF
Аноним 09/01/24 Втр 18:19:50 #269 №2994968 
Да и тут указали что CSRF не связан никак с аутентификацией. В общем я подумал и согласен, что токен может защищать от взлома текущей сессии независимо от того аутентифицирован пользователь или нет. Хотя это наверно большого практического значения не имеет, разве что злоумышленник в корзину пользователю товаров насует или видосов в плей лист, потому что обычно все важные действия требуют авторизации.
Аноним 09/01/24 Втр 18:42:19 #270 №2994991 
Хтя касательно ларавеля интересный вопрос с нужностью его защиты CSRF в апи https://security.stackexchange.com/questions/167064/is-csrf-protection-useless-with-ajax
Аноним 09/01/24 Втр 18:44:06 #271 №2994995 
>>2994991
там asp.net но вопрос по сути тот же
Аноним 09/01/24 Втр 19:12:39 #272 №2995039 
Ну вобщем персмотрел код в ларке, да я не прав был
ларка читает либо только хидер
либо X-XSRF-TOKEN либо хидер X-CSRF-TOKEN либо поле _token из боди
Токен X-CSRF-TOKEN не зашифрованный
а токен X-XSRF-TOKEN зашифрованный и берется из кукисов

Хз значит я забыл что в фетч хидеры подставлял...
Аноним 10/01/24 Срд 07:24:23 #273 №2995633 
>>2994952
они оба у меня на localhost пока, разве это разный?
или доменом в случае localhost считается следующая папка?
фронт лежит в /test, бэк в /back (оба в htdocs само собой)
Аноним 10/01/24 Срд 08:04:28 #274 №2995639 
image.png
Короче, этот отстой все равно не работает без токена
А с токеном работает только если он был создан еще одним запросом ДО основного, что довольно глупо само по себе, как мне видится.
Не понимаю, что делать.

Надо чтобы просто было:
ввел данные форму => нажал на кнопку => бэк принял => роут отправил на контроллер => контроллер отработал с базой...

Ибо когда я делал фронт для других проектов, там никаких дополнительных запросов к бэку не было и все было без авторизации. Просто сразу из формы в базу, из формы в базу...
Аноним 10/01/24 Срд 08:08:44 #275 №2995641 
>>2995633
Не считается, хуй знает что у тебя там, телепаты в отпуске, если разберешься сам, это тебе больше пользы принесет, чем когда тебе подскажут.
Аноним 10/01/24 Срд 08:10:46 #276 №2995642 
>>2995639
Это не глупо, потому-что токен запоминается в сессии. Глупо - это делать пост запросы без гет запросов
Аноним 10/01/24 Срд 09:21:17 #277 №2995673 
>>2995641
>>2995642
При чем тут телепаты, все написано русским по серому.

>Глупо - это делать пост запросы без гет запросов
А почему? То есть, серьезно спрашиваю.
Аноним 10/01/24 Срд 09:35:14 #278 №2995680 
>>2995673
потому-что ты используешь web.php для роутов
если ты хочешь RESTfull API в ларке для этого есть api.php
В api.php нихуя нет мидваров ни сессий, ни токенов все как ты хочешь.
Аноним 10/01/24 Срд 09:36:04 #279 №2995681 
>>2995680
потому что*
Аноним 10/01/24 Срд 09:46:01 #280 №2995686 
image.png
Еще такой вопрос:
Вот эта часть документов ларавеля, она про что? Про какое место? потому что код выглядит как js, но секция то не подходящая, да и вокруг примеры странные, о чем это вообще, где это писать и что должно происходить на конце /sanctum/csrf-cookie ? Или там происходит что-то автоматическое? Или надо где-то там что-то делать? втф
Аноним 10/01/24 Срд 10:22:27 #281 №2995701 
>>2995680
Вот с этого стоило начинать! Очень ценная информация, благодарю.

Но однако ты мне где-то капельку наврал, я перенес туда Route::post('/intro', [TestController::class, 'add']), убрал из хедера токен и ВСЕ ПЕРЕСТАЛО РАБОТАТЬ, опять ошибка, хочет токен, зараза такая
Аноним 10/01/24 Срд 10:28:54 #282 №2995710 
>>2995701
хз ошибка может по другой причине, в api нихуя нет, чтобы там у тебя требовало токен
https://github.com/laravel/laravel/blob/10.x/app/Http/Kernel.php#L41
Аноним 10/01/24 Срд 11:13:19 #283 №2995754 
js.png
php.png
dev-tools.png
dev-tools2.png
>>2995701
У меня все работает. сервер html запущен на отдельнойм порту 2345
ларка на 8000
Аноним 10/01/24 Срд 11:34:49 #284 №2995788 
>>2995754
Почему не в шторме сидишь? Ты вообще планируешь стать профессионалом?
Аноним 10/01/24 Срд 12:03:18 #285 №2995832 
>>2995701
Ты вообще хуесос блять?
тебе это писали здесь
>>2994559
Аноним 10/01/24 Срд 12:05:11 #286 №2995834 
>>2995788
пхп шторм сосет у вкода c проглотом: ремоут дев контейнерс

зачем мне пхп шторм если из пхп съебался несколько лет назад у меня ларка только для одного своего пета осталась, который я медленно колупаю
Аноним 10/01/24 Срд 12:25:40 #287 №2995859 
>>2995834
в гошку?
Аноним 10/01/24 Срд 12:46:30 #288 №2995872 
>>2995832
Чего толку, что писали, если там это тоже есть, та же самая 419 ошибка! Что в изначальном посте >>2994326

>>2995710
Может сама 419 ошибка не про это?
Аноним 10/01/24 Срд 12:54:21 #289 №2995881 
>>2995872
Ошибка потому что ты к старому эндпоинту обращаешься. Ты в api.php добавил ручку, а в запросе в урл префикс /api не добавил

мимо ванга
Аноним 10/01/24 Срд 13:31:09 #290 №2995921 
>>2995881
То есть если был запрос localhost/testlaravel/public/intro/
то теперь должен быть localhost/testlaravel/public/api/intro/
что ли?

Или чего?
Аноним 10/01/24 Срд 13:58:54 #291 №2995949 
16234327005470.png
>>2995921
Аноним 10/01/24 Срд 14:08:20 #292 №2995955 
>>2995949
Именно так!
Аноним 10/01/24 Срд 15:36:53 #293 №2996045 
Там вышла книга Дронова по Ларавел 9
Аноним 10/01/24 Срд 15:37:41 #294 №2996046 
>>2996045
где скачать
Аноним 10/01/24 Срд 15:41:32 #295 №2996049 
>>2996046
Там же, где и остальные книги
Аноним 10/01/24 Срд 17:09:03 #296 №2996178 
Реально ли устроится на РНР без опыта на чистый бекенд, где не надо фронт знать и делать?
Аноним 10/01/24 Срд 18:52:32 #297 №2996405 
>>2996178
Бля, а неплохой план: выбрать что-то одно что ты не знаешь и не умеешь делать.
Аноним 10/01/24 Срд 19:19:47 #298 №2996484 
>>2996405
Я потом в го буду перекатываться и мне не хочется учить фронт
Аноним 10/01/24 Срд 21:15:51 #299 №2996724 
>>2996178
10 лет работаю на пхп, к фронту прикасался пару раз охуеть как давно (2 строчки в хтмле правил)
Аноним 11/01/24 Чтв 06:59:54 #300 №2997072 
image.png
>>2995754
Ну вот у меня в целом все также как у тебя (только вместо функции в роуте - вызов контроллера)

Может дело в том, что у меня public до сих пор? Вообще начало 404 показывать, хотя я всего лишь добавил /api
Аноним 11/01/24 Чтв 08:29:26 #301 №2997118 
>>2997072
>/public/
Ты лучше объясни зачем тебе всякие мокрописьки типа xampp
Почему нельзя было
1) Скачать и распаковать zip файл с пыхой https://windows.php.net/download/
2) Добавить пыху в PATH
3) Скачать и запустить инсталятор композера https://getcomposer.org/Composer-Setup.exe
4) Скачать инсталятор ларки composer global require laravel/installer
5) Создать проект laravel new my-project
6) Запустить проект php artisan serve
7) Юзать проект на localhost:8000 без всяких пабликов

ты даже в апаче не умеешь рерайт настроить в своем ксампе хуямпе
Аноним 11/01/24 Чтв 08:34:24 #302 №2997123 
>>2997118
Если нужна БД то и MySQL и PostgreSQL устанавливаются инсталятором и спокойно работают. Но мог бы для обучения SQLite использовать. Даже сеньки ее для прототипирования юзают.
Аноним 11/01/24 Чтв 10:25:01 #303 №2997194 
>>2997118
>>2997123
Поскольку я изучаю - то есть знаний не ноль, но мало-мало - то я выбрал один из распространенных путей, не имея понятия о возможных проблемах, и, да, твое предположение про базу было верно, два в одном было ок-ок, вот и выбрал

Не ругайся, пожалуйста
Аноним 11/01/24 Чтв 14:45:44 #304 №2997543 
stupidstorm.jpg
Как заставить тупой шторм ставить точки с запятой как надо со смещением? Даже если нажимаю перед точкой с запятой Backspace, то тупой шторм переносит её на предыдущую строку, а не смещает на один таб назад.
Они там в жидбрейнс про PSR вообще слышали?
Аноним 11/01/24 Чтв 15:05:44 #305 №2997574 
goodvscode.jpg
>>2997543
Попробовал в VS Code. Всё отлично ставится куда надо. Ну и какой редактор куда лучше теперь? Платное, кривое, лагающие поделие от жидбрейнс, или бесплатный, легковесный, замечательный продукт вс код?
Аноним 11/01/24 Чтв 15:07:44 #306 №2997576 
code-style.png
>>2997543
Бля, да хуй знает как. Может быть блядь в НАСТРОЙКАХ? В тех самых неебически подробных настройках где есть параметр на каждый пердежь и в реальном времени видно как это влияет на код? В тех самых настройках где можно в один клик выбрать целиком пресет под любой нужный формат?
Аноним 11/01/24 Чтв 15:10:20 #307 №2997584 
>>2997576
Это должно всё быть уже настроено из коробки? За что я тогда плачу такие деньги? Самому за них ещё настраивать?
Аноним 11/01/24 Чтв 15:37:05 #308 №2997614 
Screenshot from 2024-01-11 15-30-37.png
>>2997584
Так оно и настроено. То что ты хочешь дрочить вприсядку это твои проблемы. Перенастраивай и дрочи.

Мне вот кодсниффер настроенный по всем псрам говорит что точка с запятой на новой строке это признак дегенерата. И я с ним в целом согласен.
Аноним 11/01/24 Чтв 21:14:16 #309 №2998234 
А что не так с mysql 8.2?
Ебался-ебался вчера с ней несколько часов - не открывалась консолька, сегодня решил снести и поставить 8.1 - все прекрасно работает.
Аноним 11/01/24 Чтв 21:52:02 #310 №2998363 
>>2998234
>Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит
Аноним 12/01/24 Птн 00:01:31 #311 №2998539 
Мужики делитесь плагинами и темами для шторма
Аноним 12/01/24 Птн 00:27:54 #312 №2998584 
gachi-theme.png
>>2998539
Аноним 12/01/24 Птн 00:43:31 #313 №2998602 
>>2994029
>>2992884
Я понял, что у меня все работает не потому что я понял условные подмаски (я их не понял), а потому что если убрать лишнее, то это регулярное выражение находит то, что мне нужно.
В итоге я составил регулярные выражения:
/^[^']+'{0,}[^']+$/ui = проверяет, что апостроф один.

/^[^']{1}'?[^']+$/ui = проверяет, что апостроф второй символ в строке.

/^[^\(\)]+\(?[^\(\)]+\)?$/ui = проверяет, что скобки использовались 1 раз и положение открывающей скобки относительно закрывающей.

/^[^\(\)]+$|^[^\(\)]+\({1}[^\(\)]+\){1}$/ui = проверяет, что строка содержит обе скобки.
Аноним 12/01/24 Птн 00:44:59 #314 №2998604 
>>2998602
А, да.
Для емайла забыл:
/^[a-zA-Z0-9]/
Адрес электронной почты должен начинаться с заглавной или строчной латинской буквы или цифры от 0 до 9.

/.+@/
Адрес электронной почты должен содержать уникальное имя почты
(набор символов перед @ (разрешаются заглавные и строчные латинские буквы, цифры от 0 до 9; точка, нижнее подчеркивание, дефис,
но только не первым символом)).

/@{1}[a-z]+\.{1}[a-z]+$/
Адрес электронной почты должке содержать доменное имя (набор символов после @ (допускаются доменная имена, состоящие из строчных
латинских букв)).

/@{1}/
Адрес электронной почты должен содержать символ "@", причем в единичном количестве.
Аноним 12/01/24 Птн 01:10:25 #315 №2998618 
>>2998604
Свит саммер чайлд, завязывай теребить свои коротыши и обрубки. Вот так выглядит правильная регулярка для валидации мыла https://pdw.ex-parrot.com/Mail-RFC822-Address.html

Кто всерьез (за деньги) этой хуйней занимался, то давно понял, что емейл это строчка с собакой (@) и максимальной длинной, на которую тебе не похуй (от 100 до ♾️). Все.
Аноним 12/01/24 Птн 01:49:59 #316 №2998645 
Какие темы алгосиков в основном на собеседовании в продукт? Слышал только про работы со строками. Есть ли подходящий сурс этих задачек?
Аноним 12/01/24 Птн 01:52:48 #317 №2998647 
>>2998618
>Свит саммер чайлд, завязывай теребить свои коротыши и обрубки. Вот так выглядит правильная регулярка для валидации мыла https://pdw.ex-parrot.com/Mail-RFC822-Address.html
Там же написано, она не учитывает комментарии, которые могут быть вложенными. Фактически на это нельзя написать регулярку, надо писать грамматику, но никто это делать не будет.
>Кто всерьез (за деньги) этой хуйней занимался, то давно понял, что емейл это строчка с собакой (@) и максимальной длинной, на которую тебе не похуй (от 100 до ♾️). Все.
Ага, сосачую.
Аноним 12/01/24 Птн 03:02:59 #318 №2998667 
>>2992887
>Залогинить - значит, выдать куки.
У меня есть файл utils.php, где есть функция, которая генерирует токен.
Мб мне и не нужен класс авторизации?
Вместо метода "залогинить" будут строки: вызов функции, которая генерирует токен, установление куки самим контроллером.
Тогда остается один метод - определить текущего пользователя.
Не жирно ли одному методу, в частности этому, целый класс?
Мб сделать метод в TDG, чтобы он принимал токен и возвращал объект студента? Контроллер будет обращаться к этому методу у TDG, а потом уже что-то с ним делать.
Аноним 12/01/24 Птн 10:52:28 #319 №2998837 
Читаю книжку Фабьена по Симфони и буквально от каждой главы у меня жестко бомбит. Действительно такое говно делают в реальных приложениях? Вместо пары строчек на РНР или html, он наворачивает всякие бандлы-хуяндлы, тянет 100500 пакетов через композер, а в конце ещё наворачивает npm с кучей фронт-говна. Я уж даже молчу про подключение ко всяким левым сервисам.
Ещё постоянно сталкиваюсь с багами, хоть и пытаюсь точно следовать книге, но постоянно возникают ошибки, о которых не упоминается. Какие-то сам догадываюсь как пофиксить, а какие-то вообще не понимаю. Например, его "замечательный" дизайн так и не смог увидеть, потому что фронт-говно не завелось, а вывалилось с ошибкой. Из-за чего ошибка - не пойму, не фронтендер и ничего в этом не смыслю.

Посоветуйте какой-нибудь нормальный материал по изучению Симфони.
Аноним 12/01/24 Птн 14:58:39 #320 №2999193 
>>2998837
Бля, мне аж интересно стало че там он там такое написал. В чем обосрался.
Читаю:
Создаем контроллер. Создаем модель. Создаем связи. Создаем шаблон. Создаем админку. Добавляем слаги. Выводим с пагинацией.
Все средствами фреймворка, руками буквально только конфиги нужно настраивать да хтмл писать в шаблонах.

>Вместо пары строчек на РНР или html
Пары строчек с чем? С самписной орм?
Цитата блядь из книги:
>Чтобы не изобретать велосипед, давайте воспользуемся Symfony-компонентом String, который не только облегчает работу со строками, но и содержит слагер
Ломающие новости: в книге по фреймворку учат пользоваться фреймворком. Да ну нахуй.

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

Короче, вкатусик. Вместо дебильного вопроса "зачем нужны фреймворки и либы" тебе нужно задаться вопросом "какого хуя я не могу повторить все в точности как описано в инструкции". Никакая книга не научит тебя внимательности, дисциплине и не даст способность концентрироваться на проблеме пока ты не найдешь её причину и не решишь. Баги и ошибки будут всегда, и некоторые придется искать неделями по восемь часов в сутки. Подумай лишний раз, нахуя оно тебе надо.
Аноним 12/01/24 Птн 15:22:10 #321 №2999216 
>>2999193
>спиздил
Она бесплатно выложена на сайте Симфони: https://symfony.com/doc/6.2/the-fast-track/ru/index.html
Аноним 12/01/24 Птн 15:29:10 #322 №2999222 
>>2999216
И это меняет... что? Кто заплатил, то получил ништячек, кто не заплатил тот не получил.
Аноним 12/01/24 Птн 15:37:10 #323 №2999237 
>>2999193
>че там он там такое написал
Автор сам не повторял свой гайд. У него куча несостыковок. Например, создали модель, описали как он сказал. А в итоге через пару глав оказывается, что модель уже другая. Конкретно некоторые поля внезапно стали допускать NULL.
Также по коду примеров не дописывает, надо лезть на гитхаб и самому выцеплять куски кода.

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

>деплоить, админить и прочую красноглазую хуйню
Умею, но не хочу. Я на программиста учусь или на сисадмина? Тем более многие сервисы сейчас недоступны в РФ. Да и сам Симфони пишет про поддержку сам знаешь какой страны.
Аноним 12/01/24 Птн 16:24:47 #324 №2999289 
>>2999237
>Например, создали модель, описали как он сказал. А в итоге через пару глав оказывается, что модель уже другая. Конкретно некоторые поля внезапно стали допускать NULL
Во всем проекте есть только одно nullable свойство:
https://github.com/search?q=repo%3Athe-fast-track%2Fbook-6.0-2%20nullable&type=code
>Comment.php#L55

Идем и смотрим когда и как его добавили:
https://github.com/the-fast-track/book-6.0-2/blame/main/src/Entity/Comment.php#L55
>Add 8.6: Adding more Properties

Идем и смотрим в книгу:
https://symfony.com/doc/6.2/the-fast-track/ru/8-doctrine.html#dobavlenie-dopolnitel-nyh-svojstv
>Я только что понял, что мы забыли добавить одно свойство к сущности комментария: участники, возможно, захотят приложить фотографию с конференции
>Выполните команду make:entity ещё раз и добавьте свойство/столбец photoFilename типа string с возможностью иметь значение null, так как загрузка фотографии не обязательна
Даже хз какой тут диагноз. Какая-то дикая смесь тупости наглости и чсв.

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

>Умею, но не хочу.
Ну не хоти. От твоего не хотенья хтмл и жс сами в браузер не попадут.
Аноним 12/01/24 Птн 17:16:25 #325 №2999387 
ну и пожалуйста.webm
>>2999289
Да и пофиг на ваш РНР. Пойду лучше обратно в го. Там у меня всё получается. Пусть там вакансий и меньше, но нет этого говна с фреймворками.
Аноним 12/01/24 Птн 17:33:39 #326 №2999420 
1400431726bukvar-1.jpg
>>2999387
Рекомендую пойти обратно в пикрелейтед. Книги по го тоже надо уметь читать и понимать
Аноним 12/01/24 Птн 18:12:05 #327 №2999476 
>>2999420
А ты - злая вонючка! Вот!
Аноним 12/01/24 Птн 18:26:11 #328 №2999488 
1fee7b3a1b2709a3f7bf54e95654608d.jpg
>>2999476
Давай тогда уже мимо яслей сразу обратно в отцовскую залупу.
И постарайся учесть все сложности программирования и максимально быстро стечь по ляжкам мамки.
Аноним 13/01/24 Суб 03:52:24 #329 №3000087 
>>2999488
Хотел бы я сейчас оказаться на пикриле
Аноним 14/01/24 Вск 03:11:25 #330 №3001768 
Хочу установить гит на 11-ую винду по этой ссылке: https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/Git-2.43.0-64-bit.exe

Но ничего не происходит, страница прогружается бесконечно.

Посоветуйте что-нибудь, аноны.
Аноним 14/01/24 Вск 03:36:57 #331 №3001787 
>>3001768
Я смог скачать, но почему эта залупа загрузилась только тогда, когда я подключил впн?
Аноним 14/01/24 Вск 08:52:14 #332 №3001909 
>>3001787
https://www.youtube.com/watch?v=UOfJc-RvG5Q.
Аноним 14/01/24 Вск 11:33:55 #333 №3001985 
>>2993758
Ларакасты на рутрекере. Там есть вводный курс по Laravel 8 - с него начни
Аноним 15/01/24 Пнд 06:36:56 #334 №3003138 
Я не испытывал никогда большей эйфории чем сейчас. Делал вход в приложение, причем я уже достаточно продвинуто знаю пыху. В кишках использовался метод password_verify. Все последние 11 часов я беспрерывно искал все способы разобраться в чём проблема. Оказалось, что жёстко заданные пароли (через SQL запрос) воспринимаются как с двойными кавычками, а необходимы динамичные одинарные. Поэтому все что нужно было зарегистрировать юзера через интерфейс и потом входить в него. А я 11 часов долбился в sql. 10% кода, 90% дебага.
Аноним 15/01/24 Пнд 06:40:51 #335 №3003139 
>>3003138
6 часов дебажил до этой проблемы, а 5 часов я копался до этого метода, потом проштудировал stackoverflow почему возвращает false. Признаться честно по большей части я страдал хуйней, а надо было просто пройтись по пути вызовов. Боялся что придётся менять что-то в кишках и искал обходные новые пути
Аноним 15/01/24 Пнд 12:11:37 #336 №3003295 
>>3001985
Они разве на русском?
Аноним 15/01/24 Пнд 12:56:57 #337 №3003397 
>>3003295
За русским языком тебе в 1 ASS
Аноним 15/01/24 Пнд 12:57:07 #338 №3003398 
Посмотрел парочку видео-гайдов по Симфони и ещё больше убедился, что книга Фабьена по Симфони - говно. Вместо того, чтобы описать свой фреймворк, показать основные фишки, он рассказывает про сторонние сервисы, которые ни как не относятся к Симфони.
Аноним 15/01/24 Пнд 13:09:40 #339 №3003416 
>>3003398
Называть эти секретные "сторонние" сервисы ты конечно не будешь.
Аноним 15/01/24 Пнд 13:24:08 #340 №3003435 
Как подключать css внутри html, если у меня все запросы перенаправляются на index.php, а тот подключает только контроллеры, т.е. php?
Аноним 15/01/24 Пнд 13:25:18 #341 №3003437 
>>3003138
>Оказалось, что жёстко заданные пароли (через SQL запрос) воспринимаются как с двойными кавычками, а необходимы динамичные одинарные.
Искренне хотел впитать мудрость, добытую таким трудом, но нихуя из написанного не понял.

1) Что такое "жестко заданные"? Это из какой документации термин?
2) Как вообще "задать" пароль (через SQL запрос)? Я думал что в базе хранится хеш (строка). И мы просто проверяем что хеш от введенного сейчас пароля такой же. А тут чего?
3) Что значит "воспринимаются"? Это у кого навык "восприятие" недокачан у базы или у пхп?
4) Что такое "динамичные" кавычки? И почему ты так назвал именно одинарные?
5) А главное, причем тут вообще кавычки? Вся работа с SQL должна происходить через PDO и все твои данные добавляться в запрос через параметры, а там никаких кавычек нет.
Аноним 15/01/24 Пнд 13:25:54 #342 №3003438 
Screenshot 2024-01-15 132536.png
>>3003435
Аноним 15/01/24 Пнд 13:29:26 #343 №3003442 
>>3003438
Норм ты унизил этого нубаса
Аноним 15/01/24 Пнд 13:38:54 #344 №3003457 
>>3003442
Пошел нахуй, пидорас.
Аноним 15/01/24 Пнд 13:39:17 #345 №3003458 
>>3003438
Хуйню скинул, читай нормально.
Аноним 15/01/24 Пнд 13:51:50 #346 №3003478 
>>3003458
Ты тупой? Ты или указываешь путь к css файлу или идешь нахуй. Кого ебет что ты уебищно настроил веб сервер и все запросы на index.php переводишь? Ну делай так чтобы Index.php мог css файл отдать. Или не делай.
Ссылка на css файл есть - стили есть.
Аноним 16/01/24 Втр 04:49:55 #347 №3004426 
Плейсхолдеры используются только тогда, когда нужно вставить данные в БД?
Аноним 16/01/24 Втр 07:49:39 #348 №3004471 
Можно ли использовать суперглобальную переменную $_COOKIE в html, если от того, установлена кука или нет, зависит логика отображения страницы?
Если кука установлена => отобразить такую надпись
Иначе => такую надпись.
В таком контексте можно обращаться к суперглобальным переменным в Представлении?
Аноним 16/01/24 Втр 08:20:15 #349 №3004479 
>>3004426
Надо взять за правило использовать всегда

>>3004471
Нельзя. Логика должна быть отделена от представления. Лучше пробросить свою переменную-флаг в представление и через неё отображать или нет надписи. Во фреймвёрках такие переменные группируют в сущности ViewModel и таким образом представление зависит только от них.
Аноним 16/01/24 Втр 08:44:03 #350 №3004496 
>>3004479
>Лучше пробросить свою переменную-флаг в представление
Даже если я пишу так:
isset($_COOKIE['someCookie'])?
Ты предлагаешь завести отдельную переменную и давать ей значение в соответствии с тем, установлена кука или нет?
Например:
кука установлена => $someVariable = 'такая-то надпись'
кука не установлена => $someVariable = 'другая надпись'.

В представлении:
<p><?= $someVariable ?>
Аноним 16/01/24 Втр 09:09:31 #351 №3004511 
>>3004496
Нет, переменная должна быть просто флажком (булевой) в данном случае.
<?php if (isSomeThink): ?>
такая-то надпись
<?php else: ?>
другая надпись
<?php endif; ?>
Аноним 16/01/24 Втр 09:26:02 #352 №3004517 
>>3004496
Ты вообще учился у Альберта? Советую пройти его курсы, тогда многие вопросы отпадут. Он показывает как следует программировать.
Аноним 16/01/24 Втр 09:53:42 #353 №3004543 
>>3004517
Кто это
Аноним 16/01/24 Втр 09:54:06 #354 №3004544 
>>3004511
Окей, спасибо, анон
Аноним 16/01/24 Втр 09:55:43 #355 №3004547 
>>3004543
Альберт ProfIT Степанцев
Можешь написать ему: был пиратом, но хочу учиться, и получишь скидку на курсы.
Аноним 16/01/24 Втр 10:50:15 #356 №3004616 
Я чего-то не понимаю в этой жизни, или требовать установки readonly свойств в конструкторе это хуита какая-то?
Аноним 16/01/24 Втр 12:44:55 #357 №3004771 
>>3004479
Вот такие вот дегенераты и несут с сурьезным ебалом какую-то чепуху.

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

>сущности ViewModel
Термин "сущность" хуй знает зачем тут приплетен. Даже по каличному обрубку определения из википедии понятно ну никаким хуем представление сущностью быть не может.

ViewModel из названия говорит о том что это view модель блядь. Никакие переменные в ViewModel не группируют. Это данные МОДЕЛИ преобразованные чтобы их было удобно отображать. И используют ViewModel именно когда данные внутри модели бизнеса не подходят для отображения. Например: для операций с датами необходимо и достаточно чтобы эти даты были в виде объектов. А для отображения надо даты преобразовывать в строки определенного формата, причем разного. Вместо того чтобы совать в бизнес модель методы под каждый шаблон создают View этой модели в котором и преобразуют все как надо.

Короче наворочено терминов чтобы выглядеть умнее. А достаточно знать всего две вещи:
1) Для удобства работы с шаблонами заводят специальный сервис, который обычно называют View (то самое V из MVC).
Типичный вызов которого выглядит так $view->render('my-template.php', array $dataToShow). Все остальное факультативно, необязательно и по желанию.

2) Работать на прямую с $_COOKIE нельзя потому что это ГЛОБАЛЬНЫЙ блядь массив. И его содержимое может поменяться в любом месте. Как минимум есть куки входящего запроса и исходящего. И это нормально что они могут в процессе поменяться. Поэтому типичный способ работы с куками это положить входящие куки в иммутабельный объект, который гарантирует что они не будут перезаписаны или перезатерты и спокойно доедут до твоего шаблона.
Аноним 16/01/24 Втр 12:58:01 #358 №3004783 
>>3004771
Нет, проблема в агрессивном быдле, которое научилось что-то там клепать на пыхе и думает, что знает всё на свете, и пытается свою дурь выдавать за единственно существующую истину.

ViewModel - это то, что ты передаёшь как array $dataToShow. Как правило она отличается от обычной модели и требует дополнительных параметров, чтобы отобразить контент.
Аноним 16/01/24 Втр 13:08:06 #359 №3004791 
>>3004783
>проблема в агрессивном быдле, которое научилось что-то там клепать на пыхе и думает, что знает всё на свете, и пытается свою дурь выдавать за единственно существующую истину.
>выдает "истину", источник - ОБС
Самокритично
Аноним 16/01/24 Втр 16:15:10 #360 №3005015 
Почему в Ларе модели описываются в миграциях, а сами модели оставляют пустыми?
Аноним 16/01/24 Втр 16:38:48 #361 №3005043 
>>3005015
А нахуй нужны миграции в моделях?
И модели там не пустые, касты, скоупы, отношения, например
Аноним 16/01/24 Втр 16:39:39 #362 №3005046 
>>3005015
В миграции описывается не модель, а схема
Аноним 16/01/24 Втр 16:46:52 #363 №3005054 
>>3004616
Смотря в каком классе. В модели/сущности - хуета, т.к. данные там могут меняться в рантайме.
В сервисе каком-нибудь или ДТО - нормальная тема, ибо мутабельные ДТО - зло, а в сервисах изменять зависимости после сборки - тоже плохо.
Аноним 16/01/24 Втр 16:48:58 #364 №3005058 
>>3005015
В миграции ты описываешь схему таблицы в БД.

Модель остаётся пустой из-за того, как в Элоквенте (дефолтная ОРМ в Ларавеле) устроены модели. Там за счёт родительского класса модели происходит инициализация всех полей. В самой модели там обычно только методы с логикой описывают (ибо Элоквент - ActiveRecord)
Аноним 16/01/24 Втр 19:50:32 #365 №3005328 
1705423832012.jpg
Привет, есть проблема с Open Server-ом, понимаю что не по теме PHP вопрос, но может поможет кто.

Проблема пикрил, винда десятая, раньше программа запускалась без проблем, перезагружать пробовал.
Подскажите нуфагу что конкретно нужно сделать.
Аноним 16/01/24 Втр 19:57:49 #366 №3005335 
>>2994674
>В каком месте они её облегчают
ни в каком, перекатывайся на симфонию/не используй лару нигде кроме роутинга
Аноним 16/01/24 Втр 20:02:49 #367 №3005349 
>>3005328
И вообще, в чём может быть корень проблемы? Что-то мешает работе локального сервера?
Аноним 16/01/24 Втр 20:04:12 #368 №3005354 
>>2999387
>но нет этого говна с фреймворками.
да, его там нет, только тебе надо уметь собирать аналоговнет симфонии из говна и палок
Аноним 16/01/24 Втр 20:06:55 #369 №3005366 
>>3005015
потому что лара это пхп-аналоговнет рельс
Аноним 16/01/24 Втр 20:51:20 #370 №3005460 
>>3005328
А что непонятно? Все же написано. OpenServer пытается изменить файл hosts, но не может. Потому что кто-то прямо сейчас с ним работает. Это может быть вирус, антивирус, да хоть не закрытый процесс того же опенсервера.

Проверить кто там че залочил можно виндовской утилитой
https://learn.microsoft.com/ru-ru/windows/powertoys/file-locksmith
Можно попробовать утилиту подготовки винды от разрабов OpenServer
https://github.com/OSPanel/SystemPreparationTool

Как вариант можно в настройках OpenServer запретить редактировать hosts, но этот вариант хуевый. Потому что во первых ему это надо для нормальной работы, а во вторых все и так должно нормально работать.
Аноним 16/01/24 Втр 23:30:02 #371 №3005734 
>>3005460
Большое спасибо за ответ.
Я сейчас комп включил, ради интереса запустил Open Server, и он начал работать нормально. Хз с чем это связано, потому что я его уже перезапускал несколько раз и всё равно вылезала эта ошибка. Если вдруг возникнет та же проблема, то воспользуюсь твоей утилитой которую ты скинул. Спасибо за помощь.
Аноним 17/01/24 Срд 09:57:50 #372 №3006271 
Как считаете, будет норм, если:
У меня есть форма с полями, у каждого поля должно быть значение.
Значение зависит от того, что находится в переменных php.
Я отображаю либо значение, либо пустоту, в зависимости, установлено значение для переменной или нет.
пример: <?= isset($someObject->someProperty) ? $someObject->getSomeProperty() : ' '; ?>

У меня постоянно какая-то хуйня выскакивает.
Объект $someObject заполнен данными и условие isset($someObject->someProperty) должно быть истинным, но скрипт отображает форму так, будто объект пустой.

Но не суть дела.

Я думаю сделать так:
Убрать все эти isset, завести переменные для каждого поля, заполнить их в php-скрипте, а потом уже загружать шаблон.

Т.е. раньше было так:
<?= isset($someObject->someProperty) ? $someObject->getSomeProperty() : ' '; ?>

А станет так:
<?= $someVariable ?>

в php-скрипте будет так:

$someVariable = isset($someObject->someProperty) ? $someObject->getSomeProperty() : ' ';
Аноним 17/01/24 Срд 13:18:59 #373 №3006628 
Коданы, нужна небольшая подсказка про Ларавель. Помогите, пожалуйста, разобраться с тем, как относятся друг к другу файлы .env и database.php (который в папке config)

Не понимаю, в частности, зачем нужен database.php если он все равно файлом .env перекрывается и что бы я в датабейс не писал, важно только то, что написано в енв

Что это за такое как как с этим жить? Зачем датабейс, если он не используется? Или используется когда-то?

Почему спрашиваю: вот в файле датабейс я написал 1) конфиг для локальной машины, чтобы тестить пере загрузкой на хостинг и 2) конфиг хостинга -- с тем, чтобы поменяв только DB::connection('name') легко и просто переключаться между соединениями - а в итоге использовался только енв и его пришлость полностью править руками... что за чепуха?
Аноним 17/01/24 Срд 15:16:35 #374 №3006766 
Поставил бесплатный плагин для симфони в шторм и появилось удобное меню создания проекта как в идее для спринга. Но при этом стоит платный плагин для ларавеля и нифига такого нет. За что мы плотим этим дармоедам деньги!?
Аноним 17/01/24 Срд 15:54:06 #375 №3006806 
>>3006271
>isset($someObject->someProperty) ? $someObject->getSomeProperty()
Наркоман, тебя ничего не смущает?
Ну типа ты проверяешь одно, а выводишь другое. Ниче в башке не щелкает?
Я уж не говорю что сто лет как упрощенный синтаксис для этого существует:
<?= $someObject->getSomeProperty() ?? '' ?>
Аноним 17/01/24 Срд 16:22:23 #376 №3006844 
>>3006628
Пароли не хранят в кодовой базе. Потому что там их может увидеть по сути кто угодно. На реальном сервере пароли задаются админом через переменные окружения ОС. Соответственно видеть их может только админ сервака. И твой код должен все пароли, секретные фразы и префиксы именно оттуда и получать.

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

Короче:
1) Твои девелоперские пароли должны храниться только в локальном .env файле и ни в коем случае не в гите.
2) Получать пароли внутри кода нужно только через переменные окружения.
3) Ни в каком .php файле офк никакой секретной информации быть не должно.
Аноним 17/01/24 Срд 16:24:54 #377 №3006846 
>>3006766
>бесплатный плагин для симфони в шторм и появилось удобное меню создания проекта
>платный плагин для ларавеля и нифига такого нет
Не дают делать говно. А минусы будут?
Аноним 17/01/24 Срд 20:41:28 #378 №3007369 
>>3006844
А как Ларавель получает пароли из переменных окружения? Ни какого такого кода там не видно
Аноним 17/01/24 Срд 21:03:46 #379 №3007397 
il570xN.50540383981kr3.webp
>>3007369
На, попей.
https://github.com/laravel/laravel/blob/10.x/config/database.php#L40
Аноним 18/01/24 Чтв 08:12:22 #380 №3007786 
>>3007397
Хелпер env тянет значение из .env файла
Аноним 18/01/24 Чтв 09:05:11 #381 №3007808 
>>3007786
https://github.com/laravel/framework/blob/10.x/src/Illuminate/Support/helpers.php#L136

https://github.com/laravel/framework/blob/10.x/src/Illuminate/Support/Env.php#L75

https://github.com/laravel/framework/blob/10.x/src/Illuminate/Support/Env.php#L101

https://github.com/laravel/framework/blob/10.x/src/Illuminate/Support/Env.php#L59

https://github.com/laravel/framework/blob/10.x/src/Illuminate/Support/composer.json#L52

https://github.com/vlucas/phpdotenv/blob/master/src/Repository/RepositoryBuilder.php#L270

https://github.com/vlucas/phpdotenv/blob/master/src/Repository/AdapterRepository.php#L68

https://github.com/vlucas/phpdotenv/blob/master/src/Repository/Adapter/MultiReader.php#L40

https://github.com/laravel/framework/blob/10.x/src/Illuminate/Support/Env.php#L59

https://github.com/vlucas/phpdotenv/blob/master/src/Repository/Adapter/PutenvAdapter.php#L58

https://www.php.net/manual/en/function.getenv.php
Аноним 18/01/24 Чтв 09:17:13 #382 №3007817 
>>3007808
Хороший.
Все бы так копали.

Очевидно что в конечном счете содержимое .env попадает в конфиг. Но важно как оно туда попадает. Код обращается к абстрактному Repository - хранилищу переменных окружения. А откуда в это хранилище эти переменные попадают - с хоста или из файла дело десятое. Сам код от способа их получения не сломается и пароли никуда не утекут.
Аноним 18/01/24 Чтв 09:29:01 #383 №3007822 
>>3007817
Сломается админ, когда увидит что пароли на гитхабе хранятся
Аноним 18/01/24 Чтв 09:31:18 #384 №3007824 
>>3007822
А если надо сделать пет-проект, чтобы работодатель мог скачать мой проект и сразу запустить, а не создавать всякие доп. файлы?
Аноним 18/01/24 Чтв 09:33:54 #385 №3007825 
>>3007824
Если работодатель увидит что ты пароли в открытом доступе хранишь? Думаешь он перезвонит?
Аноним 18/01/24 Чтв 09:38:38 #386 №3007832 
>>3007825
Дак ему придётся откуда-то .env взять.

Вообще, это как-то тупо, что такой важный файл по сути исчезает из репозитория. Допустим я скачаю свой проект на другой комп и он не запустится, потому что этих файлов нет, а быстро их фиг создашь. Надо где-то взять такой же как образец.
На мой взгляд сделали бы маленький файл password, где всего одна строчка - сам пароль, а не сложную такую структуру, которую не повторишь по памяти.
Аноним 18/01/24 Чтв 09:53:21 #387 №3007839 
facade.jpg
Даже с платным плагином для лары фасады всё равно не автокомплитятся и шторм считает их ошибкой, подчеркивает жёлтой линией. Как сделать, чтобы это всё автокомплитилось и не подчёркивало жёлтым?
Аноним 18/01/24 Чтв 09:56:23 #388 №3007844 
>>3007839
https://docs.phpdoc.org/2.9/references/phpdoc/tags/method.html
Аноним 18/01/24 Чтв 10:00:50 #389 №3007849 
>>3007824
Можно поместить в корневую директорию скрипт, который просит указать имя\пароль, после чего создаёт env файл и запускает проект.
Хотя не уверен, насколько такая практика корректна.
Аноним 18/01/24 Чтв 10:03:42 #390 №3007851 
>>3007844
Не программист же должен развешивать это всё? Почему сам фреймвёрк не добавляет эти теги? Почему плагин ничего не делает? Они вообще-то берут деньги за него, а пользы от него пока я не увидел.
В платной идее есть полная поддержка спринга, а шторм ни черта нет. Походу жидбрейнсы хуём по губам водят пхпышникам и берут деньги за редактор кода.
Мне просто есть с чем сравнивать и я вижу, что тут полное надувательство.
Аноним 18/01/24 Чтв 10:13:05 #391 №3007863 
>>3007824
>>3007832
>Надо где-то взять такой же как образец
>где-то
https://github.com/laravel/laravel/blob/10.x/.env.example

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

В папке с проектом должен лежать docker-compose.json и все что человеку, который хочет твой проект запустить надо сделать это выполнить docker compose up -d . Все.
Аноним 18/01/24 Чтв 10:25:24 #392 №3007878 
>>3007863
И как докер решает проблему публикации паролей? Ты там тоже описываешь все параметры базы как ссылки на секретный env файл, только он там другого формата. И тот, кто скачает, тоже должен создать свой env файл, прописать свои пароли и только тогда docker compose up -d корректно отработает.
Аноним 18/01/24 Чтв 10:36:15 #393 №3007895 
>>3007878
Пароли и не публикуют. Их админ генерирует, когда проект деплоит. Тогда он передает докеру окружение через свои скрипты или использует docker secret. Задача програмиста только говно в проект не хардкодить
Аноним 18/01/24 Чтв 12:56:40 #394 №3008138 
>>3006806
><?= $someObject->getSomeProperty() ?? '' ?>
У меня от этой хуйни вылезает ошибка:
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in
Аноним 18/01/24 Чтв 17:21:16 #395 №3008557 
>>3008138
Бля, это шутка такая? Ты внатуре под солями там сидишь?

>Cannot use isset()
Где ты isset в строчке, которую процитировал, увидел?
Аноним 20/01/24 Суб 01:48:14 #396 №3010669 
Ща вообще реально в России найти удалёнку за 150к для мидла-крудошлёпа? А то я уже несколько месяцев что-то ищу, все только обещают перезвонить.
Аноним 20/01/24 Суб 03:03:11 #397 №3010695 
>>3008557

наверно это вызвано использованием ?? вместо ?:
Аноним 20/01/24 Суб 03:08:37 #398 №3010697 
>>3010695
Кого бля? Ты бы еще вот так вот посоветовал:
<?= $someObject?->getSomeProperty()?>
Аноним 20/01/24 Суб 03:35:36 #399 №3010706 
>>3010669
Так ты джун.
Мидлы таких тупых вопросов не задают - они и так работают на удаленке за 150к.
Аноним 20/01/24 Суб 04:00:56 #400 №3010717 
>>3010695
>наверно
Бля, проверить и узнать точно даже проще чем пернуть "наверно". https://3v4l.org/eT1Fq
Все никак не привыкну что в этот тред стекается самое тупорылое отребье двачей.
Аноним 20/01/24 Суб 10:15:40 #401 №3010813 
>>3010717
Для пхп - это нормально. Тут уровень дискуссий всегда ниже, чем в го или джава тредах.
Аноним 20/01/24 Суб 12:52:49 #402 №3010883 
Как лучше написать метод, обновляющий данные в таблице?

Для каждой колонки свой метод?
Один общий метод, в который можно подставлять названия колонки?
Аноним 20/01/24 Суб 13:40:30 #403 №3010945 
>>3010883
На мой взгляд нужно мыслить в рамках объектов. У тебя есть объект, который надо сохранить в базе или достать из базы. Соответственно и методы должны выполнять эти роли. Сама обвязка для работы с базой обычно называется репозиторием. Интерфейс работы с ней не должен быть привязан к какой-то низкоуровневой системы вроде базы данных, файлам и т.п. А просто представлять собой универсальное хранилище. Таким образом можно менять реализацию хранилища, а для пользователя это будет единный удобный интерфейс.
Аноним 20/01/24 Суб 17:56:11 #404 №3011183 
>>3010945
>Дохуя воды
Данные то как в таблице обновлять? Даже с твоим охуительным репозиторием данные в итоге должны попасть в таблицу в базе. Ты вообще прочитал о чем спрашивали?
Умное ебало ты сделал, а на вопрос не ответил.
Аноним 20/01/24 Суб 19:21:41 #405 №3011375 
>>3011183
PDO и подготовленные запросы
Аноним 20/01/24 Суб 23:24:04 #406 №3011842 
>>3011375
Ясен хуй что пдо, чучело. "Запросы" надо делать, ебать гений.
Водяной ебучий, вопрос был как эти запросы формировать.
Нахуй ты лезешь если тебе по делу сказать нечего?
Аноним 20/01/24 Суб 23:28:41 #407 №3011845 
>>3010945
Бля, ты ответ на вопрос в чат гпт генерил?
Аноним 21/01/24 Вск 00:51:05 #408 №3011954 
>>3010883
Без кода и как ты это будешь использовать не получится подсказать. Тут такое, если через много колонок кто вызывать этот метод будет, будет знать структуру таблицы надо же описать в массиве ее что бы обновить. Попробуй обобщить все, а потом уже детально разбить на другие функции
Аноним 21/01/24 Вск 01:17:23 #409 №3011987 
>>3011954
>не получится подсказать
>попробуй сам
Ебать, спасибо папаша, за очередной абзац нихуя.

Это какой-то рвотный рефлекс? Вы когда видите этот вопрос автоматически блюете в тред, даже если понимаете что вам сказать нехуй?
Аноним 21/01/24 Вск 08:01:33 #410 №3012152 
>>3011842
>>3011845
Сожалею, что вам не подошёл мой ответ
Аноним 21/01/24 Вск 09:47:01 #411 №3012199 
>>3012152
Да че ты. Отлично подошел.
В следующий раз пиши чтобы использовал php и SQL. Вообще всем в этом треде подойдет, базарю.
Аноним 21/01/24 Вск 16:13:46 #412 №3012513 
>>3010883
Зависит от задачи, кстати с тобой хотел поговорить наш тимлид. Просил передать, чтобы ты зашёл к нему в кабинет
Аноним 21/01/24 Вск 16:21:51 #413 №3012518 
004.png
Как это ебаное поле ввода увеличить чтобы было на всю страницу? Пробовал гуглить ни один способ не работает а в верстке я ни бум-бум

<form action="create.php" method="post">
<p><b>Введите текст:</b></p>
<p><textarea rows="25" cols="150" name="text"></textarea></p>
<p><input type="submit" value="Отправить"></p>
</form>
Аноним 21/01/24 Вск 16:23:34 #414 №3012519 
>>3012518
width не помогает?
Аноним 21/01/24 Вск 16:39:24 #415 №3012528 
>>3012519
А все, просто у меня был подключен файл цсс в котором я так понял искались стили а я редактировал все в индексе
Аноним 22/01/24 Пнд 14:39:53 #416 №3013808 
>>3010883
Просто отталкивайся от задачи. Если у тебя есть форма обновления, где заносятся старые данные то делай общий метод. Если отдельная кнопка повысить сотрудника, то отдельный метод. Спросишь что если и то и это, так всё то же самое есть общий метод, есть метод для отдельной колонки. Связано это с тем, что нехуй делать хулиярд запросов к бд когда можно одним
Аноним 22/01/24 Пнд 14:47:01 #417 №3013816 
>>3013808
Если ситуация такая, что старые данные не заносятся в форму и поля передаются пустыми (не хочешь их изменять), то ничего плохого в том, чтобы делать отдельные запросы методами внутри общего метода обновления нет. А еще если подумаешь найдёшь способ прописать условия при наличии/отсутствии данных в общем методе одним запросом
Аноним 22/01/24 Пнд 15:03:00 #418 №3013839 
Короче общий метод всегда лучше так как по правилам метод == запрос. Общий метод у тебя так и так будет, только в одном случае ты делаешь 5 запросов, в другом 1 и соответствуешь логике метода
Аноним 22/01/24 Пнд 15:58:47 #419 №3013936 
>>3013808
>Просто отталкивайся от задачи
>если и то и это, так всё то же самое
>нехуй делать хулиярд запросов к бд когда можно одним
>ничего плохого в том, чтобы делать отдельные запросы
>по правилам метод == запрос
>Общий метод у тебя так и так будет
Это какая-то шизофазия. Начинается с "так-то да, а так-то нет", а заканчивается философским выводом о сути процедурного программирования. И о каких "правилах" идет речь? Откуда ты это ебанутое правило про запрос вообще взял?

Спасибо, товарищ долбоеб, что в трех абзацах повторил вопрос. Действительно можно сделать одним методом, а можно не одним. Очень тонко подмечено.
Аноним 22/01/24 Пнд 16:11:17 #420 №3013957 
>>3012513
>кстати с тобой хотел поговорить наш тимлид. Просил передать, чтобы ты зашёл к нему в кабинет
Я еще не устроился на работу, а он уже меня ждет.
Аноним 22/01/24 Пнд 16:34:30 #421 №3013992 
Какие книги обязательно прочитать любому php и просто программисту?
Есть что посоветовать?
И желательно без воды.
Аноним 22/01/24 Пнд 16:39:23 #422 №3013996 
>>3013992
Боба Мартина и кабанчика
Аноним 22/01/24 Пнд 16:42:59 #423 №3014000 
1400431726bukvar-1.jpg
>>3013992
Тред не читал, да?
Начни вот с этой. Половина тут сидящий её скипнули. Буквально парой десятков постов выше еблан не осилил прочитать сто страниц.
Аноним 22/01/24 Пнд 16:47:43 #424 №3014006 
>>3014000
Спасибо, но я серьезно.
Я чувствую, что мне очень не хватает базы по архитектуре, по ООП, по всяким сущностям, сервисам и т.д.

И вот хотелось бы книг, чтобы восполнить этот пробел.

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

Но мб у анона есть хороший пример книг и я не туда смотрю?
Аноним 22/01/24 Пнд 16:49:17 #425 №3014007 
Как считаете, передавая объект в метод, лучше сделать этому классу интерфейс и передавать в тайпхинт не название класса, а название интерфейса?
Аноним 22/01/24 Пнд 17:11:02 #426 №3014031 
>>3014000
А как тогда пишут букавы, если не читали букварь?
Аноним 22/01/24 Пнд 17:25:12 #427 №3014061 
>>3014007
Ну если создаешь интерфейс только ради того чтобы потом его просто прописать в тайпхинт - это явно плохая идея.
Аноним 22/01/24 Пнд 17:34:23 #428 №3014079 
>>3014061
Типизация это хорошая идея. Скажи спасибо создателям этого говноязыка что в пхп для этого приходится в ооп дрисню нырять.
Аноним 22/01/24 Пнд 18:13:00 #429 №3014191 
9404091e8ce4068886358454531f0441.jpg
>>3014006
>я серьезно
>книги обязательно прочитать любому php и просто программисту
>мне очень не хватает базы по архитектуре, по ООП, по всяким сущностям, сервисам
Серьезно?
Открой букварь и внимательно просмотри. Видишь как это работает: есть текст, а есть картинка. На картинке то что в тексте, а в тексте то что на картинке.
Научись блядь называть вещи своими именами.

Если у тебя "пробелы" в виде незнания ооп, то ты просто не знаешь язык. Пхп это исключительно про ооп. Не знаешь = не умеешь писать код.
Если ты не знаешь каких-то терминов, то пиздуй в википедию. Целиком книгу ради одного абзаца читать бессмысленно.

>такое ощущение, что и книги по программированию теперь пишут как те книги, которые рассказывают как стать счастливым
Вот это предельно точное определение.
Ты пытаешься читать ответы, не зная вопросов. Литературно тот самый нафталиновый прикол про "42".

Тебе не "не хватает".
Ты подменяешь задачу, которую тебе нужно решать как джуну: научиться писать код, который делает то что хочет умный дядя. Быть на подхвате.
На задачу, которая тебе ближайшие несколько лет не светит: проектирование систем.
Ты пытаешься научиться строить башню из кубиков пикрелетед, вместо того чтобы понять что у тебя в руках и как этим пользуются.
Аноним 22/01/24 Пнд 18:19:30 #430 №3014215 
>>3013992
По РНР нет хороших книг. Сам искал что-нибудь достойное, но большинство какой-нибудь кал типа давай изучим как говношлёпать сайты на пыхе, мускуле, хтмл, жс и цсс. Сами авторы пишут отвратительный говнокод.
Переводные книги, несмотря на огрехи переводов, всё равно лучше книг отечественных авторов. Не знаю почему так происходит, но русскоязычные авторы элементарно не могут формулировать мысли.
Так что лучше читать книги по другим языкам по интересующей тематике. Если нужно ООП и паттерны, то читай книги по джаве. Если по сетевым технологиям и микросервисам, то сейчас выходит куча книг по го.
Аноним 22/01/24 Пнд 21:30:49 #431 №3014514 
>>3014079
Никто и не спорит что типизация - плохая идея. Плохая идея - создавать пустой интерфейс чтобы прописать тайпхинт.
Аноним 22/01/24 Пнд 22:11:52 #432 №3014626 
>>3014514
Как ты в пхп что-то типизируешь не создавая класс или интерфейс, гений?
Аноним 23/01/24 Втр 05:10:51 #433 №3014925 
>>3013936
Сиронизировал графоманией над вкатуном. Естественно после нажатия на кнопку "обновить запись article" должен запускаться метод обновления записи article целиком единым запросом, а не обновление столбцов article по-отдельности. Обосрался в том, что вообще допустил идею об отдельных методах и говном смердит на весь тред
Аноним 23/01/24 Втр 07:35:05 #434 №3014961 
>>3014925
>должен запускаться метод обновления записи article целиком единым запросом
И этот запрос возьмется... откуда? А если надо не "целиком", а только одно поле поменять? Такой запрос откуда возьмется? А если у тебя десять таблиц? Ты под каждую таблицу будешь запросы писать?

Ты ведь смотри, долбоеб. Если реально думать, а не пердеть водой в тред, то можно дойти до того что нужен БИЛДЕР, который по СХЕМЕ таблиц будет строить ЗАПРОС, в который ты через PDO будешь свои значения передавать.
Аноним 23/01/24 Втр 18:51:06 #435 №3015941 
image.png
>>2975215 (OP)
Сап, двач, я в кодинге абсолютный ноль, хоть и учусь в вузике, пошёл на вакансию без опыта, моё тз - написать веб-приложение блог, я не знаю откуда мне начинать, мне нужно это сделать за пару дней. Анонны, помогите, пожалуйста, что и в каком порядке мне нужно изучить, и как это заспидранить? Буду благодарен
Аноним 23/01/24 Втр 19:14:17 #436 №3015951 
>>3015941
чат гпт юзай, он тебе накидает говна который можешь для своего тестового использовать
Аноним 23/01/24 Втр 19:51:24 #437 №3015987 
>>3015951
Бля, ну круто, конечно, но хочется понимать что это говно делает, ну походу надо траить, подскажи где его бесплатно достать?
Аноним 23/01/24 Втр 19:53:07 #438 №3015990 
>>3015987
чат гпт объясняет лучше двачеров. он бывает пиздит, но двачеры пиздят чаще
Аноним 23/01/24 Втр 19:59:07 #439 №3015999 
>>3015990
Верю. Не подскажешь где его брать? Акки в тг или сайты какие?
Аноним 23/01/24 Втр 19:59:40 #440 №3016001 
>>3015941
>в кодинге абсолютный ноль, хоть и учусь в вузике
Чем ты там занимаешься тогда?
Помню мне дали аналогичное задание и удалось это всё изучить и сделать буквально за неделю, хотя про РНР ничего не слышал даже.
Аноним 23/01/24 Втр 20:03:31 #441 №3016004 
>>3016001
От армии кошу, проебался, когда в школе нужно было учится, сейчас за голову хочу взяться
Аноним 24/01/24 Срд 07:46:38 #442 №3016544 
>>3015999
Заплатили 170 рублей за впн на опенсервере и 20 рублей за номер для регистрации. Наверняка в Ютубе есть подборка бесплатных
Аноним 24/01/24 Срд 07:49:09 #443 №3016545 
Я своё тестовое чуть ли не полностью сгенерил, просто лень было и не все нужные методы знал. Главное сначала сформулируй запрос так:
Вот моё тз: ....
Опиши порядок действий который я должен сделать. И потом проси его написать каждый пункт отдельно
Аноним 24/01/24 Срд 07:51:27 #444 №3016549 
И ещё нужно как можно меньше комментариев в методах. Комментируй сами методы, а не то что внутри как он будет выдавать
Аноним 24/01/24 Срд 08:39:10 #445 №3016566 
А правда, что одинарные кавычки работают быстрее, чем двойные?
Аноним 24/01/24 Срд 08:54:55 #446 №3016571 
>>3016566
Дожили, долбоебы даже набросить не могут нормально.
Ты вопрос неправильно сформулировал, еблан.
Правильный вопрос: что будет быстрее, объединить строку с переменной конкатенацией или интерполяцией?
Аноним 24/01/24 Срд 09:04:06 #447 №3016581 
>>3016571
Зачем сразу оскорблять?
Аноним 24/01/24 Срд 09:06:27 #448 №3016585 
>>3016581
Нельзя никого оскорбить, можно только оскорбиться.
Зачем сразу оскорбляться?
Аноним 24/01/24 Срд 15:28:22 #449 №3017098 
>>3016545
Спасибо, попробую
Аноним 24/01/24 Срд 17:13:11 #450 №3017266 
>>2992926

Праздники, поэтому ответ чуть с запозданием.

>> Для email лучше все интегрировать в одно правило, так как кроме проверки email это все вряд ли понадобится
> Ты имеешь ввиду использовать одно регулярное выражение для проверки всех требований к емайл?

Нет, сделать класс-правило для проверки email и в нем сделать нужное количество проверок. А не разбивать проверку email на несколько отдельных правил.

>> Залогинить - значит, выдать куки
> Получается, что логиниться пользователь будет только 1 раз - при первом добавлении его информации в БД?

Да.
Аноним 24/01/24 Срд 17:18:12 #451 №3017279 
>>2994029

Нет, я имел в виду правило, в которое ты передаешь 2 регулярки:

new MatchesAllOrNone('/'/u', '/^\pL'/', 'сообщение об ошибке');

Но воообще, тут можно обойтись и одной регуляркой без условий. Мы можем просто сделать регулярку вида: либо в строке нет апострофа, либо он идет после первой буквы и дальше нет апофторофов:

/^[^']*$|^\pL'[^']+$/

Или это не сработает?
Аноним 24/01/24 Срд 17:20:07 #452 №3017282 
>>2994301

Тебе нужно

1) настроить виртуальные хосты (vhost), каждый в своей папке
2) использовать имена вида xyz.localhost либо прописать домены в файл hosts, чтобы они резолвились в IP-адрес
Аноним 24/01/24 Срд 17:22:15 #453 №3017287 
>>2994580

Например, есть голосование без авторизации, но с ограничением голосов по IP. Злоумышленник может с помощью CSRF накрутить себе голосов с IP пользователей.

CSRF нужна везде, не только для авторизованных пользователей. Поэтому она и использует отдельный токен.

Но как вариант, можно проверять HTTP-заголовок Origin. вместо токена.
Аноним 24/01/24 Срд 17:23:47 #454 №3017290 
>>2994585

Вообще, нет. Что если на сайте-жертве есть редирект и злоумышленник отправляет запрос на сайт-жертвы сквозь URL редиректа? Уверен, что кука не будет отправлена?

Ты какие-то свои велосипеды придумываешь вместо того, чтобы применять рекомендации.
Аноним 24/01/24 Срд 17:24:56 #455 №3017294 
>>2994968

Если есть ограничение доступа по IP или голосование с ограничением по IP, то с помощью CSRF можно накручивать голоса.
Аноним 24/01/24 Срд 19:57:39 #456 №3017561 
>>3017266
>Праздники, поэтому ответ чуть с запозданием.

Я думал, что ты умер или я тебя заебал с вопросами.

Спасибо за ответ!
Аноним 25/01/24 Чтв 00:45:32 #457 №3018071 
>>2975215 (OP)
>>1008826 (OP)
Есть роут, который возвращает новую модель карточки товара. Мне дали задание, чтобы при желании он возвращал старую модель карточки товара грубо говоря возвращать немного другие поля товар. Я добавил флаг oldModel, и тут возник вопрос, как правильно поделить логику для новой и старой карточки?
Метод, который срабатывает при обращении к роуту находится в контроллере ProductPage

class ProductPage {
//упрощенный вариант
public static function get($productFieldValue, string $getByField)
{

$arProduct = Product::getMainProduct($productFieldValue, $getByField); //запрос в базу данных
$arProduct = Product::getPreparedProduct($arProduct); //подготовка результатов из БД
self::setProductInfo($arProduct); //получение данных для карточки из других сущностей
Product::unsetUnnecessaryFields($arProduct); //получение некэшируемых данных данных

return $arProduct;
}

...

}

Нужно сделать альтернативный вариант для четырех методов, которые вызываются в get, чтобы роут мог возвращать старую модель. Некоторые методы вызываются от модуля Product, следовательно там тоже нужно сделать изменения. В методе setProductInfo и unsetUnnecessaryFields можно получить данные из других сущностей, например таких как: Бренд, Аксессуары и т.д. Для них тоже нужно сделать альтернативную развилку, так как для старой модели могут понадобиться другие поля.
В итоге имеем контроллер ProductPage, модуль Product, которые используются в том числе и для получения карточки товара (хотя там есть и дополнительные функции). Так же есть классы сущности (бренды, аксессуары, магазины), которые так же используются для получения нужной информации для карточки товара. Мне нужно сделать так, чтобы роут возвращал и старую модель карточки товара.
Самый простой вариант - это развесить условия и создавать альтернативные методы добавляя слово old, к примеру getOldMainProduct. Так же предлагали наследоваться от ProductPage и Product и делать изменения в наследуемых классах. Но что делать с сущностями?
А может есть более грамотный вариант?
Спасибо.
Аноним 25/01/24 Чтв 02:58:42 #458 №3018134 
>>3018071
Какой же жуткий беспросветный говнокод.
Просто смотришь на эти комменты и охуеваешь. Слева написано одно - справа другое. В между собой так же общаетесь? - Удали ненужные данные. - Удаляешь кеш. - Малаца, я это и имел ввиду.

И это сладкое актив рекорд программирование. Через статику в базу и обратно - приключение на десять минут.

Начни с того что контроллер возвращает не МОДЕЛЬ, а ПРЕДСТАВЛЕНИЕ. Некоторую структуру данных, которая нужна клиенту, от которого пришел запрос. МОДЕЛЬ это модель бизнес процесса, она содержит только то что нужно чтобы этот бизнес процесс выполнить. В частности АКТИВ РЕКОРД МОДЕЛЬ моделирует процесс сохранения данных в хранилище, и соответственно содержит все данные, которые можно положить в хранилище. Иногда структура ПРЕДСТАВЛЕНИЯ совпадает с МОДЕЛЬЮ, а иногда структура МОДЕЛИ совпадает с АКТИВ РЕКОРД МОДЕЛЬЮ.

Такая банальная хуйня, а надо о ней напоминать. Потому что ваш код давно перерос этап когда что-то там совпадало. Поэтому нужно разделять набор данных для представления, набор данных для бизнес логики и способы получения этих данных. Способы получения офк будут разные для разных наборов. Напрмер для представления нужны аксессуары, а для бизнес логики нет. Структуры разные, методы разные. Зато для бизнес логики нужно получить бренд, а бренд вообще не в базе и не в актив рекорде.

Дальше нужно разобраться что куда относится. ПРЕДСТАВЛЕНИЕ это часть логики отображения, МОДЕЛЬ это бизнес логика, а АКТИВ РЕКОРД МОДЕЛЬ это хранилище. Так вот нет никакого резона пытаться получить и представление и модель через один и тот же метод. Это разные структуры и получаются они по разному.

Так вот ключевой вопрос: твой oldProduct он на каком из слоев отличается?
Он отображается по другому? Например нужно обязательно показать и старое и новое название.
Он получается другим способом? Например он получается из какой-то таблицы с историей изменений аля event sourcing.
Или он отличается тем что с ним можно или нельзя сделать? Например к старому товару нельзя добавлять аксессуары, а к новому можно.
Аноним 25/01/24 Чтв 12:34:32 #459 №3018492 
>>3014215
Книги вкатунам нахуй не нужны, это тяжелый способ получения информации, плюс их часто переводят люди далекие от программирования со всеми вытекающими. Лучше их читать когда уже шаришь
Аноним 25/01/24 Чтв 12:39:31 #460 №3018498 
>>3018492
В 12 лет читал книжку по микроэлектронике и справочник по матанализу. Сейчас зумеры не могут прочитать книжку "Делаем сайты на пхп и жиквери"?
Аноним 25/01/24 Чтв 13:01:51 #461 №3018524 
>>3018492
Откуда брать инфу тогда?
Аноним 25/01/24 Чтв 13:21:41 #462 №3018563 
>>3018524
Ты в 2000х годах застрял? Знания черпаешь только из книжек?
Аноним 25/01/24 Чтв 13:47:04 #463 №3018591 
Уэсака Сумирэ в русском книжном магазине.webm
>>3018563
Да, если книг читать не будешь - скоро грамоту забудешь
Аноним 25/01/24 Чтв 14:24:55 #464 №3018635 
Soerархитектура.png
>>3014006
Пикрил.
Начни обязательно с книги "Архитектура сложных веб-приложений" (ACWA book) Аделя Ф.
Аноним 25/01/24 Чтв 17:48:29 #465 №3019090 
>>3015999
номер на смс активате за пару рублей
Аноним 25/01/24 Чтв 20:06:34 #466 №3019315 
>>3014006
СИКП же. Буквально на пальцах объясняют как строить качественные и масштабируемые программы. Дальше по желанию можешь навернуть каких-нибудь новомодных книжек по архитектуре аля ddd, tdd и тд, но начинать надо с базы.
Аноним 25/01/24 Чтв 23:12:03 #467 №3019811 
Объясните мне нахуя нужно столько фреймворков(symphony, laravel; yii), если там везде все одинаковая шаблонная хуета?
Аноним 25/01/24 Чтв 23:32:25 #468 №3019876 
>>3019811
Объясните мне нахуя нужно столько сортов сыра(пармезан, рокфор; рикотта), если там везде все одинаковая молочная хуета?
Аноним 25/01/24 Чтв 23:37:43 #469 №3019890 
>>3019876
Хорошая аналогия, только вот у разных сыров разный вкус, а все пхп фреймворки одинаково ощущаются говном
Аноним 25/01/24 Чтв 23:43:29 #470 №3019901 
>>3019890
Хорошая аналогия, только вот у разных фреймворков разные задачи, а все сыры одинаково ощущаются говном
Аноним 25/01/24 Чтв 23:45:07 #471 №3019906 
>>3019901
Хуевый перефорс. Жаль что для пыхеров нет ирл фреймворка, чтобы постить и не обсираться при этом под себя
Аноним 25/01/24 Чтв 23:48:15 #472 №3019914 
>>3019906
Хуевый перефорс. Жаль что для сыроваров нет виртуальной сыроварни, чтобы тренироваться и их покупатели не обсирались при этом под себя
Аноним 26/01/24 Птн 00:51:45 #473 №3019962 
Screenshot22.png
JFYWs7xNERY.jpg
Генерация капчи
Аноним 26/01/24 Птн 05:09:47 #474 №3020028 
>>3019962
То есть ты на серьезном ебале ради пяти символов генерируешь строку из 70 * 3 символов.
В этой строке еще и всего максимум три уникальных символа на возможные пять позиций.
Еще и реджексы в цикле.
Один единственный реджекс скорее всего медленнее, чем все твое приложение. Ты их решил побольше хуйнуть, чтобы наверняка?

Единственное хорошее в этом коде это использование random_int, остальное можно спокойно нахуй выкидывать.
Аноним 26/01/24 Птн 10:16:48 #475 №3020162 
Стоит ли использовать NetBeans для программирования на РНР?
Аноним 26/01/24 Птн 10:18:34 #476 №3020164 
>>3020162
Да. Крутая штука, еще и бесплатно.
ищу компаньонов для pet проекта Аноним 26/01/24 Птн 11:36:29 #477 №3020287 
>>2975215 (OP)
Захотелось на досуге разработать анонимный чат-рулетку, наподобие ЧатВдвоём и Nekto.me, но с более годным функционалом. Пока что с нуля накидал прототип на голом PHP + Swoole (т.е. сам чат работает через websockets), связь двух случайных собеседников уже работает, сообщения туда-сюда ходят, есть уведомления о наборе текста. Нужно дальше пилить функционал и сделать какой-то приличный фронт/дизайн (тут я не силён). На GitHub обнаружил массу примеров кода уровня "клон Omegle", хотя там почти всё на JS или Python, но какие-то идеи можно заимствовать. Чат пока планируется только текстовый, никакого голоса и видео.
Если кому интересно поучаствовать ради практики, то оставляйте свои мыльца (мессенджеры не надо), сконтачимся.
Аноним 26/01/24 Птн 13:22:48 #478 №3020410 
че битрикс норм
Аноним 26/01/24 Птн 13:28:44 #479 №3020419 
>>3019962
а че за прегматч что ты ищешь этой регуляркой я не понял объясни
мимо вкатун
Аноним 26/01/24 Птн 14:02:27 #480 №3020463 
17062195064130.png
>>3020419
Ты из деревни? Капчу никогда не разгадывал?
Аноним 26/01/24 Птн 14:03:13 #481 №3020466 
>>3020463
нормально же спросил, покажи вывод твоего кода, что оно выводит.
Я просто не понимаю вот эту строчку с прегматч
Аноним 26/01/24 Птн 14:09:02 #482 №3020477 
>>3020466
Ты из деревни? На пик посмотри.
Аноним 26/01/24 Птн 14:32:15 #483 №3020502 
>>3020477
я вижу код, кинь пастебин кода я сам проверю
Аноним 26/01/24 Птн 14:35:14 #484 №3020509 
Screenshot 2024-01-26 143426.png
>>3020502
Слепошарый ты еблан. Так виднее?
Аноним 26/01/24 Птн 14:43:49 #485 №3020524 
>>3020509
скинь пастебин кода своего
Аноним 26/01/24 Птн 14:50:05 #486 №3020533 
Screenshot 2024-01-26 144833.png
>>3020524
Эх ты, деревня.
Аноним 26/01/24 Птн 15:47:47 #487 №3020631 
>>3020533
думаю ты не умеешь с людьми общаться
Аноним 26/01/24 Птн 16:07:15 #488 №3020668 
>>3020631
Последнее время тут развелось грубиянов, а раньше был вежливый тред
Аноним 26/01/24 Птн 16:16:52 #489 №3020674 
>>3020668
ты очень грубый
Аноним 26/01/24 Птн 16:20:14 #490 №3020677 
>>3020631
>>3020668
А хули с вами церемониться? Вы же даже какие-то минимальные усилия не хотите приложить.

Вам буквально впадлу ПАЛЬЦЕМ ПОШЕВЕЛИТЬ, чтобы кликнуть на картинку и прочитать что на ней написано. Или кликнуть на кнопку "по щучьему веленью яндекс дай мне код с картинки", которую вам абу к каждой пикче прилепил.

Нахуй вы такие нужны тут? Нахуя вам отвечать, если после ответа на вопрос "Как срать?" вам сразу нужен ответ на вопрос "Как вытирать жопу?". И вам совершенно поебать что ответы на эти вопросы знает каждый первоклассник и прописаны они везде и всюду по миллиону раз.
Аноним 26/01/24 Птн 16:22:37 #491 №3020683 
>>3020677
а нет, стоп.
это ты очень грубый
>>3020668
прости это не тебе было
Аноним 26/01/24 Птн 16:30:01 #492 №3020691 
>>3020683
А ты тупой >>3020419 , слепой >>3020502 , ленивый >>3020524 мелкобуквенный хуесос.

Чем ты заслужил уважительное отношение к себе? Ты настолько тупой, что тебе даже в голову не пришло что это не мой код.
Аноним 26/01/24 Птн 16:32:18 #493 №3020697 
17062195064130.png
>>3019962
>>3020028
>Один единственный реджекс скорее всего медленнее, чем все твое приложение.
PHP использует либу PCRE, она компилит регекс в конечный автомат, который потом быстро работает. Нормальная последовательность действий в интерпретаторах: интернинг строки, потом определение, что такой регекс уже скомпилен. Аналогично с prepared statements и SQL, кстати. Но, конечно, интерпретаторы далеко не всегда делают нормально. Ну и PHP должно в FPM вертеться, чтобы скомпиленный регексп мог долго сохраняться. Это, повторюсь, если PHP вообще так умеет. Другие языки умеют. Что регексп обязательно медленный, это совсем не факт.
Аноним 26/01/24 Птн 16:39:34 #494 №3020710 
>>3020697
Бла бла бла. Давай показывай быстрый реджекс. Желательно бенчмарк прямо с тем, который в посте.
Реджекс медленнее кода на нативном пхп. http://maettig.com/code/php/php-performance-benchmarks.php

И я еще раз повторю: все что ты напишешь, буквально весь код, который ты напишешь будет быстрее всего одного реджекса. Это не шутка. Медленне реджекса только запрос в базу. Но если это запрос в локальную базу вида "SELECT 1;", то по времени будет примерно одинаково.
Такие дела.
Аноним 26/01/24 Птн 17:12:52 #495 №3020784 
>>3020691
надеюсь ты так и будешь без работы сидеть дурачок
Аноним 26/01/24 Птн 17:18:29 #496 №3020796 
Без имени.png
>>3020710

https://ideone.com/R0cy9O
Аноним 26/01/24 Птн 19:37:33 #497 №3021068 
>>3020796
А ты это заебись придумал.
Первый цикл на миллион итераций, с реджексом по фиксипрованной строке. Который вычисляется всего один раз, в первую итерацию, лол. Остальной миллион гоняется порожняком.

А второй цикл на 16 миллионов итераций. Здесь результат вычисляется уже 16 раз. По разу на каждый элемент excludes. А потом 16кк раз гоняется порожняком. Прямо даже хуй знает почему во втором случае медленнее получилось.
Аноним 26/01/24 Птн 21:00:43 #498 №3021164 
>>3021068
Сорян, не понял сразу, что ты зеленый ребенок.
Аноним 26/01/24 Птн 23:23:46 #499 №3021345 
>>3020410
битрикс ето кал
Аноним 27/01/24 Суб 02:05:02 #500 №3021491 
>>3020502
Это отсюда https://github.com/mobicms/captcha/blob/main/src/Code.php
Аноним 27/01/24 Суб 02:14:13 #501 №3021495 
$markup = "<!DOCTYPE html><html><head></head><body><div>ЯЯЯЯ</div></body></html>";
$domDoc = new DOMDocument();
$domDoc->loadHTML($markup);
var_dump($domDoc->textContent);
// Вывод: говняк со сломанной кодировкой

У меня три стула:
1. Воспользоваться какой-то библиотекой с гитхаба вместо DOMDocument
2. Изменить $markup и добавить объявление кодировки. Это синтетический пример, ясное дело, но с реальной вёрсткой можно провернуть, например, такое: замена "</html>" на "<meta charset="utf-8"></html>"
3. Обернуть $domDoc->textContent в mb_convert_encoding($domDoc->textContent, "ISO-8859-1", "UTF-8")

И всё. И больше никак. Это не я что-то упускаю, это DOMDocument действительно не умеет нормально работать с utf-8. Правильно?
Аноним 27/01/24 Суб 03:01:30 #502 №3021502 
>>3021495
DOMDocument насколько помню, но могу и спиздеть, это биндинг к быстрой сишной либе libxml2. Альтернатив не так и много, но для них всех тебе уже виртуальный сервер будет нужен (VDS то есть). У либы на pure PHP хз что будет со скоростью. Парсер на скрипте может и тормозить. Так что я бы просто регулярками втыкал meta http-equiv content type.
Аноним 27/01/24 Суб 03:14:56 #503 №3021503 
>>3021502
>DOMDocument насколько помню, но могу и спиздеть, это биндинг к быстрой сишной либе libxml2
Судя по тому, что для того, чтобы он не жаловался на ошибки в вёрстке, нужно вызвать libxml_use_internal_errors(true) - звучит похоже на правду.
>Так что я бы просто регулярками втыкал meta http-equiv content type
Да, я так и сделаю, но было ощущение изначально, что это какой-то быдлокод и я что-то делаю не так. Однако, так и не смог нагуглить других решений. И что ещё больше запутывает - у конструктора DOMDocument есть аргумент encoding, но что он делает вообще хрен пойми. Указывай, не указывай - результат не меняется.
Аноним 27/01/24 Суб 03:21:27 #504 №3021504 
>>3021503
У него есть и version, и encoding. Похоже, это скорее всего то, что он тебе выдаст, если этот document сохранить как xml:
<?xml version="1.0" encoding="utf-8"?> - первой строчкой
Аноним 27/01/24 Суб 03:26:31 #505 №3021505 
изображение.png
>>3021504
Да вроде как-то нет.
Аноним 27/01/24 Суб 03:31:01 #506 №3021507 
>>3021505
Их затирает loadHTML. Если saveXML пустой документ или с добавленными вручную нодами, то там как раз будет.
Аноним 27/01/24 Суб 03:52:13 #507 №3021510 
Screenshot 2024-01-27 032211.png
16792914653930.jpg
>>3020796
>>3021491
БАТУМИБИЗ. Сериоус бизнес ебать.
Учитесь, реджексовые. https://3v4l.org/GYbWC

0. Сложность проверки O(1). Минимально возможная.
1. В ЧЕТЫРЕ раза быстрее.
2. Все символы случайные, а не три как у бузинесменов.
3. Производительность не зависит от сложности реджекса, длины повторяемой строки, размера словаря итд.
Аноним 27/01/24 Суб 04:29:12 #508 №3021516 
>>3021510

>В ЧЕТЫРЕ

Всего пару раз, кек.

https://ideone.com/oMmUt5

И это по сравнению с очень быстрым индексированием в хэше.
Аноним 27/01/24 Суб 04:35:34 #509 №3021518 
>>3021516
Лол, так там просто все комбинации двух символов в итоге кешируются. Сколько их всего? Две-три сотни? А остальные 100к раз оно никаких реджексов не выполняет.
Аноним 27/01/24 Суб 04:46:12 #510 №3021519 
>>3021518
Ничего нигде не кэшируется. С чего ты это взял вообще? PHP так не умеет. Ты запустишь в цикле миллион раз preg_match('/12345/', '123456') и это выполнится у тебя миллион раз.

Вставь вот в это место:
https://github.com/php/php-src/blob/master/ext/pcre/php_pcre.c#L1257
что-нибудь типа счетчика, пишущего в /tmp/regex_count.txt, и убедись сам. Кэшируется, лол.
Аноним 27/01/24 Суб 05:56:18 #511 №3021527 
>>3021519
Причем здесь то как устроены сами реджексы вообще?
Пхп кеширует РЕЗУЛЬТАТ выполнения функции. Потому что на самом деле этих результатов в примере не миллион, а всего пара сотен.

Ты вообще в курсе что пхп код компилируется в код виртуальной машины? Именно поэтому похуй в каких кавычках что написано и конструкция $string = "ааа" . 'fff' будет преобразована в одну инструкцию ASSIGN !0, 'aaafff'.

Вот тебе пример. https://ideone.com/OaeO1g
Мы сначала сгенерировали три массива со строками разной длины 2, 5 и 10 символов. А потом проходим по каждому из них и для каждой строки выполняем реджекс.

Вот тут-то все и видно. Проверка двух символов не стоит нихуя. А дальше вместо линейного роста пять символов стоят сразу дохуя, а десять как пять. Что еще смешнее, рандом может сгенериться так что десять будут стоить... ноль. Потому что проверка совпадет с предыдущей. В чем ты можешь убедиться поставив проверку long перед medium https://ideone.com/ZalEjM

Уот так уот. Пхп гораздо умнее ебланов, которые на нем пишут. И понимает что выполнять реджекс миллион раз - это тупость.
Разумеется кеш штука полезная, но не надежная. Поэтому самый правильный способ сразу писать нормальный код. Кеш и с нормальным кодом поможет, зато все внезапно не пойдет по пизде из-за неправильного порядка вызовов и неоптимально скомпиленных опкодов.
Аноним 27/01/24 Суб 06:00:56 #512 №3021529 
>>3021527
>Пхп кеширует РЕЗУЛЬТАТ выполнения функции.
НЕТ.
Аноним 27/01/24 Суб 06:06:21 #513 №3021530 
cryingwojakphotosv2custom.webp
>>3021529
>НЕТ
Аноним 27/01/24 Суб 06:10:11 #514 №3021535 
fuck.png
>>3021527
Мне не нужны эти танцы. Я уже сам на всякий случай модифицировал исходники PHP8.4 и собрал его из них. Я вижу свомим глазами, что PHP миллион раз ломится к функции сишной либы pcre2_match, когда я его прошу проверять одну и ту же строку одним и тем же регэкспом в цикле. Так что никакие результаты не кeшируются. Как ты вообще представляешь себе архитектуру такого кеша? Для него не существует подходящей архитектуры. Это должно быть что-то вроде кеша SQL для детерменистических функций, которому явно не место в скрипте.
Аноним 27/01/24 Суб 06:11:46 #515 №3021538 
>>3021530
Боевая картиночка.
Аноним 27/01/24 Суб 06:12:55 #516 №3021539 
>>3021529
>>3021530
Для добивающего осталось выяснить, что когда ты присваиваешь значение строки в другую переменную, до тех пор пока одна из переменных не поменяется значение будет общим.

А когда ты удаляешь значение из массива место на самом деле не освобождается.

НЕЕЕТ....
Аноним 27/01/24 Суб 06:15:23 #517 №3021540 
>>3021535
Какие танцы, дебич? Я ебу как ты там че скомпилил? Может у тебя опкеш вообще не включен.
Ты высрал пример на конкретной конфигурации пхп и железа. Я показал тебе почему он быстрый и как эта быстрота может как улетучиться, так и стать вообще мгновенной.
Аноним 27/01/24 Суб 06:26:26 #518 №3021542 
>>3021540
Лол, ты как себе вообще представляешь кэширование результатов функций? Для этого нужна хэш-таблица (аргументы) => (результат) с вытеснением более старых результатов, а никакой не опкеш.
Аноним 27/01/24 Суб 06:32:02 #519 №3021544 
>>3021535
>>3021542
Даже хуй знает что это за кеш такой.
Может вот такой? https://en.wikipedia.org/wiki/CPU_cache#Cache_hierarchy_in_a_modern_processor
Аноним 27/01/24 Суб 06:50:25 #520 №3021551 
AAAAAAAaaaaaaa.png
>>3021544
>кеш процессора
Ну это уж совсем из другой оперы.

А если все миллион строк разные, то они тоже кэшируются?

https://ideone.com/AI6f92

Ну и как тебе еще доказывать, что результаты функций не кешируются? Разве что физически.
Аноним 27/01/24 Суб 07:02:00 #521 №3021554 
>>3021551
Ок. Ниче не кешируется нигде.
Тут тогда что происходит? https://ideone.com/OaeO1g
А тут? https://ideone.com/ZalEjM

Строки полностью рандомные, не одна буковка. Целиком.

Давай перди че-то про танцы какие-то. И компиль хуй к носу.
Аноним 27/01/24 Суб 14:11:49 #522 №3021864 
>>3021554
>что происходит?
Фигурные скобки проебаны.
Аноним 27/01/24 Суб 15:24:56 #523 №3021970 
>>3021864
Это просто альтернативный синтаксис. Хуй знает почему в изначальном примере так было написано. Нихуя не меняется от скобок https://ideone.com/uLVwmr
Аноним 27/01/24 Суб 15:51:59 #524 №3021997 
>>3021970
Так у тебя самого два цикла с более длинными строками, которые не могут участвовать в каком-либо кэшировании, поскольку они все разные, выполняются каждый процентов на 30 даже быстрее, чем цикл с короткими строками, среди которых много повторяющихся. Это буквально доказательство, что ничего не кэшируется. Ты все-таки троллишь, тварь.
Аноним 27/01/24 Суб 17:02:11 #525 №3022090 
>>3021997
>два цикла с более длинными строками выполняются каждый процентов на 30 даже быстрее, чем цикл с короткими строками
Стекломойный еблан, где ты это увидел?
>short : 0.00015
>medium: 9.89437
>long : 9.70363
Залупа ты понурая, о том и речь была что в списке коротких строк 90% повторений, которые отлично кешируются. А время для списка со средней длиной и длинной и есть настоящие затраты на все эти реджексы. Там уже похуй какая длина, хоть двадцать. Главный скачек затрат происходит в тот момент когда кеш перестает срабатывать.
Аноним 27/01/24 Суб 17:48:18 #526 №3022168 
Снимок.JPG
Почему он мне все желтым выделяет? Как это оффнуть?
Аноним 27/01/24 Суб 18:08:17 #527 №3022203 
>>3022168
Двойную кавычку не закрыл в строке $sql.
Аноним 27/01/24 Суб 18:43:33 #528 №3022256 
>>3022090
E-5 это десятка в минус -5 степени, чучело ебаное.
Аноним 27/01/24 Суб 18:53:02 #529 №3022273 
слепошарый-уебан.png
>>3022090
Аноним 27/01/24 Суб 20:31:08 #530 №3022413 
image (1).png
Screenshot.png
Почему шторм любой инклюд подсвечивает красным светом и предлагает сделать глобальную переменную?
Аноним 27/01/24 Суб 20:45:18 #531 №3022444 
>>3022413
Шторм думает, что ты пишешь приложение под FPM/FastCGI со стройной декомпозицией всего в полтысячи классов, зашиванием всего в контексты, автоинклюдом на основе имен классов. Сделай один глобал, с тебя не убудет.
Аноним 28/01/24 Вск 00:33:54 #532 №3022890 
>>3021507
И правда. Значит, можно оформить спокуху и без задней мысли редактировать разбираемый html-код, добавляя в него объявление кодировки.
Аноним 28/01/24 Вск 01:21:04 #533 №3022933 
А как красиво вывести данные из mysql ? Хочу с бутстрапом сделать аккуратные куски текста, в гугле нашел только инфу в виде вывода таблицы с костыльными "echo <tr>".
Аноним 28/01/24 Вск 01:21:21 #534 №3022934 
041633.jpg
А знаете, довольно быстрый этот ваш PHP. Почему-то всегда раньше считал что тормознутый, и люди жаловались
Аноним 28/01/24 Вск 09:27:25 #535 №3023039 
>>3022934
Сейчас РНР сопоставим по скорости с джавой
Аноним 28/01/24 Вск 14:03:24 #536 №3023398 
Вы чё, пидорасы, охуели? Я-то думал, сейчас прочитаю ваш срач и как пойму, насколько регулярки медленные или нет, насколько стоит избегать их использования. Ага, лол.
ньюфаг
Аноним 28/01/24 Вск 14:04:59 #537 №3023401 
>>3022934
наверно с битриксойдами нас путал
Аноним 28/01/24 Вск 14:07:09 #538 №3023408 
>>3023401
Может, он олдфаг. Вроде, в PHP5 что-то принципиально изменилось, а потом ещё в PHP7 совсем хорошо стало.
Аноним 28/01/24 Вск 14:33:21 #539 №3023453 
>>3023398
Хз этот мужичок вроде опытный пизда, мб он и проебался с мантиссой но функции реально кешировать должно
Аноним 28/01/24 Вск 15:31:31 #540 №3023562 
>>3022934
С версии 7 стал конечно намного быстрее, но когда некоторые пытаются зеркалить сишный код на PHP, получается все еще намного хуже, чем, например, с жопаскриптом. В принцепе, если у тебя узкое место типа исказить картинку капчи, и инфраструктура позволяет, то просто делаешь модуль для пыха на сях. Но это уже переезд с виртуального LAMP хостинга на VDS, где тебе самому надо админить.

>>3022890
XML/HTML сами по себе довольно неоднозначные вещи, наловившие в свое время много критики. Так что meta можно добавлять смело, это не говнокод, а просто тебе не оставили выбора.

>>3023398
Первый раз регулярка выполняется долго, потому что она компилируется. Дальше она выполняется очень быстро.

>>3023453
>функции реально кешировать должно
Вот откуда вы это берете, блять? Ну хоть ссылку дайте, где написано, что пых кэширует так, как вы пишете?
Аноним 28/01/24 Вск 16:07:31 #541 №3023648 
Считается ли нормальной практикой не использовать формы в Симфони, а самому ручками всё обрабатывать как на голом РНР? Дело в том, что мне они совсем не нравятся.
Аноним 28/01/24 Вск 20:02:36 #542 №3024164 
Screenshot 2024-01-28 195652.png
Screenshot 2024-01-28 195748.png
>>3023562
>Вот откуда вы это берете, блять?
Ну как минимум пых делает так как на пиках. Второй вызов strlen компилируется сразу в результат, функция не вызывается. Вот и думай.
Аноним 28/01/24 Вск 20:50:46 #543 №3024274 
>>3024164
Получается можно и двойные кавычки писать и ничего не замедлится?
Аноним 28/01/24 Вск 20:55:51 #544 №3024281 
123.JPG
FireShot Capture 022 - - localhost.png
В чем ошибка?
Аноним 28/01/24 Вск 21:11:20 #545 №3024319 
>>3024281
https://www.php.net/manual/en/mysqli.query.php
Аноним 28/01/24 Вск 22:06:30 #546 №3024396 
>>3024274
Проблема двойных кавычек не в скорости. А в непредсказуемости интерполяции. Использовать их нельзя по той же причине почему нельзя использовать нестрогое сравнение. Пхп пытается сделать с переменными какие-то ебанутые неочевидные преобразования, которые нам нахуй не нужны. Малейшая опечатка и произойдет хуй знает что. А найти такую багу можно только с дебаггером, буквально по строчкам перебрав весь код.

Вот "простенький" пример https://3v4l.org/QBVVf
Что выведется в каждом из вариантов? Да хуй его знает, то значение переменной, то какая-то функция вообще. А как читать это дерьмо? Хуйня полная.

Поэтому либо конкатенация, либо sprintf. Двойные кавычки только если нужно вывести спецсимвол типа "\n" переноса строки.
Аноним 28/01/24 Вск 22:31:36 #547 №3024437 
Анон, может кто помочь удалить ненужные блоки из пхп страницы? Реально пробовал, но у меня потом страница не грузит. Подарю паскод, кто поможет

@nekto442
Аноним 28/01/24 Вск 22:35:14 #548 №3024444 
>>3024437
Сюда кидай, поможем.
Аноним 29/01/24 Пнд 02:42:08 #549 №3024640 
1706485327118.jpg
1706485327123.jpg
>>3024444
Вот пример страницы https://demo.gempixel.com/short/
Вот сама страница https://www.mediafire.com/file/thk6nsif3gfig7l/index.php/file

Меня все устраивает: двигающийся фон и тп, кроме ненужных кучи блоков.
Мне нужно оставить по сути только блок вставки ссылки и блок админ панели
Аноним 29/01/24 Пнд 04:29:08 #550 №3024661 
>>3024640
Когда откроешь страницу в браузере, нажимай Ctrl + Shift + i
Поклацай там табы, и найди HTML код страницы. Удаляй маленький кусочек, и смотри что получилось. Визуально.
Затем удаляй тот же маленький кусочек в PHP коде, и обновляй страницу с помощью F5.

Натренируй в процессе терпение.
Аноним 29/01/24 Пнд 09:51:23 #551 №3024803 
Как освоить фреймворк? Если обычный РНР просто дополняется новыми конструкциями, которые можно легко внедрить в свой код, то с фреймворком так не получается. Каждый компонент фреймворка тянет за собой другой. Хочешь попробовать шаблонизатор - нужно написать контроллер. Пишешь контроллер - надо разобраться в маршрутизации. Хочешь сделать простую формочку - надо закопаться в модели, ОРМ, валидацию и ещё черт знает что. Любая тема выливается в десяток смежных тем и не получается разом понять такой объём знаний, а поделить на части не получается.
Аноним 29/01/24 Пнд 10:45:30 #552 №3024868 
Screenshot 2024-01-29 104243.png
>>3024661
В микрософтовском уебищном edge есть пикрелейтед фича: 3d просмотр. Так гораздо удобнее элементы убирать.
Аноним 29/01/24 Пнд 11:01:21 #553 №3024887 
>>3024803
Никак.
Та же история что с шариком для гольфа. Чтобы долететь до цели, после удара шарику нужно сначала пролететь половину, а чтобы пролететь половину нужно пролететь одну четверть. А раз таких половин бесконечное количество, то шарик никогда до цели не долетит.

А ты никогда не освоишь ни один фреймворк, потому что ты еблан.
Аноним 29/01/24 Пнд 11:06:02 #554 №3024891 
>>3024164
поясни вкатуну, почему "0004 RETURN int(1)"? это стандартный код, который возвращается дефолтом типа?
Аноним 29/01/24 Пнд 11:36:54 #555 №3024943 
>>3024891
Это нужно чтобы сказать виртуальной машине "стопе". Там цикл бесконечный, пока исполняемый код единицу не вернет выполнение не закончится.
Аноним 29/01/24 Пнд 11:38:31 #556 №3024946 
>>3024887
Вкатун, спок. Тебя никто не спрашивал
Аноним 29/01/24 Пнд 13:46:14 #557 №3025112 
>>2995686

Она про sanctum.

> код выглядит как js

Это и есть JS.

> где это писать и что должно происходить на конце /sanctum/csrf-cookie ? Или там происходит что-то автоматическое?

Этот роут на сервере обрабатывает sanctum, как я понял, и на сервере делать ничего не надо.
Аноним 29/01/24 Пнд 13:52:59 #558 №3025125 
>>2998602

> проверяет, что апостроф один.

Не совсем верно. {0,} значит "0 или более символов". Если ты хотел написать "0 или 1 апостроф", то нужно писать '?. Также, апостроф может быть написан еще символом ` (косая кавычка).

Для проверки правильности использования апострофа можно сделать такую регулярку:

в строке любое чилсло символов без апострофов ИЛИ строка это буква, за ней апостроф, и дальше 1 или более символов не-апострофов.
Аноним 29/01/24 Пнд 13:54:16 #559 №3025129 
17028272171020.jpg
>>3024887
ТА САМАЯ НИКОМУ НЕИЗВЕСТНАЯ ИСТОРИЯ ПРО ШАРИК!!!!!!!!! СМОТРИТЕ ОН ЛЕТИТ БЕСКОНЕЧНО ОДНА ЗОЛОТУШНАЯ, ОДНА ПОЛТУШНАЯ, ОДНА СЕРЕБРЯЧКОВАЯ
Аноним 29/01/24 Пнд 13:55:38 #560 №3025130 
>>2998604

Тут вроде верно.

>>2998618

> Кто всерьез (за деньги) ... занимался, то давно понял, что емейл это строчка с собакой (@) и максимальной длинной

Нет. Люди часто делают тупые ошибки, например, ставят пробел после @ или вместо точки, или пишут mailru слитно. И кто за деньги этим занимается, анализирует типичные ошибки и пишет костыли для их исправления.
Аноним 29/01/24 Пнд 13:56:42 #561 №3025132 
>>2998645

Есть сайты типа: leetcode, codeforces, там куча задач на разные темы. Если непонятно, как их решать, то гугли книги или статьи по теме "структуры данных" и "решение олимпиадных задач".
Аноним 29/01/24 Пнд 13:58:50 #562 №3025139 
>>3025132
А пхпшников часто валят на собесах литкод задачками?
Аноним 29/01/24 Пнд 13:59:06 #563 №3025140 
>>2998667

> Вместо метода "залогинить" будут строки: вызов функции, которая генерирует токен, установление куки самим контроллером.

Лучше бы сделать именно функцию. А то вдруг надо будет где-то еще залогинить пользователя и придется копировать код. Или ты протестировать авторизацию захочешь, а как это делать, если ее код не вынесем в функцию, а размазан где-то в других функциях.

> Мб сделать метод в TDG, чтобы он принимал токен и возвращал объект студента?

Можно.
Аноним 29/01/24 Пнд 14:00:16 #564 №3025145 
>>2998837

Опиши пример задачи, которая решается парой строчек на PHP и HTML, и посмотрим. Если бы все было так просто, то фреймворки были бы не нужны.
Аноним 29/01/24 Пнд 14:01:34 #565 №3025148 
>>2998837

> Например, его "замечательный" дизайн так и не смог увидеть, потому что фронт-говно не завелось, а вывалилось с ошибкой.

Дай ссылку на инструкцию, по которой ты все устанавливал. И дай текст или скриншот ошибки. И посмотрим, это инструкция неправильная, или ты невнимательно читаешь.
Аноним 29/01/24 Пнд 14:05:46 #566 №3025164 
>>2999237

> Автор сам не повторял свой гайд. У него куча несостыковок. Например, создали модель, описали как он сказал. А в итоге через пару глав оказывается, что модель уже другая. Конкретно некоторые поля внезапно стали допускать NULL.

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

> Мне вот интересно, действительно в реальных коммерческих проектах тянут эти бандлы?

Реальный прибыльный коммерческий проект, в composer.json порядка 40-50 библиотек и компонентов Симфони.

Зачем писать то, что уже написано?

Вот еще пример: Magento, CMS для магазинов, смотри сам, сколько там зависимостей в composer.json: https://github.com/magento/magento2/blob/2.4-develop/composer.json
Аноним 29/01/24 Пнд 14:08:00 #567 №3025172 
>>3025148
>>3025164
Пчел. Он буквально читал жопой. Не будет он тебе никаких пруфов приносить.
>>2999289
Аноним 29/01/24 Пнд 14:09:23 #568 №3025176 
>>3003435

Тебе надо исправить конфигурацию сервера, чтобы запросы к статическим файлам (вида /static/css/xyz.css) не перенаправлялись на index.php, а просто отдавался файл.

Чтобы это сделать, тебе надо изучить, как настраивается используемый тобой веб-сервер.
Аноним 29/01/24 Пнд 14:10:25 #569 №3025177 
>>3004471

Это плохая идея. Вместо этого, куку должен обрабатывать контроллер и передавать в шаблон переменную вроде display_some_text.
Аноним 29/01/24 Пнд 14:11:52 #570 №3025183 
>>3004496

Да, так и надо делать. Потому, что обработка кук должна быть в котроллере, а не в шаблоне. К тому же, твой код трудно будет адаптировать, если завтра понадобится не только проверять куку, но и содержимое БД например.
Аноним 29/01/24 Пнд 14:16:22 #571 №3025194 
>>3004771

> Никакие переменные в ViewModel не группируют. Это данные МОДЕЛИ преобразованные чтобы их было удобно отображать. И используют ViewModel именно когда данные внутри модели бизнеса не подходят для отображения.

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

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

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

Это упрощает, например, тестирование: мы можем тестировать ту функция в изоляции.
Аноним 29/01/24 Пнд 14:18:04 #572 №3025196 
>>3005015

В Ларавель "источником истнины" считается структура БД. Модель определяет список полей из БД, и нет нужды их повторно описывать в коде.

Бывает и другой подход. В Доктрине "источником истины" может быть класс модели, а миграции генерируютя на основе кода.
Аноним 29/01/24 Пнд 14:18:08 #573 №3025197 
var_dump(3 < "dddd");
bool(true)

Почему так, нахуй? Я понимаю, что за такое нужно бить в ебало, но тем не менее. Попробовал узнать у гопоты, он на этом вопросе сломался. Сначала утверждал, что строки, которые невозможно привести к числу, приводятся к 0.
То есть, 3<0, что должно вернуть false. Я его спросил, как так?
Он извинился и ответил, что начиная с PHP7, строки, которые невозможно привести к числу, приводятся к некому условному значению, которое меньше любого числа.
То есть, 3<(условное-значение-которое-меньше-любого-числа), что опять же абсурдно и должно вернуть false.
Но возвращает true. Почему так, нахуй?
Я видел, что в доке написано:
> Результат сравнения несравнимых значений не определён и на него не нужно полагаться.
Но, блжард, я ведь не могу написать что-то типа if (3 << "dddd") {}, которое пошлёт меня нахуй при попытке сравнить число со строкой, которую не привести к числу.
Значит, мне нужно напердолить функцию-обертку, которая, например, будет требовать двух int, а если хочешь float или bool, то делай if (kostil(intval(true), intval(5.5), ">")) {}
Так что ли?
Аноним 29/01/24 Пнд 14:27:12 #574 №3025206 
>>3025139

Если ты считаешь, что на собеседованиях дают алгоритмические задачи, то эти сайты помогут научиться их решать. Если считаешь, что не дают, то можешь не читать.
Аноним 29/01/24 Пнд 14:31:55 #575 №3025213 
>>3024803

> Как освоить фреймворк?

Прочитать документацию, сделать проект.

По моим ощущениям, сложности у начинающих с фреймворком обычно получаются из-за того, что они не изучили более базовые вещи, например: ООП, атрибуты, DI, MVC, ORM, а сразу взялись за фреймворки.

> Каждый компонент фреймворка тянет за собой другой.

Да, Laravel надо изучать целиком. А вот Симфони компонентный: ты можешь взять только компонент форм, или только Доктрину и использовать их без остальных компонентов.

> Хочешь сделать простую формочку - надо закопаться в модели, ОРМ, валидацию и ещё черт знает что.

Ну вот похоже, что твоя проблема в том, что ты не знаешь, что такое ORM и не привык использовать ООП. А не в фреймворке.
Аноним 29/01/24 Пнд 14:34:27 #576 №3025216 
Screenshot 2024-01-29 143207.png
>>3025197
Малой, это пхп. Тут кал. https://wiki.php.net/rfc/string_to_number_comparison
Аноним 29/01/24 Пнд 14:42:05 #577 №3025235 
>>3025197

В мануале это описано тут: https://www.php.net/manual/en/language.operators.comparison.php таблица "Comparison with Various Types".

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

Но похоже, в твоем случае, 3 преобразуется в строку "3" и сравнивается как строка с "dddd" (по алфавиту). То есть, в мануале то ли устаревшая информация, то ли неточная.

> Результат сравнения несравнимых значений не определён

Это значит, что одна версия PHP может вернуть один результат, а другая другой и твой код сломается при обновлении PHP.

> Значит, мне нужно напердолить функцию-обертку

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

Для поиска таких проблем в коде можно использовать статические анализаторы вроде phpstan, psalm.
Аноним 29/01/24 Пнд 15:21:12 #578 №3025305 
>>3025213
>ООП, атрибуты, DI, MVC, ORM
Я изучил ООП, атрибуты, MVC. Написал блог на ООП по MVC. Что такое атрибуты знаю, но не использовал.
DI, ORM ведь часть фреймворка. Как их заранее изучить?
Аноним 29/01/24 Пнд 15:59:27 #579 №3025386 
ООПзависимые, а если я всё-таки хочу какой-то класс использовать процедурно, и чтобы он не имел возможности реализоваться? Типа Utils::timestampUs(). Как это правильнее сделать?
1. abstract class Utils {}
2. class Utils { private function __construct () {} }
Я обычно делал 1, но тут услышал мнение, что семантически abstract следует читать как "этот класс 100% должен быть унаследован и расширен, сам по себе не может быть реализован", а не просто "этот класс не может быть реализован". И, следовательно, семантически правильнее второе.
inb4 правильнее обоссать тебя, пиши ООП и не выёбывайся, дали тебе DI - вот и не пизди. Ага, понятно, но отвечая на мой вопрос?
Аноним 29/01/24 Пнд 16:05:33 #580 №3025397 
>>3025386
Если ты написал class, то уже перманентно зашкварился об ооп. Ты теперь навсегда объектно сориентированный попуск, смирись.
Аноним 29/01/24 Пнд 16:23:04 #581 №3025435 
>>3024319
Так у меня все правильно по документации
Аноним 29/01/24 Пнд 16:52:49 #582 №3025499 
16880663524750.jpg
Screenshot 2024-01-29 164712.png
Screenshot 2024-01-29 164840.png
Screenshot 2024-01-29 164815.png
>>3025435
>у меня все правильно
Аноним 29/01/24 Пнд 16:54:56 #583 №3025503 
>>3025435
Вообще мож у тебя дальтонизм? Или ты думаешь что ide тебе красным хуярит чисто по приколу?
Аноним 29/01/24 Пнд 17:50:48 #584 №3025598 
изображение.png
>>3024281
Перестань относиться к ошибкам как к ОЙ НИПАНЯТНА ВСЁ СЛОМАЛОСЬ. Относись к ним, как к подсказкам, которые говорят, что ты делаешь не так. В твоём случае это очень явно видно, никакой магии не происходит.
Аноним 29/01/24 Пнд 17:56:40 #585 №3025611 
>>3025206
Я тот кто задал вопрос. Не спросили кст
Аноним 29/01/24 Пнд 18:06:28 #586 №3025623 
IMG20240129190551.jpg
IMG20240129190526.jpg
>>3025197
Аноним 29/01/24 Пнд 18:29:06 #587 №3025645 
FireShot Capture 023 - - localhost.png
1222.JPG
>>3025499
Ну сделал стринг, та же ошибка
Аноним 29/01/24 Пнд 19:49:48 #588 №3025780 
Снимок.JPG
>>3025645
Всё, сделал. Так и думал что в result гавно какое-то
Аноним 29/01/24 Пнд 19:59:36 #589 №3025791 
Внимательней в следующий раз. Если подобные простые вещи, ищи отрывки чужого кода в гайдах или где ещё угодно
Аноним 29/01/24 Пнд 20:45:57 #590 №3025879 
>>3025183
Окей! Спасибо за ответы.
Аноним 29/01/24 Пнд 20:46:49 #591 №3025881 
17064645521251.png
>>3025780
> так и думал
> on line 11

Но как, шерлок?
Аноним 29/01/24 Пнд 22:58:31 #592 №3026034 
>>3025780
И это ты еще на фреймворки не перешел...
Аноним 30/01/24 Втр 01:13:48 #593 №3026124 
>>3024661
Так и делал и страница белая становилась
Я бы лучше паскод подарил за помощь. У меня как раз лишний есть
Аноним 30/01/24 Втр 08:14:52 #594 №3026212 
1706591686063.png
1706591686077.jpeg
>>3025780
Текст ошибки можно закидывать в гуглтранслит и чатгопоту, кстати.
Аноним 30/01/24 Втр 08:47:32 #595 №3026232 
Screenshot 2024-01-30 084652.png
>>3025780
Необучаемый ебанат.
Аноним 30/01/24 Втр 08:55:52 #596 №3026243 
>>3026232
Лучше бы порадовался за человека что он смог решить проблему
Аноним 30/01/24 Втр 09:11:50 #597 №3026256 
>>3026243
>смог решить проблему
>не смог прочитать одну строчку в документации
>не смог прочитать текст ошибки
>несколько раз еблом тыкнули куда надо
>смог решить
>иде с самого начала и до сих пор подсвечивает косячный код

Радость у меня только от того что такие уебни никуда никогда не вкатятся. Таких дегенератов даже на кассу в пятерочке не поставят.
Аноним 30/01/24 Втр 11:08:47 #598 №3026364 
Область видимости свойства/метода, это вещь не настолько же серьёзная, как, например, указание типа свойства. Если свойство объявлено как int, хоть усрись, значение "foo" ты ему не присвоишь.
Если свойство объявлено как private, его фактически можно прочитать с помощью var_dump как минимум. Более того - можно изменить его значение извне с помощью ReflectionProperty.
Итого, область видимости - это что-то типа DocBlock. Подсказка для разработчика, которая говорит, как, по идее, всё должно быть. Но если захочется выстрелить в ногу (изменить значение private свойства извне) - технически это сделать можно. И, например, не стоит рассчитывать, что если ты объявил свойство private и не добавил к нему публичные геттер и сеттер, то его действительно нельзя будет получить и модифицировать извне. Если захочется - можно.
Правильно понял?
Аноним 30/01/24 Втр 13:05:14 #599 №3026533 
>>3026232
Это дефолтная псевдо ошибка при подключении include если переменная не глобальная
Аноним 30/01/24 Втр 13:43:31 #600 №3026587 
Screenshot 2024-01-30 133419.png
>>3026533
>Это дефолтная псевдо ошибка при подключении include если переменная не глобальная
Не бывает никаких "дефолтных" ошибок. Если шторм что-то подчеркнул тебе красным ты 100% делаешь какую-то хуйню. У тебя даже желтых подчеркиваний никаких в коде быть не должно.

Никто не объявляет переменные по разным файлам. Создается метод getConnection(), который и возвращает соединение. Никто блядь не бегает и не ищет где и нахуя эта переменная была объявлена.
Аноним 30/01/24 Втр 22:58:24 #601 №3027427 
>>3025386
Кто тебе мешает заполнить класс только статическими методами? Фактически у тебя получится библиотека функций.
Аноним 31/01/24 Срд 02:51:16 #602 №3027621 
Как же я жалею, что начал пользоваться стрелочными функциями.
Постоянно какие-то сюрпризы из-за их особенности запоминать окружение.
Аноним 31/01/24 Срд 03:03:30 #603 №3027627 
>>3027621
Все, нашел причину.
Минус 2,5 часа.
Ни о чем не жалею, сам виноват, что проморгал этот момент.
Аноним 31/01/24 Срд 03:56:29 #604 №3027656 
>>3026256
Да убивать таких надо в зародыше. И вообще, никто не вправе писать на божественном PHP, не доказав свою глубокую одаренность, граничащую с гениальностью.
Аноним 31/01/24 Срд 09:22:31 #605 №3027767 
Screenshot 2024-01-31 092030.png
>>3027621
Интересно и почему же эти функции называют "замыканиями". Наверное какое-то совпадение.
Аноним 31/01/24 Срд 09:34:26 #606 №3027778 
>>3027656
Не передергивай, чтобы вкатиться в каловый донный язык для конченных дебилов, нужно как минимум уметь ЧИТАТЬ.

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

Коль такие проблемы - оформляй инвалидность, пенсию по шизе и не еби голову здоровым людям.
Аноним 31/01/24 Срд 12:37:24 #607 №3028002 
>>3027778
Да не визжи ты. Вся документация это буквально урезанный справочник где ничего толком не написано, с ребусами (string $govno int $a : bool false| ERROR). А ошибки это написанное машинным текстом сообщение, которое зачастую к реальной ошибке не имеет отношения. Пхпшторм вообще всегда подсвечивает любую рандомную хуйню, даже хэллоу ворлд нельзя написать без его подсветки.
Аноним 31/01/24 Срд 13:51:09 #608 №3028066 
Screenshot 2024-01-31 134332.png
>>3028002
>Вся документация это буквально урезанный справочник где ничего толком не написано
Дегенерат, с магическим мышлением. В документации к каждой функции КАЖДЫЙ сука параметр детально расписан. Каждый вариант ошибки. Еще и блядь примеры использования в нескольких вариантах.

>с ребусами (string $govno int $a : bool false| ERROR)
>литературно называет ребусом пример кода
Я и говорю, что таким дебилам надо не код писать, а в больничку - глицин пить. Какой тут нахуй пхп вообще. Надо слабоумие лечить.

>подсвечивает любую рандомную хуйню
Рандомную хуйню генерирует твой больной мозг. А шторм просто подсказывает как этот высер превратить в нормальный код.
Аноним 31/01/24 Срд 14:33:58 #609 №3028122 
>>2988733

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

В глубину документации и потроха исходников уже по необходимости, когда задача того потребует.
Аноним 31/01/24 Срд 14:42:21 #610 №3028140 
>>2991390

Пришёл джуном на проект на симфони, барахтался в доке, исходниках и ебал мозги лиду.

Сейчас есть классный раздел в доке симфони, который бы очень облегчила мне тогда жизнь.

Попробуй https://symfony.com/doc/current/create_framework/index.html
Аноним 31/01/24 Срд 15:04:39 #611 №3028182 
>>3001768

Если есть силы и кураж, то альтернатива — WSL.
Спизди phpstorm, он в это умеет.

На многих продакшенах пых живёт в линупсе, мне понимание среды выполнения всегда очень помогало.

Потом потихоньку и базовые знания по докерам можно освоить. Сейчас они везде и понимать их на начальном уровне порой обязательно, чтобы решать задачи.
Аноним 31/01/24 Срд 15:11:18 #612 №3028187 
>>3003398
Так она для вкатунчиков, совсем простая.
Скорее маркетинг, чем обучающий материал, но для новичков таки полезный.
Если хочешь гоу дипер читай доку, она шикарна.
Когда становится тесно в доке — читай исходники, они тоже ничего.
Аноним 31/01/24 Срд 15:49:10 #613 №3028259 
Подскажите как находить полезные, часто используемые функции, например для работы с массивами. Единственный вариант лазить по доке заходя в каждую функцию?
Аноним 31/01/24 Срд 15:54:09 #614 №3028275 
>>3028259
Есть способ сразу знать что функция которая тебе нужна уже встроена в пхп.
Аноним 31/01/24 Срд 16:49:44 #615 №3028409 
>>3028259
спроси у чата ЖПТ, если лень по документации лазить. Вопросы такого уровня нейронка решает более-менее норм
Аноним 31/01/24 Срд 19:35:41 #616 №3028626 
>>3028409
Как на это отреагирует коллектив? Такое принято или примут за дауна?
Аноним 31/01/24 Срд 20:19:36 #617 №3028738 
>>3028626
Ну ты же им не скажешь, правда? А потом когда выяснится что то тебе в очередной подсказали это машинный бред, полезут проверять и выяснят что 90% того что ты делал это шизофазия чат бота, который нихуя не предназначен для программирования.

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

Нейрохуйня ведь умеет писать не "правильный" код, а максимально "похожий на правильный". Она блядь "правильность" определять не умеет.
Аноним 31/01/24 Срд 21:50:40 #618 №3028898 
>>3027427
Так а на мой вопрос это как отвечает? Есть класс, который состоит только из статических методов. Логично, что реализовывать этот класс нет смысла. Конечно, если где-то случайно он будет реализован, это не приведёт к ошибкам, но для наглядности было бы неплохо отметить, что весь класс по сути статичный. Раньше я делал класс abstract, но услышал мнение, что это пидорская тема. Семантически, мол, это модификатор из мира ООП, который подразумевает, что абстрактный класс будет унаследован и расширен.
Аноним 31/01/24 Срд 22:38:21 #619 №3028939 
17064140158300.mp4
>>3028898
>Есть класс, который состоит только из статических методов
>Раньше я делал класс abstract
>это модификатор из мира ООП
А "класс" это не модификатор "из мира ООП"?
Аноним 31/01/24 Срд 22:44:37 #620 №3028948 
>>3028738
Да не, тут речь была про поиск функций для конкретного действия, задачки. О гении великого заменителя программистов я наслышан
Аноним 31/01/24 Срд 22:59:09 #621 №3028965 
>>3028948
>поиск функций для конкретного действия
Просто набрать в гугле "как срать?" уже не вариант?

Походу все кто мог выдачу гугла с первой страницы осилить в какие-то другие языки вкатываются.
Аноним 31/01/24 Срд 23:15:27 #622 №3028982 
>>3028965
Проблема в том, что неизвестно есть ли вообще этот метод. 3 раза переформулировал запрос, получилось найти искомый метод только практически скопировав его описание. "Получить проиндексированные значения массива по ключу php"
Аноним 31/01/24 Срд 23:24:39 #623 №3029004 
>>3028982
>проиндексированные значения массива по ключу
Еще бы оно нашло. Что это блядь вообще означает? Ключи это и есть "индекс". Как блядь в массиве может быть значения без ключа? И как по одному ключу можно получить несколько значений если ключ уникальный?

Ну а то что ты гугл посиком пользоваться не умеешь даже не удивляет. Сначала задается контекст, потом вопрос: "шиндовс php как срать какаха не выходит из жопи"
Аноним 01/02/24 Чтв 06:44:57 #624 №3029103 
>>3028982
Это лишь означает то, что ты плох в гуглении. Учись формулировать запросы и всё получится.
Аноним 01/02/24 Чтв 06:59:46 #625 №3029109 
>>3028965
Сейчас реально устроится только на РНР. Так бы я дальше учил джаву.
Аноним 01/02/24 Чтв 09:13:21 #626 №3029162 
>>3028982
Возьми книжку Котерова по РНР, он там 90% функций рассмотрел.
Аноним 01/02/24 Чтв 09:17:04 #627 №3029166 
>>3028898
>для наглядности было бы неплохо отметить, что весь класс по сути статичный
Для чего?
Аноним 01/02/24 Чтв 10:45:12 #628 №3029224 
>>3029109
Сейчас никуда нереально устроиться. Джуны не нужны и PHP не исключение. Походу ты на битриксойдные вакансии повелся и думаешь что сюда легко вкатиться
Аноним 01/02/24 Чтв 11:18:03 #629 №3029269 
>>3029224
И что теперь? Возвращаться в джаву что ли?
Аноним 01/02/24 Чтв 11:20:25 #630 №3029273 
>>3029269
Перескакивать с языка на язык такое себе. Если учил джаву продолжай учить его дальше. Кто тебе вообще сказал что джавистов не берут на работу?
Аноним 01/02/24 Чтв 11:27:25 #631 №3029286 
>>3029273
В джава-треде сказали
Аноним 01/02/24 Чтв 12:01:22 #632 №3029329 
>>3029286
Тебя вкатун-джавист затроллил и лишил одного конкурента в твоем лице. Поздравляю.
Аноним 01/02/24 Чтв 13:18:04 #633 №3029477 
Вкатываюсь в 1с-Битрикс. Мнение?
Аноним 01/02/24 Чтв 13:42:36 #634 №3029573 
>>3029477
В качестве строчки в резюме это скорее минус чем плюс. Рискуешь застрять на должности говночиста до седых мудей, пока ссаный битрикс не вымрет нахуй. А там уже на завод.
И да, само "программирование" на битриксе устарело лет на 10 минимум, как сейчас никто не пишет. Поэтому битриксоидов и не берут никуда, собственно
Аноним 01/02/24 Чтв 13:51:28 #635 №3029601 
image.png
image.png
>>3028738
мб ты нахер пойдешь?
Аноним 01/02/24 Чтв 14:26:32 #636 №3029706 
>>3029573
Ладно, убедил. Иду покорять Ларавель
Аноним 01/02/24 Чтв 14:54:55 #637 №3029770 
Screenshot 2024-02-01 142454.png
Screenshot 2024-02-01 142747.png
Screenshot 2024-02-01 143259.png
>>3029601
Жпт дегенерат, в том то и прикол что ответы получаются РАЗНЫЕ.

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

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

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

Поэтому жпт хуиплетов не слушайте, просто читайте документацию. Все функции для работы с массивами можно за час изучить, а вкатываться вам пол года минимум.
Аноним 01/02/24 Чтв 15:13:27 #638 №3029811 
>>3029770
>идиоту предлагают использовать чат в качестве справочника, чтобы стек оверфлоу самому не парсить
>хуйня внезапно решила, что его заставляют использовать нейросети для пок-пограммирования особо сложной высоконагруженной системы с релизом сразу в прод без кода ревью, при малейшем баге в которой его буквально берут и ебут в зад без прелюдий, как он привык.
Аноним 01/02/24 Чтв 15:28:28 #639 №3029852 
>>3029477
Хуже битриксоидов в пхп никого нет. Они органически неспособны писать нормальный поддерживаемый код.
Аноним 01/02/24 Чтв 15:28:53 #640 №3029854 
Screenshot 2024-02-01 142747.png
>>3029811
>чат в качестве справочника
>залупа сбредила пикрелейтед
Такой-то справочник.

Тебе, дебилу тупому, сделали целый сайт по yii, с полной документацией, примерами, книгами, гайдами, ссылками на исходники, форумом. Даже на русском сука. И везде есть кнопка поиска.
Не хочу, хочу жрать говно.
Аноним 01/02/24 Чтв 15:29:49 #641 №3029856 
>>3029852
>писать нормальный поддерживаемый код
Можно подумать остальные пхп макаки способны.
Аноним 01/02/24 Чтв 15:31:03 #642 №3029861 
>>3029601
У тебя тут просто выжимка из документации - мог у гугла так же спросить. Он код за тебя все равно не напишет, не протестирует и своей жопой за него отвечать не будет.
Аноним 01/02/24 Чтв 15:33:22 #643 №3029866 
>>3029856
Вполне. Как минимум знают общие правильные абстракции, а не костыли из битрикса. Да и пишут обычно в одном стиле.
Аноним 01/02/24 Чтв 15:46:18 #644 №3029886 
>>3029866
>знают общие правильные абстракции
Типа умеют зачитывать наизусть солид из википедии? Или бесконечный список паттернов?

Малой, 99% кода на пхп это нечитаемое неподдерживаемое говно. То что кто-то пытается свой говнокод в какие-то ебанистические нагромождения классов заворачивать лучше нихуя не делает.
Аноним 01/02/24 Чтв 16:09:49 #645 №3029927 
>>3029886
>99% кода на пхп это нечитаемое неподдерживаемое говно
>яскозал
Ты случайно здесь, ребенок?
Аноним 01/02/24 Чтв 18:09:30 #646 №3030239 
>>3029927
Ладно. Давай, "взрослый", расскажи мне откуда пхп макаки учатся писать нормальный код? Тут весь тред ноют что по пхп нормальных книг нет. А по ооп так вообще все под джаву или на крайняк шарп.
Head first patterns - джава
Синяя книга эванса - джава
Чистая архитектура Мартина - джава

Где тут пхп и где тут пхп макаки?
Аноним 01/02/24 Чтв 18:26:58 #647 №3030269 
>>3030239
Тоже хочу учить джаву, но приходится пхп
Аноним 01/02/24 Чтв 18:27:52 #648 №3030271 
>>3030269
>приходится
Кретин, кто тебя заставляет учить пыху? Учи свою джаву если он так тебе нравится, зачем себя так мучать?
Аноним 01/02/24 Чтв 18:33:37 #649 №3030282 
>>3030271
Шансы устроится в пхп выше, чем в джаву. Сейчас там куча менторов, которые за деньги натаскивают нулевых челиков и они все вакансии закрывают. А в пхп больших денег нет, поэтому ментора работать не выгодно и поэтому самоучкам типа меня легче устроится. Ну это мне так видится.
Аноним 01/02/24 Чтв 22:36:15 #650 №3030724 
Так нормально делать? А именно - foreach и аргумент по ссылке.

https://ideone.com/si7cma

Есть у меня многомерный массив. Мне нужно пройтись по нему и сделать определённые действия с каждым элементом. С элементами первого уровня - одни, с элементами второго уровня - другие. И т. д.
В качестве альтернативы я вижу array_map, но из-за вложенности это будет гораздо тяжелее читать. Я просто ссылки обычно не использую и мало про них знаю. Это тот самый случай, где они нужны, да?
Аноним 01/02/24 Чтв 22:40:55 #651 №3030730 
>>3030724
Зачем ты такую дрысню пишешь? Ты вкатун?
Аноним 01/02/24 Чтв 22:42:31 #652 №3030731 
>>3030730
Типа. А как поступить в такой ситуации?
Аноним 02/02/24 Птн 00:45:04 #653 №3030859 
>>3030724
А что за действия то?
Аноним 02/02/24 Птн 02:03:01 #654 №3030918 
>>3030724
ИМХО код плохой. Сложно читается.
Скажи, зачем ты делаешь unset($lvl3); на строке 23?
Аноним 02/02/24 Птн 02:21:48 #655 №3030932 
>>3030918
>>3030724

Такое выглядит лучше https://ideone.com/wSNQFR
Никаких ссылок, никаких unset'ов.
Аноним 02/02/24 Птн 09:14:09 #656 №3031043 
>>3030859
Многомерный массив. Массив, который состоит из массивов, которые состоят из массивов, которые состоят из скалярных значений. Мне нужно превратить его (корневой массив) в строку, при этом, немного изменив значения самого глубокого массива. То есть, перебрать элементы массива3, модифицировав их и превратив в строку, потом перебрать элементы массива2, превратив их в строку, потом перебрать элементы массива1, превратив их в строку.

>>3030918
Это своего рода база. Делаешь так (foreach с ссылкой) - сразу после цикла сделай unset переменной со ссылкой, чтобы случайно к ней потом не обратиться. Поскольку он вложен, это не то чтобы очень проблема, из глобальной области lvl3 не доступен. Но если код будет как-то меняться, хуй знает, что произойдёт. Для перестраховки.

>>3030932
Да вот хуй знает, мне как будто тяжелее читать это. Не то чтобы прям тяжело, но foreach вообще легко, а тут слегка подвисаешь.
Аноним 02/02/24 Птн 09:35:51 #657 №3031075 
>>3030724
Это какая-то задачка из литкода или что это?
Аноним 02/02/24 Птн 11:47:48 #658 №3031227 
Кто-нибудь вообще настраивал XDebug для шторма через докер? Сейчас попробовал и ничего не получилось. Причём проблема очевидно в тупом шторме, который не может подхватить xdebug.
Самое бесячее, что надо для каждого проекта создавать тонну ебанутых настроек шторма, всякие папки прописывать, сервера, прочую залупу. Неужели это нельзя всё сделать проще? И ещё кто-то говорит, что шторм - это дофига удобно. На мой взгляд самый неудобный и долбанутый редактор, который я когда-либо встречал.
Аноним 02/02/24 Птн 14:58:14 #659 №3031597 
>>3031227
Можно. Все это делается в один клик в нихуя ты раскатал IDE.
Аноним 03/02/24 Суб 02:55:38 #660 №3032553 
Че пацаны? Симфони или ларавель?
Аноним 03/02/24 Суб 03:55:21 #661 №3032573 
Сижу-пишу свой говнокод, мешая ООП-код с ФП-кодом...

А я не знаю как иначе.

У меня нет базы в голове.

У меня нет учителя, нет курсов, нет программисткого образования.

Поныл немного, ага...

Просто стыдно за свой код, за то, что я даже не могу понять как мне писать его нормально. Поставить фигурную скобку где надо я могу, но вот понимание правильной архитектуры у меня нет, понимание оптимальных, логичных и красивых решений.
Аноним 03/02/24 Суб 03:57:58 #662 №3032574 
>>3032573
Всю архитектуру, за тебя, реализовали в фреймворке. Паттерны еще пойди поучи
Аноним 03/02/24 Суб 05:32:38 #663 №3032585 
Пыхтел над кодом. Добавил по интуиции условие и все заработало.
Одна проблема - я не понимаю почему мой код работает. Норм, пачаны?
Аноним 03/02/24 Суб 05:39:43 #664 №3032587 
>>3032585
В $_SERVER['REQUEST_URI'] летит же то, что находится в адресной строке браузера?

Я вбиваю в адресную строку браузера:

http://localhost/home.

В коде есть условие if ($_SERVER['REQUEST_URI'] === '/home') => сделать header ('Location: /home?page=2&sort=up'), после этого происходит переход на новую ссылку, в адресной строке показывается http://localhost/home?page=2&sort=up, но условие с $_SERVER['REQUEST_URI'] === '/home' все равно срабатывает повторно.
Аноним 03/02/24 Суб 05:43:54 #665 №3032588 
>>3032587
Ладно, пачаны, даже не думайте, если собираетесь о том, что у меня в коде. Я кажется понял куда смотреть.
Аноним 03/02/24 Суб 07:56:58 #666 №3032603 
>>3032573
>программисткого образования
Можно подумать, что там учат программировать. Там в основном решают простые задачки типа lab1.cpp, где пишут лютый говнокод. Преподы рассказывают лишь основы, буквально по вершкам. В итоге после универа ещё надо самому доучиваться, чтобы взяли на работу.
Аноним 03/02/24 Суб 08:11:43 #667 №3032604 
>>3032553
Ларавель - если хочешь стать фуллстеком, Симфони - если чистым бэком
Аноним 03/02/24 Суб 12:36:27 #668 №3032750 
>>3031597
Два дня долбался с этим Xdebug'ом, но в итоге победил. Оказалось, что в гайдах в интернете всякую фигню пишут, настроек нужно меньше, но всё равно надо точно знать какие именно.
Вообще, заметил, что с докером пишут конфиги как попало, лишь бы работало. Очень редко можно найти хороший гайд, где выносят переменные окружения в .env, не пытаются выловить ip-адрес контейнера, а обращаются по его имени.
И второй неприятный момент уже в самом докере, что есть различия между разными ОС. Я вначале наткнулся на гайд, где чел настраивал через винду, а в линуксах некоторые настройки надо писать по-другому.
Аноним 03/02/24 Суб 18:12:34 #669 №3033173 
Сложилось впечатление, что PHP запутывает своим желанием усидеть на всех стульях сразу. С одной стороны, он как бы говорит - тут всё серьёзно, на тебе статическую типизацию аргументов методов, и статическую типизацию возвращаемых значений, и ещё кучу всякого претенциозного, мол, мы не совсем безнадёжные говнокодеры, а стремимся к Java.
С другой стороны, он - собранная на коленке хуита с динамической типизацией, и никак ты не укажешь тип для переменной внутри метода, отсутствием типизированных массивов (внешние инструменты типа phpstan мы не трогаем, речь о самом языке), как будто бац-бац для говнокодеров, чел, типа, если хочешь что-то серьёзное писать, иди тереби джаву, раст, си, хуй знает, а мы тут хуяк-хуяк прототип, чисто посмотреть, взлетит или нет.
Правильно понял?
вкатун
Аноним 03/02/24 Суб 18:14:20 #670 №3033175 
>>3033173
>Правильно понял?
Правильно. А теперь дропай ПХП и вкатывайся в Джаву. Иначе до конца своих дней будешь мучать себя что не вкатился туда
Аноним 03/02/24 Суб 18:58:01 #671 №3033228 
>>3033173
Пхп никого не запутывает. Это говноязык, который развивают дебилы, по прежнему живущие временами когда рандомный вася закачивал файл на сервак и это был сайт.

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

Никаких перспектив у пхп нет.
Доля использования именно как языка для написания кода будет падать и дальше. Джаваскрипт макаки сожрут весь рынок пхп макак просто потому что их в сотню раз больше. Все ресурсоемкие задачи уйдут го и модным растам зедам. А говнокодить сайты будут на джаваскрипте. Потому что фронт один хуй на нем. Нахуя два набора дебилов держать.
Аноним 03/02/24 Суб 21:13:18 #672 №3033415 
>>3033228
Как вывести стихотворение из mysql чтобы пхп не превращал его в строку а сохранил переносы?
Аноним 03/02/24 Суб 21:36:27 #673 №3033452 
>>3033228
>будет падать и дальше
Если я засну и проснусь через сто лет, то пхп также будут хоронить

Кстати, в пиндосиях, этих ваших, похороны пхп это давно уже ироничный мем. А по факту пыха как являлась топ 1 в бекенде, так и продолжает занимать 77-80% рынка. Остальное жрет джава и питон, а всякие однопроцентные объедки занимают уже ноды и прочие руби. Кстати, не секрет, что почти в ста процентах случаев Нода используется для сборки фронтенда, а не для разработки бекенда
Аноним 03/02/24 Суб 21:42:07 #674 №3033467 
Franken php. Годнота? Хуита? Стоит вкатываться?
Аноним 03/02/24 Суб 21:51:46 #675 №3033491 
>>3033415
Так, может, дело не в том, что php херит переносы, а в том, что оно выводится в браузер, т. е. HTML, т. е. для переноса нужно <br> вместо "\n".
На крайний случай можешь обернуть место, в которое ты выводишь, тегом <pre>
Аноним 03/02/24 Суб 22:28:34 #676 №3033540 
>>3033452
>так и продолжает занимать 77-80% рынка
И сколько из этого всего вордпресс и остальные цмс? В том-то и прикол что для этих сайтов программист не нужен. Я русским языком написал:
>Доля использования именно как языка для написания кода будет падать и дальше
Она и так падает непрерывно. 30% сайтов используют версию ниже седьмой. Это говно никто не обслуживает оно просто висит в интернете. Поддержка седьмой версии два года назад закончилась. Половина "сайтов" на пхп на седьмой версии. Половина пхп сайтов до сих пор под апачем крутится. Все это не актуальный кал. Про какое будущее можно говорить вообще? Какое нахуй развитие языка если две трети кода на нем это легаси, даже от актуальной версии на три года отставшее?

О том то блядь и речь что прямо сейчас для НОВЫХ проектов пхп нахуй не нужен. Сколько еще десятков лет перемогать фейсбуком и вк? Да, там может до сих пор пара легаси сервисов на этой хуйне крутится, но новые-то никто на пхп не пишет. Потому что нахуя?

А то что нишу пхп макак займут джаваскриптеры это просто сто процентов. Как только они высрут нормальные инструменты, как только у них появится свой ларавель всю пхп парашу как ветром сдует. И очевидно что это не изменение к лучшему, а деградация. Хуже пхп макак только жс макаки - это факт. Но так же и факт то что жс макак в сто раз больше. Как только им в руки попадет инструмент чтобы делать вменяемый бекэнд БЫСТРО пхп растворится в луже мочи. Будем плагины для вордпресса устанавливать.
Аноним 04/02/24 Вск 00:11:44 #677 №3033611 
>>3033540
Тише. Воды попей. Зайди на хх и сравни количество вакансий на вордпресс и ларавель. Это раз. Два - ты можешь вбить в поиск node и увидишь, что вакансий на пару сотен больше, но в основном это фронтенд или фуллстек. И три - выбирай любой язык и сортируй зп от 200к и ты увидишь, что вакансий +- одинаково, а в большинстве случаев пхп лидирует.


У ноды уже давно есть кошерный со всех сторон нестжс, вот только, когда будет на нем столько же вакансий как и на ларе, тогда и приходите. А про то, что нода убьёт пыху я слышу года эдак с 15го.

Напомню, что при всем при этом рынок пыхи это 80%. За последние нацать лет он ни упал вобще. Все потому что всё твои "другие" языки популярны, но популярны не в бекенде, а например в мобильной разработке, которая сейчас на хайпе, но без бека, как известно никуда не поедет (как и все в принципе)
Аноним 04/02/24 Вск 01:56:12 #678 №3033683 
>>3033611
>сравни количество вакансий на вордпресс и ларавель
Алеша, какие нахуй "вакансии" на вордпресс? Вордпресс потому и популярен, что там программист не нужен.

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

>А про то, что нода убьёт пыху я слышу года эдак с 15го.
При чем здесь нода? Не нода, так bun. Не ванилла, так тайпскрипт. Ты можешь хорохориться сколько угодно, но пхп расти некуда, он никакую долю рынка у жс не отъест. А вот в обратную сторону только в путь. Вопрос стоит только о том когда.

Убьет ли го пхп? Да нет конечно, просто заберет все самые денежные и интересные задачи и переманит все самые квалифицированные кадры. Я вот с "года эдак с 15го" наблюдаю как сеньорский состав отпочковывается в го, а меня пытаются нанять чтобы за ними пхп говно вытирать. Стрессоустойчивость и умение понимать чужой код им требуются. Офк все значимые задачи будут получать го красавчики, а пхп макаки будут баги искать в легаси кале, а версию языка поднять приоритета и бюджета нет.

Кому и кобыла невеста. Кому-то в кайф сидеть за копейки колупать баги в легаси говнокоде и облизываться на "новые" фичи языка, которые спиздили из джавы десятиллетней давности. Нахуя на это подписываться в 2к24 году? А самое главное нахуя работодателю в 2к24 в это вкладывать миллионы?
Аноним 04/02/24 Вск 02:28:33 #679 №3033707 
>>3033683
>тенденция
Значение знаешь? Тенденция это когда 20 лет назад пыха занимала 80% рынка, 15 лет назад - 60, 10 лет назад - 30 и т.д. А когда он стабильно занимает 80%, то о какой тенденции ты говоришь? О манямирке твоём, который ты прочёл лет 5-10 назад? Потому что крыть пыху говном уже давно моветон и признак школьника.

По поводу легаси кода я тебе ответил. Вакансий на ларе больше, чем вакансий на чем-либо ещё. Ты просто дурачек вылезший с установками из 2010-2015 годов, не понимающий, что в 2к24 дела обстоят иначе

>развиваться некуда
Кекнул с дауна. А что же считается развитием?
Аноним 04/02/24 Вск 03:29:22 #680 №3033748 
Чисто интересно. Аноны, которые регулярно сидят в этом треде, для чего вы тут сидите? Я вкатун, иногда прихожу спросить что-то, поэтому и сижу в этом треде.
Аноним 04/02/24 Вск 04:12:21 #681 №3033766 
>>3033707
>Потому что крыть пыху говном уже давно моветон и признак школьника.
Ну ка, чучело, расскажи чем пыха лучше тайпскрипта. Ну так чисто навскидочку, пару фич набрось.

>По поводу легаси кода я тебе ответил. Вакансий на ларе больше
Каво блядь? Уеба, только 20% использует актуальную версию пхп. Большинство вакансий это ПОДДЕРЖКА устаревшей легаси параши. Я тебя спрашиваю: нахуя вкатуну вкатываться в эту поддержку? Перспектива какая? Почему должны новые вакансии на пхп появиться на рынке?

>А когда он стабильно занимает 80%
Это доля вордпресса. И сайтов, для которых код давным давно не пишется. Додстер, ты сам бы пошел работать с кодом под версию 5.6? А это жи САЙТЫ и ВАКАНСИИ и они ЗАНИМАЮТ.

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

>А что же считается развитием?
Когда на твоем языке можно поднять приложение без ебли со сторонними вебсерверами? Когда у тебя нормальная типизация? Когда у тебя есть нормальные коллекции? Когда ты можешь разрабатывать и для фронта и для бека и под десктоп?

Ну и разумеется когда твой язык развивают не дебилы, которые пять лет ебут мозги и не добавляют модификатор ридонли "патамушта макакам будет сложна". И не могут высрать короткий конструктор, который и так все генерят. Зато высирают полностью ломающее обратную совместимость объявление свойств в конструкторе.
Вот это блядь "развитие"
https://www.logicbig.com/tutorials/core-java-tutorial/java-16-changes/intro-to-java-records.html
https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/builtin-types/record
страница бойлерплейта сжимается в одну строчку. А с такими хуиплетами у руля никакого "развития" офк не будет.
Аноним 04/02/24 Вск 05:11:11 #682 №3033772 
>>3033766
Нихуя горение. Ну ладно.

>чем пыха лучше тайпскрипта?
А должна быть лучше? Ну ок, пара фич:
- рантайм типизация, рантайм инкапсуляция, рантайм ООП
- наличие энтерпрайзных фреймворков
- наличие работы
Это навскидку

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

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

>80% это вордпресс
Почему ты такой жопой чтец? Я тебе написал, пиздуй сам проверять количество вакансий на ларе и вордпрессе, а потом объясни мне откуда ты берёшь 80% вордпресса, когда вакансий на нём меньше лары

>гошники получают больше
Пиздуешь на хх и узнаешь, что мидл+ разрабы получают +- одинаково на любых яп, вот только на пыхе таких вакансий больше

>формошлепство на ларавель
Маня. Я даже ~5 лет назад, работая с Ларой в говноконторе за 50к не пилил формочки от слова совсем

>поднять приложение без ебли со сторонними веб серверами
Ну тут уж нода уделывает так уделывает: pm2 плюс тот же nginx, плюс компиляция из тайпскрипта и тд и тд. Для пыхи же, твои любимые гошники активно пилят лонг сервера изи запускаемые продакшн пхп приложения без всяких нгинксов, а по желанию можно всё приложение скомпилить в бинарник и запускать где угодно вобще без нихуя

>фронт, бек, десктоп
А мне нужен онли бек. С этого и начался весь диалог. Пыха топ один в беке. Остальное мне не интересно

>нет ридонли😭
Ой бля. Иди ещё до знака доллара доебись

>объявление свойств в конструкторе
Хорошо хоть в тайпскрипте такого нет, да?
Аноним 04/02/24 Вск 09:44:08 #683 №3033825 
>>3033748
А я прихожу пообщаться с вкатунами.
Мимо другой вкатун
Аноним 04/02/24 Вск 11:29:50 #684 №3033889 
Лично я попробовал РНР ещё в универе и тогда он мне показался действительно языком, чтобы быстро говнокодить сайтики в процедурном стиле. Но сейчас я познакомился с ООП в РНР и могу сказать, что он теперь мало чем уступает джаве. И при этом сохраняет все преимущества интерпретируемого языка. Особенно удобно при работе с докером, что не надо постоянно перезапускать контейнер с новым жарником как в джаве, а он просто мапится на твой код и при первом же запросе выполняется. Удобно, быстро, нет лишнего геморроя.
Аноним 04/02/24 Вск 12:13:31 #685 №3033914 
Screenshot 2024-02-04 115200.png
Screenshot 2024-02-04 115225.png
Screenshot 2024-02-04 115556.png
>>3033889
>рантайм типизация, рантайм инкапсуляция, рантайм ООП
И это полезно... чем? Тем что с динамической типизацией можно срать в код? Плюс так плюс.
Дальше шизофазия какая-то пошла. Даже на два пункта не хватило.

>Откуда ты берёшь эту инфу? Из смишных мемов?
Оттуда же откуда и ты. Ты ведь сурс сразу дал.
https://w3techs.com/technologies/details/pl-php/8
Доля рынка кста опять упала.

>Я тебе написал, пиздуй сам проверять количество вакансий
>Алеша, какие нахуй "вакансии" на вордпресс? Вордпресс потому и популярен, что там программист не нужен.
Стекломойный, ты совсем ослеп? Ты тут срешь про долю рынка, а доля рынка из вордпресса почти целиком и состоит.

>Пиздуешь на хх и узнаешь, что мидл+ разрабы получают
Бля, я когда полез проверять ожидал что там пизда, но не ожидал что такая. ПХП ВСЕ. Бегите отсюда нахуй. Вот, смари паскуда, вот это развитие. Го, которым на хх еще пять лет назад даже не воняло теперь обсыкает твой ларавель и по вакансиям и по зп.

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

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

В общем я понял почему ты каждый пост виляешь сракой обходя отток задач и синьоров в го. Потому что ты чекнул и понял что там пизда. Го уже вполовину размером с пхп рынок в раше. А по синьорским задачам похоже уже перерос. И дальше будет только веселее.
Аноним 04/02/24 Вск 12:16:03 #686 №3033915 
>>3033914
>>3033772
Аноним 04/02/24 Вск 12:39:31 #687 №3033925 
Никто не будет переписывать.webm
>>3033914
Не будет никто ничего переписывать на го. Как пилили сайты на РНР, так и будут пились. А вот как раз судьба го пока неизвестна, его нишу может занять любой новый модный язык.
Аноним 04/02/24 Вск 12:44:18 #688 №3033928 
>>3033925
Никто не будет переписывать всякую хуйню. А вот все критические сервисы, которые приносят бабки будут. Тебе, дебилу, про то и пишут - все саме вкусное и прибыльное вымывается.

Ты скрины видел? Несколько лет назад никакого го в помине не было. А сейчас там синьорских вакансий больше чем на ларавеле.
И чьи же это задачи пишут на го бывшие пхпшники? Наверное у фронтендеров часть рынка спиздили.
Аноним 04/02/24 Вск 12:51:32 #689 №3033940 
>>3033928
Го занял нишу С/С++ в бэкенде. Я помню ещё в 2017 смотрел доклады мэйлру, где они хвастались, что переписали почту на го, а раньше у них она была на С++. А нишу РНР го ни как не займёт. Конкуренты РНР - это всякие питон с джангой, дотнет с асп.нет, может действительно на жс/тс какой-нибудь бэкенд высрут, но ему надо будет догнать по удобству и производительности разработку на РНР, что весьма сомнительно. Скорей появится какой-нибудь новый язык, который предложит новый подход к быстрой разработке сайтов. Типа как в своё время руби на рельсах совершил революцию и ускорил написание MVC-приложений.
Аноним 04/02/24 Вск 13:04:44 #690 №3033950 
>>3033940
Доо, сишники в го набижали. Вот они эти сишники в ряд:
https://hh.ru/vacancy/92525414
https://hh.ru/vacancy/91937785
https://hh.ru/vacancy/92207521
Почему эти долбоебы на ларавель ищут пхп макак с опытом go? Откуда вообще у пхп макак опыт го если это ниша сишников? Да потому что в крупных конторах это повсеместно, я блядь сам курс по го проходил бисплатно за счет конторы, и не потому что я его выклянчил, а потому что критические сервисы хотят на го переносить.
Аноним 04/02/24 Вск 19:20:51 #691 №3034663 
>>2975215 (OP)
По работе нужно массив разделов превратить в древовидную структуру. Изначальный массив и массив, который должен получиться:
https://codefile.io/f/oyqbaZY0Tm
То есть по порядку, если следующий уровень больше предыдущего уровня, значит он является подразделом.
Как можно решить эту задачу?
Аноним 04/02/24 Вск 19:26:18 #692 №3034672 
Мужики объясните какая норма задач разной сложности, сколько человекочасов в день вы тратите?
Аноним 04/02/24 Вск 19:56:20 #693 №3034726 
>>3034663
Задачу решать будем мы, а зарплату получишь ты? Классно устроился, брат
Аноним 04/02/24 Вск 20:02:30 #694 №3034737 
>>3034726
Так тут почти все в перспективе рассчитано на получение зп. Даже решение учебника ОПа
Аноним 04/02/24 Вск 21:10:34 #695 №3034859 
ПЕРЕКАТ >>3034858 (OP)
ПЕРЕКАТ >>3034858 (OP)
ПЕРЕКАТ >>3034858 (OP)
comments powered by Disqus

Отзывы и предложения