Этого треда уже нет.
Это копия, сохраненная 14 апреля в 11:40.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Клуб изучающих PHP#136 /php/ 2975215 В конец треда | Веб
Кто-то уже празднует, а мы изучаем язык 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 месяцев
2 2975219
В шапке что-то не то? Пишите предложения по улучшению.

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

На праздниках скорость ответа может быть о-о-очень медленной.
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
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
4 2975788
Бля, я ненавижу регулярки всею душою и просто пишу это для облегчения души. Ради интереса, может кто рассказать как составить цельную регулярку для пOиCKA лATиHицы в CлOBAX? Объединение результатов /w[a-z][а-я]/w и /w[а-я][a-z]/w не устраивает аутиста внутри меня
5 2975854
>>2975788
Я не пишу идеальные регулярки, но дам совет: чтобы понимать регулярные выражения, нужно рассматривать их как описание из каких символов состоит слово.

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

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

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

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

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

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

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

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

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

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

Ну и да, у ОПа в мануале, в шапке, есть учебник по php, там урок по регулярным выражениям, весь синтаксис там описан.
5 2975854
>>2975788
Я не пишу идеальные регулярки, но дам совет: чтобы понимать регулярные выражения, нужно рассматривать их как описание из каких символов состоит слово.

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

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

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

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

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

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

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

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

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

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

Ну и да, у ОПа в мануале, в шапке, есть учебник по php, там урок по регулярным выражениям, весь синтаксис там описан.
6 2975858
>>2975788
Ну и еще: нужно хорошо понимать что делает каждый элемент регулярных выражений, если ты ставишь квадратные скобки, не зная что они значат в синтаксисе, то будет путаница.
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 оно будет матчить ещё и полностью латинские слова, как быть?
8 2975951
>>2975945
От сука разметка символы сожрала, в третьей регулярке стоит * перед двумя диапазонами латинских символов
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
10 2975961
>>2975955

>Есть же |


>\w([а-я][a-z])\w|\w([a-z][а-я])\w\ui


Точнее даже
\w([а-я][a-z]|[a-z][а-я])\w\ui
Сделай ещё нежадный захват для обоих \w (\w*?), чтобы слово целиком матчилось.
sage 11 2975967
12 2976646
Стоит ли учить Yii? Я смотрю очень много вакансий по нему
13 2976651
>>2976646
Хули там "учить"?
14 2976672
А что будет, если я на собесе случайно скажу "пэ-ха-пэ", а не "пи-эйч-пи"?
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 и на выход - ничего, просто объект будет меняться в ходе функции.



Ок.
16 2976983
Как перед собесом запомнить все эти стандартные функции? Мне кажется это не реально просто выучить.
17 2977011
Лампово у вас тут.
18 2977125
>>2976983
Зачем это заучивать?
Решаешь задачки, пишешь проекты и все само запомнится.
19 2977921
>>2976778
Спасибо за ответ.

>А что в этом плохого?


Я думал, что вид $name или $enrollee['name'] более лаконичный и удобочитаемый.
Кстати, а что ты думаешь о том, как я буду получать значения из объекта ErrorList:
$errors->implode(" ", getListOfFieldErrors('name'));
Т.е. сначала я получаю массив, где ключи - 0, 1, 2..., а элементы - строки. Потом я сшиваю их.
Я читал одну из твоих статей и там говорилось, что, по возможности, не стоит использовать встроенные функции в html-коде.
Как мне тут поступить?
Оставить как есть?
Преобразовать где-то в контроллере, а потом вывести как строку в html?
20 2977926
>>2977921

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


Я сейчас попробовал и такая запись не прокатит, ага :D
21 2977929
>>2977926
implode(" ", $errors->getListOfFieldErrors('name'));
22 2977943
>>2976983
Codewars же.
Идеально для запоминания всех этих функций
23 2977980
>>2976778

>Конечно, лучше бы там было getName(), а не get('name')


В прошлом треде ты советовал мне, если и использовать магию для создания сеттеров и геттеров, то использовать __call.

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

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

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

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

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

https://3v4l.org/v85Gq
24 2978025
>>2977980
Ну и да, как еще один вариант реализации __call под геттер/сеттер:
https://3v4l.org/dOVZM
25 2978089
>>2973449 →

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

Ну хотя бы взял бы VSCode, подключил phpactor и исправил там несколько багов.
26 2978093
>>2977921

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



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

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



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

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

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

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



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

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

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

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

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

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

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

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



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

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

> А сейчас что?


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



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

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

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



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

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



Не надо.
29 2978117
>>2977980

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

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

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

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

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

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



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

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

> А сейчас что?


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



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

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

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



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

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



Не надо.
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 и ты замучаешься исправлять код с ним, если они еще раз поменяются. Ну и у строгого равно правила гораздо проще, а вот для двойного ты вряд ли их наизусть помнишь.

В остальном норм.
31 2978154
>>2978105

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

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

> Сегодня решил почитать одну из статей, код из этой статьи:


> https://3v4l.org/oAk18



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

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

Также вместо имен типа user.repository лучше использовать имя класса UserRepository::class.
32 2978155
>>2978142

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



Разве php не будет ругаться?
Когда указываешь тип возвращаемого значения и ничего не возвращаешь (а сеттер обычно ничего не возвращает), то возникает ошибка. Вроде так, разве нет?
33 2978165
>>2978142

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



Если добавлять этот метод в трейт, мб его нужно распилить на геттер и сеттер, чтобы классы брали только то, что им нужно - либо и то и то, либо что-то одно? У меня ведь часть классов не нуждается в сеттере, но геттер вполне был бы полезен им.
34 2978184
>>2978089
Может вкатунам в PHP ещё и замену PHP написать чтобы два раза со стула не вставать? Ну а чё, он же всё равно будет заменён, так чё ждать если можно заменить его самому
35 2978192
>>2978155

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

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



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

>>2978184

Так PHP это открытый код. Ты какую-то глупость написал.
36 2978193
>>2978184
Уже есть голанг. Скоро на него перепишут все сайты.
37 2978259
>>2976646

>Стоит ли учить Yii? Я смотрю очень много вакансий по нему



А че учить? Приходишь на работу на Yii не зная Yii. Там тебя возьмут за готовность писать на этом говне мамонта
38 2978812
>>2978192
Я дописал, норм?
https://3v4l.org/oq2BZ
39 2978822
>>2978812
Ладно, стоило все-таки потестить сначала класс, чем скидывать!
Нашел мелкие проблемы.
40 2978835
>>2978822
Все вроде бы исправил:
https://3v4l.org/NpEpS
41 2978841
>>2978822
Т.е. не класс, а трейт, ага!
42 2978930
>>2978154
Я немного переписал прошлый DIContainer:
https://3v4l.org/DvVbH
Снимок.JPG15 Кб, 634x236
43 2979073
Почему не коммитится?
44 2979400
Как подружить nginx и php на винде?
45 2979404
>>2979400
Купи им платья, туфельки. Одень, усади на маленькие стульчики за маленький столик и налей им чаю в маленькие фарфоровые чашечки. Это будет добро и дружба на долгие годы.
46 2979409
>>2979404
У меня при открытии php файла происходит его загрузка
47 2979450
>>2979409
А у меня при открытии php файла происходит его редактирование.
48 2979580
>>2979400
Нужно писать не "подружить", а писать что конкретно не работает.
49 2979607
>>2979400
Откуда мы знаем, что ты там делаешь? Ты там опенсервер поставили или ксамп, а может вообще пытаешься через докер запустить? Вариантов миллион. Учись задавать вопросы.
50 2979639
Можно ли создавать Entity в Symfony не через консольную утилиту?
52 2979668
>>2978835

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

$fieldNameFirstChar -> $firstChar
methodAllowedToBeUsedOnProperty -> getPropertyAccessMethods

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

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

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

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

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

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

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

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

По типу:

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

То есть, идея в том, чтобы сделать повторный вызов геттера как можно короче и не делать кучу проверок каждый раз.
52 2979668
>>2978835

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

$fieldNameFirstChar -> $firstChar
methodAllowedToBeUsedOnProperty -> getPropertyAccessMethods

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

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

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

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

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

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

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

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

По типу:

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

То есть, идея в том, чтобы сделать повторный вызов геттера как можно короче и не делать кучу проверок каждый раз.
53 2979673
>>2978930

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

ServiceAlreadyRegisteredException extends DIException
ServiceNotFoundException extends DiException

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

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

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

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

Также, если ты хочешь реализовать PSR-11, то ты должен не делать свой интерфейс ContainerInterface, а подключить интерфейсы с помощью композера.
54 2979674
>>2979073

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

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

Это значит, что у тебя не настроено в сервере, что надо для PHP файлов вызвать интерпретатор PHP. Готовые советы есть в интернете, даже в документации nginx есть пример. Обычно запускают php-fpm и nginx настраивают, чтобы он передавал ему запросы.
56 2979677
>>2979639

Можно руками просто создать файл.
57 2979707
>>2979676
А можешь гайд скинуть рабочий? Я пробовал как в документации пишут: https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
ещё с гитхаба статью но все равно не обрабатывает
58 2979721
>>2979707
У меня апач, но, мб это поможет.
Конфигурационный файл настроен?
Даже если настроен так, как написано в гайде, может оказаться, что какую-то инструкцию автор гайда пропустил.
Можно где-то посмотреть текст ошибки?
Там еще какая-то ебка с тем, используешь ли ты браузер, чтобы открывать файл php или запрашиваешь этот файл с локального своего сервера.
Я ставил апач давно, поэтому помню туманно с чем может быть ебка.
59 2979726
>>2979721
Если открываешь php в браузере как файл, например:
c://localhost/example.php
То ничего обрабатываться не будет и браузер покажет просто код.
Если пишешь в адресной строке браузера:
http://localhost/example.php
Код обрабатывается и выводится результат кода.
60 2979727
>>2979726
Это все апач, что там с nginx я не ебу.
61 2979758
>>2979665
>>2979677
А почему в шторме не сделают кнопку создания с красивой формой? За что мы вообще деньги платим?
17036422584940.png67 Кб, 631x838
62 2979834
Есть шансы на вкат в пхп или лучше в голанг вкатываться?
63 2979891
>>2979834
образование есть? Без технического диплома на работу сейчас не берут. Даже Письмо Деду Морозу не читают
64 2979921
>>2979891
Есть. Дед Мороз пересылает письма работодателям что ли?
65 2979971
Как думаете чтоб в мухосранске в веб-студию устроиться человеком-оркестром фуллкеком на пхп и вью, то для этого надо учить всякие там микросервисы, redis, rabbitmq, kafka?
66 2980067
>>2979673
Спасибо за ответ.
Я исправлю это позже.

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

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

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

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

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

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

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

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

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

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

Заглавные буквы русского алфавита можно использовать только в таких случаях:
1) первая буква простой фамилии;
2) первая и вторая буквы фамилии с апострофом;
3) первая буква и первые буквы после пробела;
4) первая буква и первая буква после дефиса;
5) первая буква и первая буква после открывающей скобки.
66 2980067
>>2979673
Спасибо за ответ.
Я исправлю это позже.

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

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

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

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

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

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

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

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

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

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

Заглавные буквы русского алфавита можно использовать только в таких случаях:
1) первая буква простой фамилии;
2) первая и вторая буквы фамилии с апострофом;
3) первая буква и первые буквы после пробела;
4) первая буква и первая буква после дефиса;
5) первая буква и первая буква после открывающей скобки.
16946796652791.mp45,2 Мб, mp4,
1080x1920, 0:15
67 2980099
68 2980213
>>2979668
Кажется переделал: https://3v4l.org/Jfpr9

Ты не мог бы объяснить мне как работает область видимости переменных у стрелочных функций?
69 2980281
>>2980099
Мог бы кариес свой ебучий и пролечить раз такой бохатый
🎄осударь
70 2980285
>>2979971
backend без очередей как стрипуха без блядей
71 2980369
>>2979834
В голанг с нуля не вкатываются, там сразу Эльф нужен
72 2980428
>>2980067
Кто тебе сказал, что твои правила верные?
Как минимум имя бывает составное через пробелы. У моих детей, например, по два имени, но нет отчества, потому что они родились в Канаде, их российский паспорт выдан на основании канадского свидетельства о рождении, в котором нет никакого отчества, зато есть middle name (оно опциональное, но мы Прочитали дать).
В странах Южной Америки могут вообще 10 имён дать. Так чисто по приколу записать кучу святых, чтобы они присматривали за ребёнком лол.
А ещё у нас тут есть индейцы, у которых может быть одно имя вместо имени-фамилии. Я не знаю, как это в России разруливают.
У одного из детей Маска есть цифры в имени.

Короче говоря, не надо думать, что ты щас покроешь всё норм валидацией, и всё будет хорошо. Обязательно что-нибудь упустишь.
Так что просто проверяй на пустоту и обрезай пробелы по краям, больше ничего не надо.
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-порта.
74 2980491
Пхп теперь место куда идут питонисты не выдержавшие конкурс 2500 откликов на вакансию? Вкат через пхп тоже все?
75 2980493
>>2980491

>Вкат через пхп тоже все?


Да. Шалуны поняли что им ничего не светит на пайтоне и огромной толпой ринулись изучать 🎄. Это конец.
76 2980500
>>2980493
Опять питонисты все испортили
77 2981227
>>2979673

>в PSR-11 для исключений даны интерфейсы


Я не представляю что мне с ними делать.
Вся моя работа с исключениями, на данный момент, заключается в том, что я просто создаю класс-исключение, делаю extends от Exception и выкидываю исключения с текстом ошибки.
И я не знаю что я должен делать, чтобы из интерфейсов исключений получить что-то, что можно использовать в коде...
78 2981311
>>2979673
Еще как вариант - можно не проверять регистр вообще, а принимать значение как есть, если оно подходит под хотя бы один тип, и изменять регистр самому.
Тогда текст ошибки будет указывать только на то, что имена или фамилии такого типа не поддерживаются сайтом.
Да-да, я понимаю, что имена и фамилии бывают разными и кому-то может не понравиться, что его имя или фамилия не проходят по системе, но я не хочу писать идеальную валидацию для имен и фамилий. Я не хочу, чтобы моя валидация покрывала все случаи. Ты как-то скидывал ссылку какие символы могут использоваться в ФИО. Я часть не стал брать. Хотя бы потому что не могу нагуглить пример использования таких символов в имени. Не лучше ли вместо того, чтобы задрачиваться, Читать Белый Медведькие проблемы по мере их появления? Все-таки те системы, которые валидируют ФИО, сами могут заниматься тем, что добавляют варианты, которые раньше не допускали, потому что узнают, что существует кто-то, кто должен проходить валидацию, но система валидации под него не заточена.
79 2981375
>>2981227
>>2979673
Я сделал так: https://3v4l.org/rcZVi
Я установил пакет через composer
Попробовал в VSCode, вроде как все работает.
80 2981767
>>2975264

>getEnrolleeArray


>getErrorListArray


Зачем тебе венгерская нотация, если у тебя и так есть тип в сигнатуре?
81 2981777
>>2977980

>использовать __call


Советую его не слушать, и писать максимально простой и читабельный код, магия в 🎄е это зло, которое надо под корень уничтожать, чем уже успешно занимаются в новых версиях 🎄, объявив устаревшим динамические объявления свойств объекта
82 2981783
>>2979758
>>2979639
https://www.jetbrains.com/help/🎄storm/live-templates-list-symfony.🕛#symfony-live-templates-reference
83 2981785
🎄 тред в какую-то метаиронию на самого себя превратился? Один не может загуглить как создавать энтити через шторм, другой мускли изучает, третий изобрел Новогодний Репертуар 🎄 винда нжинкса, четвертый не может загуглить шорткаты иде и дергает рефлексию ради геттеров. Обязательно вернусь снова следить за вашими результатами аноны!
84 2981787
>>2981785
Уровень интеллекта в айти упал. В пхп соответственно тоже
85 2981938
>>2981785

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

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

https://3v4l.org/G3O1t

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

То есть, trace[0] это момент вызова функции, которая бросила исключение. А trace[(count(trace) - 1)] - непосредственно throw. Они в разных концах, хотя на деле оно идёт после другого.
88 2982878
>>2982871

> хотя на деле одно идёт после другого.

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
90 2982976
Петон фсё
91 2983039
>>2982976

>Петон фсё


И даже небо, и даже Аллах?
92 2983056
Пользуетесь мпв плеером? Это лучший плеер
93 2983401
>>2982871

>Ну и нахуя пхп дегенератам знать что такое Новогодний Репертуар?


>Пхп дегенераты: а пачиму исключение не в Новогодний Репертуаре?


Умоляю, скажи что ты тот самый слабоумный с рефлексией и геттерами, если вас несколько я веру в людей совсем потеряю.
94 2983488
Здарова мужики! Препод пригласил на стажировку в его компанию. Новогодний Репертуар Yii 2, Switch API, могу ошибаться ибо не знаю таких вещей. Попрошу посоветовать книги, курсы для продвинутого погружения в пхп и начала изучения Yii, а дальше разберусь
95 2983513
>>2983488
1) Yii2 это древний сухой кал говна. В 2к23 нахуй никому не нужен.
2) Вся инфа по фреймворку есть в блоге автора фреймворка https://rmcreative.ru/
3) Хули твой препод тебя "продвинуто" не погрузил? Пусть теперь на стажировке отрабатывает.
96 2983520
>>2983513
1. Препод сказал тоже самое
3. Это не мой препод, долго объяснять
97 2983524
>>2983520
Почитай доку (не шучу) Ларавеля. После нее доку Юии2 усвоишь буквально за вечер тру стори

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

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

А так не расстраивайся, что Юии2 - легасное говно. Потом найдешь работу на Симфони или Ларке
98 2983525
>>2983524
Как же заебала эта автоzамена, блять
99 2983528
>>2983525

>Как же заебала эта автоzамена, блять


Двачую
100 2983529
>>2983525
тричую
101 2983530
>>2983525
Хуй разберешь что означает каждая замена.
102 2983532
>>2983524
В доке ларки прям есть раздел "concepts", который прям поясняет за работу всех MVC-фреймворков и рест апи, на чем бы их не писали.

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

Вас >>2983488 нормально в вузе гоняли по SQL и задачкам?
103 2983656
Может кто-нибудь дать простое определение бизнес-логики и пример?
104 2983750
>>2983656
Если бы у бабушки был хуй, то она была бы дедушкой.
105 2984309
>>2983656

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

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

Кроме бизнес-логики, есть еще "техническая" логика, например: логгирование, логика отправки email-ов и тд, обработка ошибок.
image.png181 Кб, 498x319
106 2984811
С наступающим новым годом, анончики.
1704037477071.png3,2 Мб, 1788x1134
107 2984819
>>2984811
С наступающим!
108 2984849
>>2983656
Какой мудак вообще додумался до словосочетания "бизнес-логика", эти правила обычно уёбищно нелогичные.
109 2984923
>>2984849
Дымоходы они такие, да...
110 2984985
>>2975215 (OP)
Сап программач.
Раньше занимался веб Белый Медведьоткой за Сюрприз от Зайчика, сейчас перекатился в другую сферу и подвернулась подработка, требуется сделать сайт. Я не ебу как оценить сколько за это просить. Грубо говоря требуется сделать корпоративный сайт с несколькими страницами материалов. Также должна быть страница администрирования для изменения материалов сайта. Доступ к материалам только зарегистрированным пользователям. Собсна сколько просить за это?
изображение.png735 Кб, 693x672
111 2985019
Пиздос, с новым годом всех нас Шалунов и вкатившимся тоже
112 2985050
С наступающим, 🎄ны
113 2985541
>>2980067

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



Можно описать это проще: заглавная буква может стоять только в начале строки, после проблела, апострофа или дефиса. И проверять это одной регуляркой.
114 2985547
>>2980213

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

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

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

// переменная $a видна только внутри функции
$f = fn($a) => $a + $a;
115 2985552
>>2981227

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



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

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

Почему интерфейс? Потому, что контейнеры от разных авторов могут использовать разные исключения с разными полями и методами, и интерфейс позволяет их объединить.
116 2985555
>>2981227

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

>>2981311

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

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

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

AttemptingToRegisterServiceUsingBusyName -> ServiceAlreadyRegisteredException

AttemptToObtainOrCreateUnregisteredService -> ServiceNotFoundException
118 2985572
>>2980213

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

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

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



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

> $properties = $property->getAttributes();


переменную надо назвать $reflAttributes

> if ($methodName === 'Setter') {


... === Setter::class

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

Магия тут просто генерирует геттеры/сеттер в помеченным атрибутом полям, она не добавляет свойства динамически.
120 2985577
>>2981777

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

>>2981982

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

Было бы конечно хорошо, если бы для геттеров/сеттеров что-то было в языке.
121 2985581
>>2981982

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

>>2980213

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

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

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

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



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

Да, перед именем функции указано из какой строки она была вызвана, например вызов five() идет в 16-й строке. Это тоже где как делают, никакого стандарта нет.
124 2986015
>>2985581
Окей. Спасибо за ответы.

>Хотя это сложновато будет...


Мб когда-нибудь я возьмусь, ага!..
Пока что не представляю как это можно реализовать.
Но все-таки когда-то нужно будет разобраться как работать с аннотациями.
>>2985547

>А в мануале не написано?


Написано! Но я хотел твою версию объяснения.
Те же атрибуты тоже описаны в мануале, есть статьи по ним, но +- я начал представлять что это такое и как своими ручками что-то с ними делать только после твоего объяснения.
Когда впервые узнал о таком поведении замыканий, я ничего не понял и отложил это знание. А ты довольно-таки просто объяснил суть. Официальный мануал по php это хорошо, но только тогда, когда изначально пришел к нему +- подготовленным, потому что часто формулировка подается сухо (не упрекаю мануал, все-таки мануал должен содержать четкую и лаконичную форму, чтобы легче было поверять какие-то моменты в работе языка) и лучше сначала прочитать простое объяснение, а потом читать формальное.

>>2985572

>... === Setter::class


Как ты считаешь лучше: создавать для атрибута класс или нет? Тот же php советует, но я пока что не вижу нужды в том, чтобы под атрибут создавать отдельный класс. Все-таки в своем коде я смотрю на наличие атрибута, а не использую объекты класса-атрибута.
125 2986255
>>2976672
ссылка в гулаг
126 2988324
Только у меня появился баг в шторме, что нажимаешь коммит и пуш, шторм начинает анализировать код, а дальше ничего не происходит, как будто я кнопку не нажимал. Потом нажимаю вторую раз и он снова анализирует код и выдаёт своё тупое предупреждение, что типа там есть ошибки и стоит ли отправлять коммит. Жму энивей и только тогда происходит работа. В итоге сейчас жму кнопку 3 раза! За что мы вообще платим деньги!?
Screenshot 2024-01-04 105829.png80 Кб, 1390x544
127 2988363
>>2988324

>За что мы вообще платим деньги!?


Хуй знает за что. Лучше бы купил на эти деньги пиздатые очки.
128 2988439
>>2988363
Думаешь, кто-то в РНР-треде понимает что ты там написал по-английски в коммите?
129 2988733
Нужно ли учить бандлы Симфони?
130 2988742
>>2988733
Как ты их научишь? Они же не люди...
131 2989020
Когда стоит использовать require, а когда require_once?
Разницу между ними знаю, но не могу понять критерий выбора.
132 2989254
>>2989020

>Разницу между ними знаю


Не знаешь.
133 2989282
>>2989254
Прочитай еще раз мой вопрос. Прочитай еще раз свой ответ. Я не спрашивал, знаю я или нет.
134 2989523
>>2989020

>разницу знаю но не могу ее принять понять

135 2989564
>>2989020
Используй композер
136 2989626
>>2976646
Это все легасные параши. Кто-то там наговнякал и свинтил в туман, а ты в этом обмазываться решил.
137 2989634
>>2979971
Разве смысл веб-студии не в штамповке несложных сайтиков на коленке? Нахуй там нужны очереди, кеши и микросервисы?
Я бы никому не советовал связываться с кабанчиком, который не имея своей ниши хватается за разработку любой сложности и трясет своих разрабов за сроки работы. Это адская работенка чреватая скорым выгоранием. Такое лучше обходить десятой дорогой.
138 2989655
>>2989634
Насколько я знаю, там задачи чёкнутые. Типа там за сто тыщ надо сделать свою кастомную CMS, на которой можно делать сайты для розничной торговли и вести учёт проданного, налогов и ещё чего-то там. Хуй знает чем существующие CMS не угодили, ну надо почему-то заказчику кастомную делать при том в Мухосрани, на коленке и чтоб нубы студенты за копейки делали. Короче заказы сложные, платят мало, логики в заказах нет, они сумасшедшие. Но сгодится для того чтоб залутать наконец первый год опыта
139 2989660
>>2989655
В ИТ очень много проходимцев - надо быть внимательным и смотреть к кому идешь работать. Иначе банально выебут, высушат и ничего не заработаешь.
Когда вкатывался на каких только поехавших не насмотрелся. Часто, например, в разработку лезут какие-то левые окатыши, у которых никакого опыта в этой сфере как у руководителей. Нередко ещё и предлагают списочек требований со страницу А4 на зарплату курьера доставки.
140 2989661
>>2989660

>Когда вкатывался на каких только поехавших не насмотрелся.


Это ж шанс в нынешнее страшное время получить первый пруфнутый стаж
141 2989663
>>2989660

>зарплату курьера доставки


Вообще-то, в прошлом году они превзошли по заработку программистов
142 2989665
>>2989661
Даже первую работу надо искать более-менее внятную, а не хвататься за первое попавшееся дерьмо. Во-первых, тебя могут банально кинуть, во-вторых ты там ничему не научишься, и в-третьих тебя все равно будут на собесе спрашивать - что ты там делал, а в таких шарашках у тебя только один вариант - грести легаси говно за гроши. Такая себе заслуга для работодателя.
143 2989666
>>2989663
Ну так это смотря в какой компании. А вообще, хороший маркер появился у нас - если предлагают котлету как у курьера, то идут нахуй сразу.
144 2990978
По Симфони сам разработчик написал пошаговый туториал в виде книги, чтобы можно было ознакомиться с фреймвёрком. А по Лараверю что-то ничего подобного найти не могу. Есть документация, но это справочник, а хотелось бы учебник. Есть ли подобные текстовые ресурсы для пошагового изучения Ларавеля? Он по идее популярный, но что-то ничего найти не могу.
145 2991311
>>2985581
Как считаешь правильно поступить в этой ситуации:
Насчет того же валидатора, ага.
У меня есть главный класс - Валидатор и классы-проверятели-правил.

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

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

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

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

Пролистай, мб подойдет.
147 2991336
>>2985581
Я еще решил распилить класс-проверятель, который проверяет структуру строки.

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

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

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

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

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

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

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

И я решил так.
Как я буду регистрировать валидатор для студента в DIContainer:
сначала создам массив, в него добавлю нужные классы-правила, а потом сделаю условие, если имя содержит апостроф, фамилия содержит апостроф/хотя бы одну из скобок, то соот. классы, которые проверяют что-то связанное с апострофом/скобками, будут добавлены в массив. А потом уже этот массив в конструктор.
147 2991336
>>2985581
Я еще решил распилить класс-проверятель, который проверяет структуру строки.

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

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

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

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

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

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

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

И я решил так.
Как я буду регистрировать валидатор для студента в DIContainer:
сначала создам массив, в него добавлю нужные классы-правила, а потом сделаю условие, если имя содержит апостроф, фамилия содержит апостроф/хотя бы одну из скобок, то соот. классы, которые проверяют что-то связанное с апострофом/скобками, будут добавлены в массив. А потом уже этот массив в конструктор.
148 2991390
А как вы изучали фреймвёрки?
149 2991580
>>2986015

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



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

>>2989020

Это редко сейчас используется. require_once используется, если ты хочешь подключить файл с функциями или классами вручную. require если ты хочешь прочитать какой-то конфиг.
150 2991581
>>2991311

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

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

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



Ручками передашь в конструктор. DI не обязывает создавать все через контейнер.
151 2991582
>>2991336

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

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

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

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

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



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

> ValidSpacingBetweenCharacters =


> SymbolIsPresentBecauseThereIsAnotherSymbol =



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

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


> NumberOfSymbolIsValid



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

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



Как-то костыльно выглядит. Думаю, набор правил лучше сделать постоянным, чтобы упростить понимание кода. Иначе ты Логику проверки выносишь в код, который формирует список правил.
151 2991582
>>2991336

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

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

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

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

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



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

> ValidSpacingBetweenCharacters =


> SymbolIsPresentBecauseThereIsAnotherSymbol =



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

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


> NumberOfSymbolIsValid



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

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



Как-то костыльно выглядит. Думаю, набор правил лучше сделать постоянным, чтобы упростить понимание кода. Иначе ты Логику проверки выносишь в код, который формирует список правил.
152 2991655
Я так понял, если хочешь на фуллстек, то учишь Лару, а если чистый бэк, то Симфони?
153 2991656
>>2991655
Ты плохо понял. Хочешь фулстак - устраиваешься в обычную средне/мелко галеру. Хочешь чистый бек - натаскиваешься для трудоустройства во всякие авито.
154 2991661
>>2991656
Т.е. можно выучить Лару и устроится чистым бэком? Мне почему-то казалась, что Лару создавали, чтобы быстро разобраться и начать клепать сайты, а у Симфони более фундаментальный подход и она больше заточена под солидный бэкенд.
155 2991664
>>2991661
Монописуально. На большом проекте может быть самописное легаси с большой вероятностью. Симфони с ларками в вебстудиях - галерах.
156 2991667
>>2991664
Дак что учить для чистого бэкенда?
157 2991668
>>2991667
Базу
158 2991669
>>2991668
Postgresql?
159 2991670
>>2991669
Cormen
160 2992417
Пригласили на стажировку, сказали закинут на техподдержку. Чем обычно занимаются там?

Какие продукты делают на Took 2?
161 2992418
>>2992417
Yiij 2*
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.
163 2992500
>>2991582
Я только сейчас задумался, если я все равно проверяю год рождения и баллы ЕГЭ на адекватность - то, что они входят в валидный диапазон чисел, то, мб и не надо проверять их структуру?

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

Ага!
164 2992509
>>2991582

>можно использовать эту функцию - mb_substr_count



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

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

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

И вообще, вот ты давал определения идентификации, аутентификации, авторизации и пример. Я это понял (хотя бы как мог). Но мне трудно переложить их на свою ситуацию. У меня нет логина, а, как я понял, идентификация это о том, кто пытается войти, а как я, имея токен просто в куки, скажу кто? Ну, просто пользователь с установленной кукой. Потом идет аутентификация, является ли тот, кто пытается войти, тем, кем он себя называет. Не ответив на вопрос о том, кто пытается войти, могу ли я ответить на вопрос о том, он ли этот кто-то?
167 2992780
>>2990978
Ты хочешь сказать, что знаешь Симфони, но не способен разобраться в Ларавел, который мало того, что проще чем Симфони так ещё и построен на его компонентах?
168 2992782
>>2991661

>начать клепать сайты


>фреймворк


Для сайтов есть CMS, а фреймворки для более кастомных проектов различные апишки, crm, какие-то онлайн-магазины, саас-сервисы и тд.
169 2992784
>>2992417
Компания случайно не с VIP начинается?
philosophythroughtheagesaristotledescratesnietzschebertrandrussellcslewisliljon.jpg44 Кб, 500x667
170 2992854
>>2992689

>Не ответив на вопрос о том, кто пытается войти в айти, могу ли я ответить на вопрос о том, я ли этот кто-то?


Этим глубоким философским вопросом можно подвести итог нескольких последних тредов.
171 2992884
>>2992489

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

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

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

Например:

> Апостроф можно использовать только 1 раз;


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



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

> Использовать скобки можно только 1 раз;


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


> Если есть одна скобка, то должна быть вторая.



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

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

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


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



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

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



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

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

Или же, ты можешь сделать чуть усложненное правило с 2 регулярками, которое применяет вторую только если строка соответствует первой. То есть, проверяет положение апофстрофа если в строке он есть.
171 2992884
>>2992489

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

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

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

Например:

> Апостроф можно использовать только 1 раз;


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



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

> Использовать скобки можно только 1 раз;


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


> Если есть одна скобка, то должна быть вторая.



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

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

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


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



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

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



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

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

Или же, ты можешь сделать чуть усложненное правило с 2 регулярками, которое применяет вторую только если строка соответствует первой. То есть, проверяет положение апофстрофа если в строке он есть.
172 2992886
>>2992500

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



Верно.
173 2992887
>>2992509

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

>>2992689

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



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

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



Ты ищешь токен из куки в БД и идентифицируешь пользователя по нему. По нему же ты его аутентифицируешь, так как токен сложный и неподбираемый.
174 2992926
>>2992884
Спасибо за ответ.

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


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

>Залогинить - значит, выдать куки


Получается, что логиниться пользователь будет только 1 раз - при первом добавлении его информации в БД?
175 2993029
>>2992780
Нет, я посмотрел книгу Фабьена по Симфони и ожидал что-то подобное по Ларавелю.
176 2993110
>>2991315
Уже кидали этот учебник и его обоссали итт местные синьоры-помидоры
177 2993113
Вообще, берут ли новичков сразу на Симфони или вначале надо выучить Ларавель?
178 2993196
>>2993113
Новичков не берут. Нахуй они нужны?
179 2993202
>>2993196
Мне сказали, что наоборот в РНР берут новичков, в отличии от го
180 2993205
>>2993202
Больше двачеров слушай. Как сказал один мудрый анон: Послушай двачера - сделай наоборот.
181 2993206
>>2993205
И что ты предлагаешь? Идти в петон?
182 2993249
>>2993206
Никуда не идти, айти пузырь лопнул, сейчас даже мидлы не востребованы
183 2993270
>>2993202
В го не берут "новичков" потому что каждый пхп сеньор это "го новичек", ему только синтаксис почитать и хомяка плюшевого купить. А писать код, работать в команде над крупным проектом и все прочее он давно умеет.
Нахуй ты там усрался если ты все это не умеешь да еще и язык не знаешь?
184 2993291
>>2993206

>И что ты предлагаешь? Идти в петон?


Язык программирования - не волшебная таблетка. Он не пофиксит конкуренцию на рынке, не сделает хуй на 20 см длиннее, не исправит проблемы с самооценкой. От того что ты один язык сменил на другой, это никак не повлияет на конкуренцию. Она как была так и останется. Если я сменю автомобиль хёндай на киа, стану ли я популярным у девушек? Если ты не можешь найти работу - скорее всего ПРОБЛЕМА В ТЕБЕ, а не в языке. Проблема в том, что ты негативно мыслишь, что у тебя низкая самооценка, нет боевого настроя, ты претендуешь только на вакансии для начинающих и ты неспособен сказать - ДА! Я добьюсь своего! Я выучусь и найду высокооплачиваемую работу! Ты воспринимаешь отказы как какую-то непреодолимую стену. Хотя нужно просто пробовать, пробовать, пробовать, пробовать, пробовать, пробовать, снова и снова. Какая-то чмошная фирма мне отказала? Ваще поебать! А уйду к конкурентам, а они будут кусать локти. Ты должен быть бойцом, а не спрашивать у незнакомых кукаретников на анонимном форуме советы, вот и всё.
185 2993350
>>2993249
Мне не куда больше идти. С дипломом программиста больше никуда не возьмут.

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

>>2993291
Говорят, что в РНР уровень ниже и легче вкатиться.
186 2993419
>>2993350

>и легче вкатиться


В разработку вообще вкатиться непросто - меньше пиздунов слушай. Легче всего вкатиться в сварщики или строители, а то и вообще в моряки - платят там примерно так же, а учить сильно меньше надо.
Если ты ждёшь ламповую удаленочку через год, то ты это зря - на удаленочку сажают только опытных челов, а ты сперва будешь пахать за копейки на мутных челов пару лет.
187 2993445
>>2993113
Новичков берут в Руби
188 2993452
>>2993350

>Говорят, что в РНР уровень ниже и легче вкатиться.


Кто так говорит? Назови по именам. Это зависит от работодателя. Если ты вкатываешься чтобы просто сайты верстать на вордпрессе или битриксе, то там требования минимальные. А бывает так выебут, начинают спрашивать такие тонкости пхп, типа что такое абстрактный класс, где он используется? Или в чём отличие $message от $$message? Или есть ли в пхп множественное наследование? Какой метод используется для хеширования паролей в пхп? Тебя бы туда посадить, я бы посмотрел как ты с понурым еблищем ушёл с "легкого" собеседования.

Не надо утверждать ЧЕГО ТЫ САМ ЛИЧНО НЕ ЗНАЕШЬ. Если ты не испытал на своей шкуре, не повторяй. Иначе будешь ныть в тредах плак-плак ну вы же говорили...
189 2993456

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


А у тебя программистская вышка? Так хули ты на двачах сидел, а не стажировку выбивал? У нас еще с курса третьего всех кто хотя бы шнурки умел завязывать разобрали.
190 2993462
>>2993452
Мда блять, Дожили.
191 2993463
192 2993491
>>2993462
Проблема в ТВОИХ ОЖИДАНИЯХ. PHP может быть как очень лёгким, так и очень сложным языком. Там где конторы посолиднее, там огромные требования. Включая знание сторонних rabbitmq, elasticsearch, postgresql, чуть ли не kubernetes требуют.

Даже если ты прав, лёгкость вката компенсируются низкими зарплатами. PHP программисты получают меньше всего среди всех программистов. Даже наверно 1С-ники и то больше зарабатывают.
193 2993498
>>2993452
Если я знаю ответы на эти вопросы, то меня возьмут на РНР?

>>2993456
У нас ни кого ни куда не брали. Помню только возле деканата висела рекламка, что отличников приглашают в местную "элитную" фирму. Остальные сами искали себе работу.
194 2993505
>>2993113
Вот что мне не нравится в Симфони - это сплошная кодогенерация. Буквально на каждый чих надо писать symfony console make:... Хотя там буквально надо две строчки написать, нет надо скодогенерировать. Даже в Спринге, с которого слизан Симфони, такого нет, там как правило всё пишут ручками.
196 2993513
>>2993491
3-4 сотыги я думаю неплохо, при этом ни какие заслонки учить не надо как в гошке.
197 2993518
>>2993510
Мне почему-то сложно принять кодогенерацию. Ещё боюсь, что мой код затрётся и всё сломается.
198 2993519
>>2993513
Хочешь губозакатывательную машину? Всего за 3-4 сотыги...
199 2993522
>>2993518
Ты гитом не пользуешься? Не можешь git diff глянуть?
phpzp.jpg20 Кб, 568x100
200 2993525
201 2993528
>>2993498

>Если я знаю ответы на эти вопросы, то меня возьмут на РНР?


Возьмут! Но если ты знаешь ответы на эти вопросы, то нахуя вообще вкатываться в PHP?
Зарплаты PHP-ников самые низкие по отрасли. Любой Go-шник обладая точно таким же багажом знаний будет получать 2х. При этом считая тебя червём-пидором.
То есть, тебе это надо вообще? Если ты потом будешь в тредах ныть, что у тебя 100к и дальше не растёт.
Я не вижу особого смысла вкатываться в PHP. Тут проекты тоже не особо интересные.
Если ты можешь проходить интервью на PHP, то и на другие языки точно также сможешь.
202 2993531
>>2993522
Бывает, что в рамках одного коммита надо что-то самому написать, потом сгенерировать, потом ещё какую-нибудь фигню прикрутить и только потом коммитить.
203 2993532
>>2993525
На заборе тоже написано...
204 2993534
>>2993528
На го требуют знать микросервисы, а я их не знаю.
205 2993535
>>2993498

>У нас ни кого ни куда не брали.


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

А уж сколько желающих заполучить такой сладкий послушный петушок, который до четвертого курса продержался. У нас если че диплом получило 8 (восемь) человек из 40, и я не в их числе.
206 2993536
>>2993531
И почему нельза закомитить перед генерацией, а перед пушем
https://www.git-tower.com/learn/git/faq/git-squash
207 2993540
>>2993535

>не может там не быть


Вот как раз в шарагах она обязательна, а в универах редко бывает
208 2993550
>>2993540
Че ты несешь, это не по желанию делается. Практика как и вся программа обучения законодательно утверждается http://ivo.garant.ru/#/doclist/162:0
Ты вообще в кампус заходил, чучело?
209 2993561
>>2993550
Бля, ссылка ебаная. Вот пример https://www.garant.ru/products/ipo/prime/doc/71188178/
210 2993564
>>2993561

>Настоящий приказ вступает в силу с 1 января 2016 года

Screenshot 2024-01-08 180415.png496 Кб, 1498x1628
211 2993575
>>2993564
Бля, ебанько, они там в министерстве по твоему че, перерывчик на пиво что-ли сделали?
212 2993577
>>2993575
Ну не было у нас ни какой практике, а дипломы выдали государственного образца. Мне лично декан вручал на торжественной церемонии. ВУЗ один из лучших в моём регионе.
213 2993583
>>2993491
Я имел ввиду, что это пиздец базовые вопросы, и я бы на собесе доебывал другим
214 2993597
>>2993577
Ну не было и не было. Значит ты молодец, все правильно сделал. Сейчас на изи со своим охуенным дипломом вкатишься.

Ты чего-то такого ждешь? Ну пинал ты хуи четыре года, декан что-ли за тебя должен был думать нахуя тебе эта корка ебаная была нужна? Можешь в резюме написать как тебе декан с халявным опытом работы поднасрал, паскуда.
215 2993623
>>2993110
Можешь вкратце написать что в нем не так?
216 2993628
>>2993623

> что в нем не так?


Не знаю, мне так на дваче сказали
217 2993658
>>2993623
Сам посмотри. Там каждая страничка: читаем тему в документации, а теперь примените эти знания в своём проекте. Это не учебник, а просто индекс по доке с набором тупых заданий без всякой проработки. Халтура в общем.
218 2993717
>>2993658
Так в доке блядь примеры кода и написаны. Буквально целые классы прописаны.
Не, ребят, таким имбецилам даже кассу в пятерочке не доверят, только грузчиком.
219 2993732
>>2993717
Практика показывает, что важнее быть не супер умным, а старательным. Как раз вот умники и не доходят до конца и бросают программирования, а старательные тупки шаг за шагом осваивают и становятся программистами на 300-400 тыщ
220 2993744
>>2992784
Сам не знаю, могу лишь сказать что город начинается с А
221 2993750
>>2993732

>Практика показывает, что важнее быть не супер умным, а старательным


Ну так старательно читай доку, там все про фреймворк написано. А лучше старательно наизусть выучи. Хуй с ними с супер умными, они в пхп не вкатываются. Надо как-то вкатунов среднего ума догонять.
222 2993755
>>2992418

>Yiij 2*


Никаких не делают, легаси говно.
223 2993758
Дак что? Никто не посоветует курс по Ларе хороший? Вот в джаве обычно все советуют Алишева с ютуба, а что в пхп?
224 2993763
>>2993758
Мудила, открой доку и почитай. Там чтива на пару вечеров. Какой нахуй курс, любая обезъяна на ларавеле веб страничку сделает. Там и делать нихуя не надо - 90% кода генерится.
225 2993775
>>2993510
В разы меньше надо писать. Даже миграции пишут ручками. Ещё в Симфони целые интерактивные консольные утилиты созданы, где надо отвечать на тупые вопросы.
226 2993779
>>2993744
Отпишись если совпало
227 2993792
>>2993744
Не совпало, я с города К
228 2994029
>>2992884

>Или же, ты можешь сделать чуть усложненное правило с 2 регулярками, которое применяет вторую только если строка соответствует первой. То есть, проверяет положение апофстрофа если в строке он есть.


Не знаю, так ли я тебя понял.
Пытался разобраться в том, как работают условные подмаски.
https://3v4l.org/pcc9u
Вроде работает так, как мне надо.
Но я очень плохо понял как писать такие регулярные выражения.
229 2994301
Подскажите что делать в этой ситуации.

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

Сейчас часть этих файлов связаны с одним проектом.
Но я хочу добавить новые.
Как мне сделать так, чтобы каждый проект лежал в своей папке отдельно, но при этом это бы не сломало мне работу сервера?
230 2994326
Добрый день, пхп-анон!
Начну с тихого вопля непонимания:
ну почему, туды его в качель, в 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-запрос? Или не Санктум вообще?
231 2994342
>>2994326
Все проверки на авторизацию и csrf делаются в мидварах ларки и опциональны - могут включаться или отключаться для конкретных роутов.
232 2994375
>>2994342
Кстати, это я тоже делал, но тогда ->post() получается пустой!

Ну и это небезопасный путь, как я понимаю, не очень рекомендованный, когда все это в общем доступе
233 2994377
>>2994375 >>2994342

Под общим доступом я имею ввиду продакшен, конечно, в смысле, нормальное функционирование после релиза.
234 2994381
>>2994377
Тогда непонятно что ты хочешь. Ты же сам сказал что тебе авторизация не нужна. CSRF предназначен для защиты роутов авторизованых пользователей. Если нет авторизации, то каждый посетитель может делать что угодно бай дезин.
Если ты хочшь защитится, чтобы боты не постили, CSRF для этого не предназначен.
Обычно нет необходимости специально получать CSRF токен, потому что он живет в куках
235 2994391
>>2994381
Окей, допустим, но это не отменяет того, что при выключении csrf для конкретных роутов $request->post() пустой, как это фиксится?
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.

237 2994398
>>2994395
Если ты делаешь прубличное апи, например, то какая к ляду CSRF
238 2994414
>>2994398
Нет, не публичное, сайт будет публичный, общедоступный
Просто задача для меня такая: изучить laravel, дошел вот до post-запросов и очень сильно споткнулся. В принципе начал с работы с базами, потому что фронт для меня это вью, а поскольку вью работает с ларавелем так себе, то соответственно ларавелю остается функционал работы с базами, в основном (на моем текущем уровне).

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

>Что ты хочешь получить, что делаешь.


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

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

вот и весь сказ
239 2994418
>>2994395

>CSRF отправляется вместе с кукисами и он невидим для жс.


В Ларке есть axios специально для работы с ажаксом, он цепляет все нужные данные автоматически - только в конфиге ему указать надо.
Мне приходилось и без аксиоса делать запросы с жтими токенами - я их клал в meta страницы и оттуда доставал уже жсом. Но лучше использовать аксиос - просто меньше секса с мозгом изкоробки.
240 2994422
>>2994414
Хидер X-CSRF-Token, а не CSRF-Token
Но как я тебе сказал что обыно не нужно это делать так как CSRF токен в нормальных случаях содержится в кукисах

Вангую что у тебя фронт отдельно, а бек отдельно. По дефолту ларавел на такое не настроен
241 2994424
>>2994418
Да ненужен никакой каксиос, куки браузером отправляются если получены с того же домена
242 2994487
>>2994424
Куки отправляются, csrf - нет.
243 2994497
>>2994422

>Вангую что у тебя фронт отдельно, а бек отдельно.


Именно так, чего ванговать, я это с самого начала написал >>2994326

> По дефолту ларавел на такое не настроен


И как настроить? Вот же в чем вопрос

Как я понял, вся документация ларавеля о том, что фронт отрисовывается ларавелем же, а у меня то он отдельно
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.

245 2994502
>>2994497
Ну тогда правильный хидер X-CSRF-Token, а у тебя на картинке отправляется CSRF-Token
246 2994520
>>2994502
Кстати ты начал с хуевого примера изучать ларку. На 99,9% проектах на ларке используются серверный роутинг на ларке, а жс фронтенд загружается обычно в шаблоне. Nuxt очень редко используется, обычно в проектах максимально laravel way придерживаются, например inertia js использют, а не nuxt
247 2994559
>>2994326
Не думал роутинг прописывать в файле api.php, если ты на эти роуты запросы с отдельного фронта кидаешь? Файл web.php, как мне кажется, предназначен для приложения которое строится полностью на ларавеле(то есть отдельного фронтенда нет), могу ошибаться.
248 2994561
>>2994559

>Не думал роутинг прописывать в файле api.php


Ну и соответственно обращаться к апишным роутам
249 2994566
>>2994326

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

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

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

>>2994381

Неверно. CSRF предназначен для исключения ситуации, когда злоумышленник отправляет запросы от имени ползователя. Аутентифицирован пользователь или нет - не важно.
250 2994568
>>2994381

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



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

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



Неверно. Обычно токен есть в куке, недоступной для JS, и одновременно в теле страницы. JS берет токен и тела и отправляет в запросе, а сервер сравнивает токен в куке и в теле запроса. Также, токен может не храниться в куке вообще, а храниться, например, в сессии.
251 2994577
>>2994422

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

Единсвтенная кука с CSRF-токеном не защищает от CSRF. Токен должен дублироваться в теле запроса или в заголовке.
252 2994580
>>2994566
От какого имени? От Васи или Пети? Как узнать Вася это или Петя без аутентификации?

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

CSRF заключается в том что пользователь аутентифицирован на сайте и авторизован на какое-то действие, а злоумышленник посылает авторизованный запрос с фишингового сайта, куда зашел пользователь.
253 2994583
>>2994580
Ты как будто csrf токен с jwt каким-то путаешь.
254 2994585
>>2994577
HTTP only same site кука как раз лучше всего защищает, ты не сечешь
255 2994589
>>2994583
Нет ты как раз. JWT используется для авторизации действий, а CSRF токен при наличии авторизации от CSRF уязвимости
image.png57 Кб, 1892x625
256 2994603
>>2994502
Вот кстати это помогло, ошибка исчезла, но теперь другая проблема, почему-то ->post() пустой! В на сервер в body отправляется объект, а в итоге там ничего (последний вывод консоли это собственно return из метода обработки поста контроллером)

Там почему-то в принципе $request пустой! хоть ->input() хоть ->post()
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
258 2994658
Добавляю картнки с кодом к >>2994603
Вроде все дб просто (не обращайте внимание на мешанину из консольных выводов, это для создания картинок нужно, чтобы проще объяснять что где и как)
259 2994669
>>2994657
Это все круто и легко, если фронт и бек оба на Ларавеле, а если фронт это хтмл+жс -- то ни разу не легко! До глупого сложно, я бы сказал
260 2994673
>>2994657
Но я походу обосрался в том что ларка не делает куку http only так что однохуйственно чем отпавлять токен
261 2994674
Меня вот в Ларавеле больше всего раздражает, что набираешь Something:: и видно только часть методов, хотя на самом деле их там в разы больше. Фасады типа облегчают работу с фреймворков. В каком месте они её облегчают? Как по мне только усложняют всё своей магией, что метод высирается из ниоткуда.
262 2994695
>>2994674
Эти методы описаны в php доке фасада, оснальные методы ты не должен использовать, если не хочешь чтобы при обновлении был риск поломатьсся, потому что это внутренняя кухня фреймворка.
263 2994777
>>2994500
У тебя в тексте речь идет о Response - ответе от фреймворка, а ты посылаешь post-запрос с уже ранее сгенерированным csrf.

Тебе не доки Лары читать надо, а сперва базу бы изучить https://qna.habr.com/q/530168
264 2994781
>>2994669
Просто положи перед запросом на сервер нужную куку в поле где его ищет миддлвар проверки CSRF токена, если такой любитель ручного пердолинга. Все должно работать.
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) Проблема когда домены фронтенда и бекенда разные тогда надо токен через специальную ручку доставать и класть в хидер Тогда и твой каксиос самостоятельно не добавит.
266 2994905
>>2994786
Да что ты мне про то, что Лара на фронт присылает заладил? Речь идет об обратном процессе когда данные с клиента идут. Пост перечитай ещё раз.
267 2994926
>>2994905
Ну а по твоему как кукисы работают? Кукисы пришли одним реквестом в респосе в хидере, теже кукисы ушли следующим реквестом в хидере. Я тебе ссылку привел, что ларка из кукисов может токен читать. Я всегла fetch использовал, axios удалял как лишнюю хуйню. Что заголовки, что кукисы, эта вся хуйня все равно в хидере запроса передается. О чем споришь?
268 2994952
>>2994926
Подытожу
У чела который вопрос задавал была проблема не в аксиосе, а т том что он название хидера перепутал, но так как у него фронтенд и бек на разных доменах, то кукисы не отправлялись на бек, а хидер был неправильный и ларка не нашла токен. Если бы у него был один домен, то он бы не заметил что у него хидер неправильный, так как ларка нашла бы токен из кукисов А ты влез со своим акисосом, что надо через него запросы делать.

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

Хз значит я забыл что в фетч хидеры подставлял...
273 2995633
>>2994952
они оба у меня на localhost пока, разве это разный?
или доменом в случае localhost считается следующая папка?
фронт лежит в /test, бэк в /back (оба в htdocs само собой)
image.png77 Кб, 948x624
274 2995639
Короче, этот отстой все равно не работает без токена
А с токеном работает только если он был создан еще одним запросом ДО основного, что довольно глупо само по себе, как мне видится.
Не понимаю, что делать.

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

Ибо когда я делал фронт для других проектов, там никаких дополнительных запросов к бэку не было и все было без авторизации. Просто сразу из формы в базу, из формы в базу...
275 2995641
>>2995633
Не считается, хуй знает что у тебя там, телепаты в отпуске, если разберешься сам, это тебе больше пользы принесет, чем когда тебе подскажут.
276 2995642
>>2995639
Это не глупо, потому-что токен запоминается в сессии. Глупо - это делать пост запросы без гет запросов
277 2995673
>>2995641
>>2995642
При чем тут телепаты, все написано русским по серому.

>Глупо - это делать пост запросы без гет запросов


А почему? То есть, серьезно спрашиваю.
278 2995680
>>2995673
потому-что ты используешь web.php для роутов
если ты хочешь RESTfull API в ларке для этого есть api.php
В api.php нихуя нет мидваров ни сессий, ни токенов все как ты хочешь.
279 2995681
>>2995680
потому что*
image.png139 Кб, 1436x982
280 2995686
Еще такой вопрос:
Вот эта часть документов ларавеля, она про что? Про какое место? потому что код выглядит как js, но секция то не подходящая, да и вокруг примеры странные, о чем это вообще, где это писать и что должно происходить на конце /sanctum/csrf-cookie ? Или там происходит что-то автоматическое? Или надо где-то там что-то делать? втф
281 2995701
>>2995680
Вот с этого стоило начинать! Очень ценная информация, благодарю.

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

зачем мне пхп шторм если из пхп съебался несколько лет назад у меня ларка только для одного своего пета осталась, который я медленно колупаю
287 2995859
>>2995834
в гошку?
288 2995872
>>2995832
Чего толку, что писали, если там это тоже есть, та же самая 419 ошибка! Что в изначальном посте >>2994326

>>2995710
Может сама 419 ошибка не про это?
289 2995881
>>2995872
Ошибка потому что ты к старому эндпоинту обращаешься. Ты в api.php добавил ручку, а в запросе в урл префикс /api не добавил

мимо ванга
290 2995921
>>2995881
То есть если был запрос localhost/testlaravel/public/intro/
то теперь должен быть localhost/testlaravel/public/api/intro/
что ли?

Или чего?
16234327005470.png663 Кб, 700x541
291 2995949
292 2995955
>>2995949
Именно так!
293 2996045
Там вышла книга Дронова по Ларавел 9
294 2996046
>>2996045
где скачать
295 2996049
>>2996046
Там же, где и остальные книги
296 2996178
Реально ли устроится на РНР без опыта на чистый бекенд, где не надо фронт знать и делать?
297 2996405
>>2996178
Бля, а неплохой план: выбрать что-то одно что ты не знаешь и не умеешь делать.
298 2996484
>>2996405
Я потом в го буду перекатываться и мне не хочется учить фронт
299 2996724
>>2996178
10 лет работаю на пхп, к фронту прикасался пару раз охуеть как давно (2 строчки в хтмле правил)
image.png27 Кб, 1029x516
300 2997072
>>2995754
Ну вот у меня в целом все также как у тебя (только вместо функции в роуте - вызов контроллера)

Может дело в том, что у меня public до сих пор? Вообще начало 404 показывать, хотя я всего лишь добавил /api
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 без всяких пабликов

ты даже в апаче не умеешь рерайт настроить в своем ксампе хуямпе
302 2997123
>>2997118
Если нужна БД то и MySQL и PostgreSQL устанавливаются инсталятором и спокойно работают. Но мог бы для обучения SQLite использовать. Даже сеньки ее для прототипирования юзают.
303 2997194
>>2997118
>>2997123
Поскольку я изучаю - то есть знаний не ноль, но мало-мало - то я выбрал один из распространенных путей, не имея понятия о возможных проблемах, и, да, твое предположение про базу было верно, два в одном было ок-ок, вот и выбрал

Не ругайся, пожалуйста
stupidstorm.jpg9 Кб, 490x128
304 2997543
Как заставить тупой шторм ставить точки с запятой как надо со смещением? Даже если нажимаю перед точкой с запятой Backspace, то тупой шторм переносит её на предыдущую строку, а не смещает на один таб назад.
Они там в жидбрейнс про PSR вообще слышали?
goodvscode.jpg9 Кб, 388x96
305 2997574
>>2997543
Попробовал в VS Code. Всё отлично ставится куда надо. Ну и какой редактор куда лучше теперь? Платное, кривое, лагающие поделие от жидбрейнс, или бесплатный, легковесный, замечательный продукт вс код?
code-style.png390 Кб, 3431x1803
306 2997576
>>2997543
Бля, да хуй знает как. Может быть блядь в НАСТРОЙКАХ? В тех самых неебически подробных настройках где есть параметр на каждый пердежь и в реальном времени видно как это влияет на код? В тех самых настройках где можно в один клик выбрать целиком пресет под любой нужный формат?
307 2997584
>>2997576
Это должно всё быть уже настроено из коробки? За что я тогда плачу такие деньги? Самому за них ещё настраивать?
Screenshot from 2024-01-11 15-30-37.png58 Кб, 910x786
308 2997614
>>2997584
Так оно и настроено. То что ты хочешь дрочить вприсядку это твои проблемы. Перенастраивай и дрочи.

Мне вот кодсниффер настроенный по всем псрам говорит что точка с запятой на новой строке это признак дегенерата. И я с ним в целом согласен.
309 2998234
А что не так с mysql 8.2?
Ебался-ебался вчера с ней несколько часов - не открывалась консолька, сегодня решил снести и поставить 8.1 - все прекрасно работает.
310 2998363
>>2998234

>Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит

311 2998539
Мужики делитесь плагинами и темами для шторма
gachi-theme.png2,7 Мб, 3828x2159
312 2998584
313 2998602
>>2994029
>>2992884
Я понял, что у меня все работает не потому что я понял условные подмаски (я их не понял), а потому что если убрать лишнее, то это регулярное выражение находит то, что мне нужно.
В итоге я составил регулярные выражения:
/^[^']+'{0,}[^']+$/ui = проверяет, что апостроф один.

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

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

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

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

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

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

Кто всерьез (за деньги) этой хуйней занимался, то давно понял, что емейл это строчка с собакой (@) и максимальной длинной, на которую тебе не похуй (от 100 до ♾️). Все.
316 2998645
Какие темы алгосиков в основном на собеседовании в продукт? Слышал только про работы со строками. Есть ли подходящий сурс этих задачек?
317 2998647
>>2998618

>Свит саммер чайлд, завязывай теребить свои коротыши и обрубки. Вот так выглядит правильная регулярка для валидации мыла https://pdw.ex-parrot.com/Mail-RFC822-Address.html


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

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


Ага, сосачую.
318 2998667
>>2992887

>Залогинить - значит, выдать куки.


У меня есть файл utils.php, где есть функция, которая генерирует токен.
Мб мне и не нужен класс авторизации?
Вместо метода "залогинить" будут строки: вызов функции, которая генерирует токен, установление куки самим контроллером.
Тогда остается один метод - определить текущего пользователя.
Не жирно ли одному методу, в частности этому, целый класс?
Мб сделать метод в TDG, чтобы он принимал токен и возвращал объект студента? Контроллер будет обращаться к этому методу у TDG, а потом уже что-то с ним делать.
319 2998837
Читаю книжку Фабьена по Симфони и буквально от каждой главы у меня жестко бомбит. Действительно такое говно делают в реальных приложениях? Вместо пары строчек на РНР или html, он наворачивает всякие бандлы-хуяндлы, тянет 100500 пакетов через композер, а в конце ещё наворачивает npm с кучей фронт-говна. Я уж даже молчу про подключение ко всяким левым сервисам.
Ещё постоянно сталкиваюсь с багами, хоть и пытаюсь точно следовать книге, но постоянно возникают ошибки, о которых не упоминается. Какие-то сам догадываюсь как пофиксить, а какие-то вообще не понимаю. Например, его "замечательный" дизайн так и не смог увидеть, потому что фронт-говно не завелось, а вывалилось с ошибкой. Из-за чего ошибка - не пойму, не фронтендер и ничего в этом не смыслю.

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

>Вместо пары строчек на РНР или html


Пары строчек с чем? С самписной орм?
Цитата блядь из книги:

>Чтобы не изобретать велосипед, давайте воспользуемся Symfony-компонентом String, который не только облегчает работу со строками, но и содержит слагер


Ломающие новости: в книге по фреймворку учат пользоваться фреймворком. Да ну нахуй.

>подключение ко всяким левым сервисам


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

Короче, вкатусик. Вместо дебильного вопроса "зачем нужны фреймворки и либы" тебе нужно задаться вопросом "какого хуя я не могу повторить все в точности как описано в инструкции". Никакая книга не научит тебя внимательности, дисциплине и не даст способность концентрироваться на проблеме пока ты не найдешь её причину и не решишь. Баги и ошибки будут всегда, и некоторые придется искать неделями по восемь часов в сутки. Подумай лишний раз, нахуя оно тебе надо.
321 2999216
>>2999193

>спиздил


Она бесплатно выложена на сайте Симфони: https://symfony.com/doc/6.2/the-fast-track/ru/index.html
322 2999222
>>2999216
И это меняет... что? Кто заплатил, то получил ништячек, кто не заплатил тот не получил.
323 2999237
>>2999193

>че там он там такое написал


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

>учат пользоваться фреймворком


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

>деплоить, админить и прочую красноглазую хуйню


Умею, но не хочу. Я на программиста учусь или на сисадмина? Тем более многие сервисы сейчас недоступны в РФ. Да и сам Симфони пишет про поддержку сам знаешь какой страны.
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, так как загрузка фотографии не обязательна


Даже хз какой тут диагноз. Какая-то дикая смесь тупости наглости и чсв.

>Я хотел нащупать эту грань фреймворка


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

>Умею, но не хочу.


Ну не хоти. От твоего не хотенья хтмл и жс сами в браузер не попадут.
ну и пожалуйста.webm1,2 Мб, webm,
480x360, 0:08
325 2999387
>>2999289
Да и пофиг на ваш РНР. Пойду лучше обратно в го. Там у меня всё получается. Пусть там вакансий и меньше, но нет этого говна с фреймворками.
1400431726bukvar-1.jpg72 Кб, 630x811
326 2999420
>>2999387
Рекомендую пойти обратно в пикрелейтед. Книги по го тоже надо уметь читать и понимать
327 2999476
>>2999420
А ты - злая вонючка! Вот!
1fee7b3a1b2709a3f7bf54e95654608d.jpg117 Кб, 1200x797
328 2999488
>>2999476
Давай тогда уже мимо яслей сразу обратно в отцовскую залупу.
И постарайся учесть все сложности программирования и максимально быстро стечь по ляжкам мамки.
329 3000087
>>2999488
Хотел бы я сейчас оказаться на пикриле
330 3001768
Хочу установить гит на 11-ую винду по этой ссылке: https://github.com/git-for-windows/git/releases/download/v2.43.0.windows.1/Git-2.43.0-64-bit.exe

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

Посоветуйте что-нибудь, аноны.
331 3001787
>>3001768
Я смог скачать, но почему эта залупа загрузилась только тогда, когда я подключил впн?
333 3001985
>>2993758
Ларакасты на рутрекере. Там есть вводный курс по Laravel 8 - с него начни
334 3003138
Я не испытывал никогда большей эйфории чем сейчас. Делал вход в приложение, причем я уже достаточно продвинуто знаю пыху. В кишках использовался метод password_verify. Все последние 11 часов я беспрерывно искал все способы разобраться в чём проблема. Оказалось, что жёстко заданные пароли (через SQL запрос) воспринимаются как с двойными кавычками, а необходимы динамичные одинарные. Поэтому все что нужно было зарегистрировать юзера через интерфейс и потом входить в него. А я 11 часов долбился в sql. 10% кода, 90% дебага.
335 3003139
>>3003138
6 часов дебажил до этой проблемы, а 5 часов я копался до этого метода, потом проштудировал stackoverflow почему возвращает false. Признаться честно по большей части я страдал хуйней, а надо было просто пройтись по пути вызовов. Боялся что придётся менять что-то в кишках и искал обходные новые пути
336 3003295
>>3001985
Они разве на русском?
337 3003397
>>3003295
За русским языком тебе в 1 ASS
338 3003398
Посмотрел парочку видео-гайдов по Симфони и ещё больше убедился, что книга Фабьена по Симфони - говно. Вместо того, чтобы описать свой фреймворк, показать основные фишки, он рассказывает про сторонние сервисы, которые ни как не относятся к Симфони.
339 3003416
>>3003398
Называть эти секретные "сторонние" сервисы ты конечно не будешь.
340 3003435
Как подключать css внутри html, если у меня все запросы перенаправляются на index.php, а тот подключает только контроллеры, т.е. php?
341 3003437
>>3003138

>Оказалось, что жёстко заданные пароли (через SQL запрос) воспринимаются как с двойными кавычками, а необходимы динамичные одинарные.


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

1) Что такое "жестко заданные"? Это из какой документации термин?
2) Как вообще "задать" пароль (через SQL запрос)? Я думал что в базе хранится хеш (строка). И мы просто проверяем что хеш от введенного сейчас пароля такой же. А тут чего?
3) Что значит "воспринимаются"? Это у кого навык "восприятие" недокачан у базы или у пхп?
4) Что такое "динамичные" кавычки? И почему ты так назвал именно одинарные?
5) А главное, причем тут вообще кавычки? Вся работа с SQL должна происходить через PDO и все твои данные добавляться в запрос через параметры, а там никаких кавычек нет.
Screenshot 2024-01-15 132536.png176 Кб, 1702x812
342 3003438
343 3003442
>>3003438
Норм ты унизил этого нубаса
344 3003457
>>3003442
Пошел нахуй, пидорас.
345 3003458
>>3003438
Хуйню скинул, читай нормально.
346 3003478
>>3003458
Ты тупой? Ты или указываешь путь к css файлу или идешь нахуй. Кого ебет что ты уебищно настроил веб сервер и все запросы на index.php переводишь? Ну делай так чтобы Index.php мог css файл отдать. Или не делай.
Ссылка на css файл есть - стили есть.
347 3004426
Плейсхолдеры используются только тогда, когда нужно вставить данные в БД?
348 3004471
Можно ли использовать суперглобальную переменную $_COOKIE в html, если от того, установлена кука или нет, зависит логика отображения страницы?
Если кука установлена => отобразить такую надпись
Иначе => такую надпись.
В таком контексте можно обращаться к суперглобальным переменным в Представлении?
349 3004479
>>3004426
Надо взять за правило использовать всегда

>>3004471
Нельзя. Логика должна быть отделена от представления. Лучше пробросить свою переменную-флаг в представление и через неё отображать или нет надписи. Во фреймвёрках такие переменные группируют в сущности ViewModel и таким образом представление зависит только от них.
350 3004496
>>3004479

>Лучше пробросить свою переменную-флаг в представление


Даже если я пишу так:
isset($_COOKIE['someCookie'])?
Ты предлагаешь завести отдельную переменную и давать ей значение в соответствии с тем, установлена кука или нет?
Например:
кука установлена => $someVariable = 'такая-то надпись'
кука не установлена => $someVariable = 'другая надпись'.

В представлении:
<p><?= $someVariable ?>
351 3004511
>>3004496
Нет, переменная должна быть просто флажком (булевой) в данном случае.
<?php if (isSomeThink): ?>
такая-то надпись
<?php else: ?>
другая надпись
<?php endif; ?>
352 3004517
>>3004496
Ты вообще учился у Альберта? Советую пройти его курсы, тогда многие вопросы отпадут. Он показывает как следует программировать.
353 3004543
>>3004517
Кто это
354 3004544
>>3004511
Окей, спасибо, анон
355 3004547
>>3004543
Альберт ProfIT Степанцев
Можешь написать ему: был пиратом, но хочу учиться, и получишь скидку на курсы.
356 3004616
Я чего-то не понимаю в этой жизни, или требовать установки readonly свойств в конструкторе это хуита какая-то?
357 3004771
>>3004479
Вот такие вот дегенераты и несут с сурьезным ебалом какую-то чепуху.

>Нельзя. Логика должна быть отделена от представления.


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

>сущности ViewModel


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

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

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

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

ViewModel - это то, что ты передаёшь как array $dataToShow. Как правило она отличается от обычной модели и требует дополнительных параметров, чтобы отобразить контент.
359 3004791
>>3004783

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


>выдает "истину", источник - ОБС


Самокритично
360 3005015
Почему в Ларе модели описываются в миграциях, а сами модели оставляют пустыми?
361 3005043
>>3005015
А нахуй нужны миграции в моделях?
И модели там не пустые, касты, скоупы, отношения, например
362 3005046
>>3005015
В миграции описывается не модель, а схема
363 3005054
>>3004616
Смотря в каком классе. В модели/сущности - хуета, т.к. данные там могут меняться в рантайме.
В сервисе каком-нибудь или ДТО - нормальная тема, ибо мутабельные ДТО - зло, а в сервисах изменять зависимости после сборки - тоже плохо.
364 3005058
>>3005015
В миграции ты описываешь схему таблицы в БД.

Модель остаётся пустой из-за того, как в Элоквенте (дефолтная ОРМ в Ларавеле) устроены модели. Там за счёт родительского класса модели происходит инициализация всех полей. В самой модели там обычно только методы с логикой описывают (ибо Элоквент - ActiveRecord)
1705423832012.jpg29 Кб, 496x184
365 3005328
Привет, есть проблема с Open Server-ом, понимаю что не по теме PHP вопрос, но может поможет кто.

Проблема пикрил, винда десятая, раньше программа запускалась без проблем, перезагружать пробовал.
Подскажите нуфагу что конкретно нужно сделать.
366 3005335
>>2994674

>В каком месте они её облегчают


ни в каком, перекатывайся на симфонию/не используй лару нигде кроме роутинга
367 3005349
>>3005328
И вообще, в чём может быть корень проблемы? Что-то мешает работе локального сервера?
368 3005354
>>2999387

>но нет этого говна с фреймворками.


да, его там нет, только тебе надо уметь собирать аналоговнет симфонии из говна и палок
369 3005366
>>3005015
потому что лара это пхп-аналоговнет рельс
370 3005460
>>3005328
А что непонятно? Все же написано. OpenServer пытается изменить файл hosts, но не может. Потому что кто-то прямо сейчас с ним работает. Это может быть вирус, антивирус, да хоть не закрытый процесс того же опенсервера.

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

Как вариант можно в настройках OpenServer запретить редактировать hosts, но этот вариант хуевый. Потому что во первых ему это надо для нормальной работы, а во вторых все и так должно нормально работать.
371 3005734
>>3005460
Большое спасибо за ответ.
Я сейчас комп включил, ради интереса запустил Open Server, и он начал работать нормально. Хз с чем это связано, потому что я его уже перезапускал несколько раз и всё равно вылезала эта ошибка. Если вдруг возникнет та же проблема, то воспользуюсь твоей утилитой которую ты скинул. Спасибо за помощь.
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() : ' ';
373 3006628
Коданы, нужна небольшая подсказка про Ларавель. Помогите, пожалуйста, разобраться с тем, как относятся друг к другу файлы .env и database.php (который в папке config)

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

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

Почему спрашиваю: вот в файле датабейс я написал 1) конфиг для локальной машины, чтобы тестить пере загрузкой на хостинг и 2) конфиг хостинга -- с тем, чтобы поменяв только DB::connection('name') легко и просто переключаться между соединениями - а в итоге использовался только енв и его пришлость полностью править руками... что за чепуха?
374 3006766
Поставил бесплатный плагин для симфони в шторм и появилось удобное меню создания проекта как в идее для спринга. Но при этом стоит платный плагин для ларавеля и нифига такого нет. За что мы плотим этим дармоедам деньги!?
375 3006806
>>3006271

>isset($someObject->someProperty) ? $someObject->getSomeProperty()


Наркоман, тебя ничего не смущает?
Ну типа ты проверяешь одно, а выводишь другое. Ниче в башке не щелкает?
Я уж не говорю что сто лет как упрощенный синтаксис для этого существует:
<?= $someObject->getSomeProperty() ?? '' ?>
376 3006844
>>3006628
Пароли не хранят в кодовой базе. Потому что там их может увидеть по сути кто угодно. На реальном сервере пароли задаются админом через переменные окружения ОС. Соответственно видеть их может только админ сервака. И твой код должен все пароли, секретные фразы и префиксы именно оттуда и получать.

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

Короче:
1) Твои девелоперские пароли должны храниться только в локальном .env файле и ни в коем случае не в гите.
2) Получать пароли внутри кода нужно только через переменные окружения.
3) Ни в каком .php файле офк никакой секретной информации быть не должно.
377 3006846
>>3006766

>бесплатный плагин для симфони в шторм и появилось удобное меню создания проекта


>платный плагин для ларавеля и нифига такого нет


Не дают делать говно. А минусы будут?
378 3007369
>>3006844
А как Ларавель получает пароли из переменных окружения? Ни какого такого кода там не видно
il570xN.50540383981kr3.webp39 Кб, 570x512
379 3007397
380 3007786
>>3007397
Хелпер env тянет значение из .env файла
382 3007817
>>3007808
Хороший.
Все бы так копали.

Очевидно что в конечном счете содержимое .env попадает в конфиг. Но важно как оно туда попадает. Код обращается к абстрактному Repository - хранилищу переменных окружения. А откуда в это хранилище эти переменные попадают - с хоста или из файла дело десятое. Сам код от способа их получения не сломается и пароли никуда не утекут.
383 3007822
>>3007817
Сломается админ, когда увидит что пароли на гитхабе хранятся
384 3007824
>>3007822
А если надо сделать пет-проект, чтобы работодатель мог скачать мой проект и сразу запустить, а не создавать всякие доп. файлы?
385 3007825
>>3007824
Если работодатель увидит что ты пароли в открытом доступе хранишь? Думаешь он перезвонит?
386 3007832
>>3007825
Дак ему придётся откуда-то .env взять.

Вообще, это как-то тупо, что такой важный файл по сути исчезает из репозитория. Допустим я скачаю свой проект на другой комп и он не запустится, потому что этих файлов нет, а быстро их фиг создашь. Надо где-то взять такой же как образец.
На мой взгляд сделали бы маленький файл password, где всего одна строчка - сам пароль, а не сложную такую структуру, которую не повторишь по памяти.
facade.jpg7 Кб, 302x72
387 3007839
Даже с платным плагином для лары фасады всё равно не автокомплитятся и шторм считает их ошибкой, подчеркивает жёлтой линией. Как сделать, чтобы это всё автокомплитилось и не подчёркивало жёлтым?
389 3007849
>>3007824
Можно поместить в корневую директорию скрипт, который просит указать имя\пароль, после чего создаёт env файл и запускает проект.
Хотя не уверен, насколько такая практика корректна.
390 3007851
>>3007844
Не программист же должен развешивать это всё? Почему сам фреймвёрк не добавляет эти теги? Почему плагин ничего не делает? Они вообще-то берут деньги за него, а пользы от него пока я не увидел.
В платной идее есть полная поддержка спринга, а шторм ни черта нет. Походу жидбрейнсы хуём по губам водят пхпышникам и берут деньги за редактор кода.
Мне просто есть с чем сравнивать и я вижу, что тут полное надувательство.
391 3007863
>>3007824
>>3007832

>Надо где-то взять такой же как образец


>где-то


https://github.com/laravel/laravel/blob/10.x/.env.example

>Допустим я скачаю свой проект на другой комп


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

В папке с проектом должен лежать docker-compose.json и все что человеку, который хочет твой проект запустить надо сделать это выполнить docker compose up -d . Все.
392 3007878
>>3007863
И как докер решает проблему публикации паролей? Ты там тоже описываешь все параметры базы как ссылки на секретный env файл, только он там другого формата. И тот, кто скачает, тоже должен создать свой env файл, прописать свои пароли и только тогда docker compose up -d корректно отработает.
393 3007895
>>3007878
Пароли и не публикуют. Их админ генерирует, когда проект деплоит. Тогда он передает докеру окружение через свои скрипты или использует docker secret. Задача програмиста только говно в проект не хардкодить
394 3008138
>>3006806

><?= $someObject->getSomeProperty() ?? '' ?>


У меня от этой хуйни вылезает ошибка:
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in
395 3008557
>>3008138
Бля, это шутка такая? Ты внатуре под солями там сидишь?

>Cannot use isset()


Где ты isset в строчке, которую процитировал, увидел?
396 3010669
Ща вообще реально в России найти удалёнку за 150к для мидла-крудошлёпа? А то я уже несколько месяцев что-то ищу, все только обещают перезвонить.
397 3010695
>>3008557

наверно это вызвано использованием ?? вместо ?:
398 3010697
>>3010695
Кого бля? Ты бы еще вот так вот посоветовал:
<?= $someObject?->getSomeProperty()?>
399 3010706
>>3010669
Так ты джун.
Мидлы таких тупых вопросов не задают - они и так работают на удаленке за 150к.
400 3010717
>>3010695

>наверно


Бля, проверить и узнать точно даже проще чем пернуть "наверно". https://3v4l.org/eT1Fq
Все никак не привыкну что в этот тред стекается самое тупорылое отребье двачей.
401 3010813
>>3010717
Для пхп - это нормально. Тут уровень дискуссий всегда ниже, чем в го или джава тредах.
402 3010883
Как лучше написать метод, обновляющий данные в таблице?

Для каждой колонки свой метод?
Один общий метод, в который можно подставлять названия колонки?
403 3010945
>>3010883
На мой взгляд нужно мыслить в рамках объектов. У тебя есть объект, который надо сохранить в базе или достать из базы. Соответственно и методы должны выполнять эти роли. Сама обвязка для работы с базой обычно называется репозиторием. Интерфейс работы с ней не должен быть привязан к какой-то низкоуровневой системы вроде базы данных, файлам и т.п. А просто представлять собой универсальное хранилище. Таким образом можно менять реализацию хранилища, а для пользователя это будет единный удобный интерфейс.
404 3011183
>>3010945

>Дохуя воды


Данные то как в таблице обновлять? Даже с твоим охуительным репозиторием данные в итоге должны попасть в таблицу в базе. Ты вообще прочитал о чем спрашивали?
Умное ебало ты сделал, а на вопрос не ответил.
405 3011375
>>3011183
PDO и подготовленные запросы
406 3011842
>>3011375
Ясен хуй что пдо, чучело. "Запросы" надо делать, ебать гений.
Водяной ебучий, вопрос был как эти запросы формировать.
Нахуй ты лезешь если тебе по делу сказать нечего?
407 3011845
>>3010945
Бля, ты ответ на вопрос в чат гпт генерил?
408 3011954
>>3010883
Без кода и как ты это будешь использовать не получится подсказать. Тут такое, если через много колонок кто вызывать этот метод будет, будет знать структуру таблицы надо же описать в массиве ее что бы обновить. Попробуй обобщить все, а потом уже детально разбить на другие функции
409 3011987
>>3011954

>не получится подсказать


>попробуй сам


Ебать, спасибо папаша, за очередной абзац нихуя.

Это какой-то рвотный рефлекс? Вы когда видите этот вопрос автоматически блюете в тред, даже если понимаете что вам сказать нехуй?
410 3012152
>>3011842
>>3011845
Сожалею, что вам не подошёл мой ответ
411 3012199
>>3012152
Да че ты. Отлично подошел.
В следующий раз пиши чтобы использовал php и SQL. Вообще всем в этом треде подойдет, базарю.
412 3012513
>>3010883
Зависит от задачи, кстати с тобой хотел поговорить наш тимлид. Просил передать, чтобы ты зашёл к нему в кабинет
004.png4 Кб, 305x246
413 3012518
Как это ебаное поле ввода увеличить чтобы было на всю страницу? Пробовал гуглить ни один способ не работает а в верстке я ни бум-бум

<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>
414 3012519
>>3012518
width не помогает?
415 3012528
>>3012519
А все, просто у меня был подключен файл цсс в котором я так понял искались стили а я редактировал все в индексе
416 3013808
>>3010883
Просто отталкивайся от задачи. Если у тебя есть форма обновления, где заносятся старые данные то делай общий метод. Если отдельная кнопка повысить сотрудника, то отдельный метод. Спросишь что если и то и это, так всё то же самое есть общий метод, есть метод для отдельной колонки. Связано это с тем, что нехуй делать хулиярд запросов к бд когда можно одним
417 3013816
>>3013808
Если ситуация такая, что старые данные не заносятся в форму и поля передаются пустыми (не хочешь их изменять), то ничего плохого в том, чтобы делать отдельные запросы методами внутри общего метода обновления нет. А еще если подумаешь найдёшь способ прописать условия при наличии/отсутствии данных в общем методе одним запросом
418 3013839
Короче общий метод всегда лучше так как по правилам метод == запрос. Общий метод у тебя так и так будет, только в одном случае ты делаешь 5 запросов, в другом 1 и соответствуешь логике метода
419 3013936
>>3013808

>Просто отталкивайся от задачи


>если и то и это, так всё то же самое


>нехуй делать хулиярд запросов к бд когда можно одним


>ничего плохого в том, чтобы делать отдельные запросы


>по правилам метод == запрос


>Общий метод у тебя так и так будет


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

Спасибо, товарищ долбоеб, что в трех абзацах повторил вопрос. Действительно можно сделать одним методом, а можно не одним. Очень тонко подмечено.
420 3013957
>>3012513

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


Я еще не устроился на работу, а он уже меня ждет.
421 3013992
Какие книги обязательно прочитать любому php и просто программисту?
Есть что посоветовать?
И желательно без воды.
422 3013996
>>3013992
Боба Мартина и кабанчика
1400431726bukvar-1.jpg72 Кб, 630x811
423 3014000
>>3013992
Тред не читал, да?
Начни вот с этой. Половина тут сидящий её скипнули. Буквально парой десятков постов выше еблан не осилил прочитать сто страниц.
424 3014006
>>3014000
Спасибо, но я серьезно.
Я чувствую, что мне очень не хватает базы по архитектуре, по ООП, по всяким сущностям, сервисам и т.д.

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

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

Но мб у анона есть хороший пример книг и я не туда смотрю?
425 3014007
Как считаете, передавая объект в метод, лучше сделать этому классу интерфейс и передавать в тайпхинт не название класса, а название интерфейса?
426 3014031
>>3014000
А как тогда пишут букавы, если не читали букварь?
427 3014061
>>3014007
Ну если создаешь интерфейс только ради того чтобы потом его просто прописать в тайпхинт - это явно плохая идея.
428 3014079
>>3014061
Типизация это хорошая идея. Скажи спасибо создателям этого говноязыка что в пхп для этого приходится в ооп дрисню нырять.
9404091e8ce4068886358454531f0441.jpg152 Кб, 600x600
429 3014191
>>3014006

>я серьезно


>книги обязательно прочитать любому php и просто программисту


>мне очень не хватает базы по архитектуре, по ООП, по всяким сущностям, сервисам


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

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

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


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

Тебе не "не хватает".
Ты подменяешь задачу, которую тебе нужно решать как джуну: научиться писать код, который делает то что хочет умный дядя. Быть на подхвате.
На задачу, которая тебе ближайшие несколько лет не светит: проектирование систем.
Ты пытаешься научиться строить башню из кубиков пикрелетед, вместо того чтобы понять что у тебя в руках и как этим пользуются.
430 3014215
>>3013992
По РНР нет хороших книг. Сам искал что-нибудь достойное, но большинство какой-нибудь кал типа давай изучим как говношлёпать сайты на пыхе, мускуле, хтмл, жс и цсс. Сами авторы пишут отвратительный говнокод.
Переводные книги, несмотря на огрехи переводов, всё равно лучше книг отечественных авторов. Не знаю почему так происходит, но русскоязычные авторы элементарно не могут формулировать мысли.
Так что лучше читать книги по другим языкам по интересующей тематике. Если нужно ООП и паттерны, то читай книги по джаве. Если по сетевым технологиям и микросервисам, то сейчас выходит куча книг по го.
431 3014514
>>3014079
Никто и не спорит что типизация - плохая идея. Плохая идея - создавать пустой интерфейс чтобы прописать тайпхинт.
432 3014626
>>3014514
Как ты в пхп что-то типизируешь не создавая класс или интерфейс, гений?
433 3014925
>>3013936
Сиронизировал графоманией над вкатуном. Естественно после нажатия на кнопку "обновить запись article" должен запускаться метод обновления записи article целиком единым запросом, а не обновление столбцов article по-отдельности. Обосрался в том, что вообще допустил идею об отдельных методах и говном смердит на весь тред
434 3014961
>>3014925

>должен запускаться метод обновления записи article целиком единым запросом


И этот запрос возьмется... откуда? А если надо не "целиком", а только одно поле поменять? Такой запрос откуда возьмется? А если у тебя десять таблиц? Ты под каждую таблицу будешь запросы писать?

Ты ведь смотри, долбоеб. Если реально думать, а не пердеть водой в тред, то можно дойти до того что нужен БИЛДЕР, который по СХЕМЕ таблиц будет строить ЗАПРОС, в который ты через PDO будешь свои значения передавать.
image.png100 Кб, 1073x716
435 3015941
>>2975215 (OP)
Сап, двач, я в кодинге абсолютный ноль, хоть и учусь в вузике, пошёл на вакансию без опыта, моё тз - написать веб-приложение блог, я не знаю откуда мне начинать, мне нужно это сделать за пару дней. Анонны, помогите, пожалуйста, что и в каком порядке мне нужно изучить, и как это заспидранить? Буду благодарен
436 3015951
>>3015941
чат гпт юзай, он тебе накидает говна который можешь для своего тестового использовать
437 3015987
>>3015951
Бля, ну круто, конечно, но хочется понимать что это говно делает, ну походу надо траить, подскажи где его бесплатно достать?
438 3015990
>>3015987
чат гпт объясняет лучше двачеров. он бывает пиздит, но двачеры пиздят чаще
439 3015999
>>3015990
Верю. Не подскажешь где его брать? Акки в тг или сайты какие?
440 3016001
>>3015941

>в кодинге абсолютный ноль, хоть и учусь в вузике


Чем ты там занимаешься тогда?
Помню мне дали аналогичное задание и удалось это всё изучить и сделать буквально за неделю, хотя про РНР ничего не слышал даже.
441 3016004
>>3016001
От армии кошу, проебался, когда в школе нужно было учится, сейчас за голову хочу взяться
442 3016544
>>3015999
Заплатили 170 рублей за впн на опенсервере и 20 рублей за номер для регистрации. Наверняка в Ютубе есть подборка бесплатных
443 3016545
Я своё тестовое чуть ли не полностью сгенерил, просто лень было и не все нужные методы знал. Главное сначала сформулируй запрос так:
Вот моё тз: ....
Опиши порядок действий который я должен сделать. И потом проси его написать каждый пункт отдельно
444 3016549
И ещё нужно как можно меньше комментариев в методах. Комментируй сами методы, а не то что внутри как он будет выдавать
445 3016566
А правда, что одинарные кавычки работают быстрее, чем двойные?
446 3016571
>>3016566
Дожили, долбоебы даже набросить не могут нормально.
Ты вопрос неправильно сформулировал, еблан.
Правильный вопрос: что будет быстрее, объединить строку с переменной конкатенацией или интерполяцией?
447 3016581
>>3016571
Зачем сразу оскорблять?
448 3016585
>>3016581
Нельзя никого оскорбить, можно только оскорбиться.
Зачем сразу оскорбляться?
449 3017098
>>3016545
Спасибо, попробую
450 3017266
>>2992926

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

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


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



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

>> Залогинить - значит, выдать куки


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



Да.
451 3017279
>>2994029

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

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

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

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

Или это не сработает?
452 3017282
>>2994301

Тебе нужно

1) настроить виртуальные хосты (vhost), каждый в своей папке
2) использовать имена вида xyz.localhost либо прописать домены в файл hosts, чтобы они резолвились в IP-адрес
453 3017287
>>2994580

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

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

Но как вариант, можно проверять HTTP-заголовок Origin. вместо токена.
454 3017290
>>2994585

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

Ты какие-то свои велосипеды придумываешь вместо того, чтобы применять рекомендации.
455 3017294
>>2994968

Если есть ограничение доступа по IP или голосование с ограничением по IP, то с помощью CSRF можно накручивать голоса.
456 3017561
>>3017266

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



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

Спасибо за ответ!
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 и делать изменения в наследуемых классах. Но что делать с сущностями?
А может есть более грамотный вариант?
Спасибо.
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 и делать изменения в наследуемых классах. Но что делать с сущностями?
А может есть более грамотный вариант?
Спасибо.
458 3018134
>>3018071
Какой же жуткий беспросветный говнокод.
Просто смотришь на эти комменты и охуеваешь. Слева написано одно - справа другое. В между собой так же общаетесь? - Удали ненужные данные. - Удаляешь кеш. - Малаца, я это и имел ввиду.

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

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

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

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

Так вот ключевой вопрос: твой oldProduct он на каком из слоев отличается?
Он отображается по другому? Например нужно обязательно показать и старое и новое название.
Он получается другим способом? Например он получается из какой-то таблицы с историей изменений аля event sourcing.
Или он отличается тем что с ним можно или нельзя сделать? Например к старому товару нельзя добавлять аксессуары, а к новому можно.
458 3018134
>>3018071
Какой же жуткий беспросветный говнокод.
Просто смотришь на эти комменты и охуеваешь. Слева написано одно - справа другое. В между собой так же общаетесь? - Удали ненужные данные. - Удаляешь кеш. - Малаца, я это и имел ввиду.

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

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

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

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

Так вот ключевой вопрос: твой oldProduct он на каком из слоев отличается?
Он отображается по другому? Например нужно обязательно показать и старое и новое название.
Он получается другим способом? Например он получается из какой-то таблицы с историей изменений аля event sourcing.
Или он отличается тем что с ним можно или нельзя сделать? Например к старому товару нельзя добавлять аксессуары, а к новому можно.
459 3018492
>>3014215
Книги вкатунам нахуй не нужны, это тяжелый способ получения информации, плюс их часто переводят люди далекие от программирования со всеми вытекающими. Лучше их читать когда уже шаришь
460 3018498
>>3018492
В 12 лет читал книжку по микроэлектронике и справочник по матанализу. Сейчас зумеры не могут прочитать книжку "Делаем сайты на пхп и жиквери"?
461 3018524
>>3018492
Откуда брать инфу тогда?
462 3018563
>>3018524
Ты в 2000х годах застрял? Знания черпаешь только из книжек?
Уэсака Сумирэ в русском книжном магазине.webm19,1 Мб, webm,
1280x720, 1:23
463 3018591
>>3018563
Да, если книг читать не будешь - скоро грамоту забудешь
Soerархитектура.png197 Кб, 971x780
464 3018635
>>3014006
Пикрил.
Начни обязательно с книги "Архитектура сложных веб-приложений" (ACWA book) Аделя Ф.
465 3019090
>>3015999
номер на смс активате за пару рублей
466 3019315
>>3014006
СИКП же. Буквально на пальцах объясняют как строить качественные и масштабируемые программы. Дальше по желанию можешь навернуть каких-нибудь новомодных книжек по архитектуре аля ddd, tdd и тд, но начинать надо с базы.
467 3019811
Объясните мне нахуя нужно столько фреймворков(symphony, laravel; yii), если там везде все одинаковая шаблонная хуета?
468 3019876
>>3019811
Объясните мне нахуя нужно столько сортов сыра(пармезан, рокфор; рикотта), если там везде все одинаковая молочная хуета?
469 3019890
>>3019876
Хорошая аналогия, только вот у разных сыров разный вкус, а все пхп фреймворки одинаково ощущаются говном
470 3019901
>>3019890
Хорошая аналогия, только вот у разных фреймворков разные задачи, а все сыры одинаково ощущаются говном
471 3019906
>>3019901
Хуевый перефорс. Жаль что для пыхеров нет ирл фреймворка, чтобы постить и не обсираться при этом под себя
472 3019914
>>3019906
Хуевый перефорс. Жаль что для сыроваров нет виртуальной сыроварни, чтобы тренироваться и их покупатели не обсирались при этом под себя
473 3019962
Генерация капчи
474 3020028
>>3019962
То есть ты на серьезном ебале ради пяти символов генерируешь строку из 70 * 3 символов.
В этой строке еще и всего максимум три уникальных символа на возможные пять позиций.
Еще и реджексы в цикле.
Один единственный реджекс скорее всего медленнее, чем все твое приложение. Ты их решил побольше хуйнуть, чтобы наверняка?

Единственное хорошее в этом коде это использование random_int, остальное можно спокойно нахуй выкидывать.
475 3020162
Стоит ли использовать NetBeans для программирования на РНР?
476 3020164
>>3020162
Да. Крутая штука, еще и бесплатно.
ищу компаньонов для pet проекта 477 3020287
>>2975215 (OP)
Захотелось на досуге разработать анонимный чат-рулетку, наподобие ЧатВдвоём и Nekto.me, но с более годным функционалом. Пока что с нуля накидал прототип на голом PHP + Swoole (т.е. сам чат работает через websockets), связь двух случайных собеседников уже работает, сообщения туда-сюда ходят, есть уведомления о наборе текста. Нужно дальше пилить функционал и сделать какой-то приличный фронт/дизайн (тут я не силён). На GitHub обнаружил массу примеров кода уровня "клон Omegle", хотя там почти всё на JS или Python, но какие-то идеи можно заимствовать. Чат пока планируется только текстовый, никакого голоса и видео.
Если кому интересно поучаствовать ради практики, то оставляйте свои мыльца (мессенджеры не надо), сконтачимся.
478 3020410
че битрикс норм
479 3020419
>>3019962
а че за прегматч что ты ищешь этой регуляркой я не понял объясни
мимо вкатун
17062195064130.png21 Кб, 964x217
480 3020463
>>3020419
Ты из деревни? Капчу никогда не разгадывал?
481 3020466
>>3020463
нормально же спросил, покажи вывод твоего кода, что оно выводит.
Я просто не понимаю вот эту строчку с прегматч
482 3020477
>>3020466
Ты из деревни? На пик посмотри.
483 3020502
>>3020477
я вижу код, кинь пастебин кода я сам проверю
Screenshot 2024-01-26 143426.png153 Кб, 3126x182
484 3020509
>>3020502
Слепошарый ты еблан. Так виднее?
485 3020524
>>3020509
скинь пастебин кода своего
Screenshot 2024-01-26 144833.png549 Кб, 3728x1044
486 3020533
>>3020524
Эх ты, деревня.
487 3020631
>>3020533
думаю ты не умеешь с людьми общаться
488 3020668
>>3020631
Последнее время тут развелось грубиянов, а раньше был вежливый тред
489 3020674
>>3020668
ты очень грубый
490 3020677
>>3020631
>>3020668
А хули с вами церемониться? Вы же даже какие-то минимальные усилия не хотите приложить.

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

Нахуй вы такие нужны тут? Нахуя вам отвечать, если после ответа на вопрос "Как срать?" вам сразу нужен ответ на вопрос "Как вытирать жопу?". И вам совершенно поебать что ответы на эти вопросы знает каждый первоклассник и прописаны они везде и всюду по миллиону раз.
491 3020683
>>3020677
а нет, стоп.
это ты очень грубый
>>3020668
прости это не тебе было
492 3020691
>>3020683
А ты тупой >>3020419 , слепой >>3020502 , ленивый >>3020524 мелкобуквенный хуесос.

Чем ты заслужил уважительное отношение к себе? Ты настолько тупой, что тебе даже в голову не пришло что это не мой код.
17062195064130.png19 Кб, 964x217
493 3020697
>>3019962
>>3020028

>Один единственный реджекс скорее всего медленнее, чем все твое приложение.


PHP использует либу PCRE, она компилит регекс в конечный автомат, который потом быстро работает. Нормальная последовательность действий в интерпретаторах: интернинг строки, потом определение, что такой регекс уже скомпилен. Аналогично с prepared statements и SQL, кстати. Но, конечно, интерпретаторы далеко не всегда делают нормально. Ну и PHP должно в FPM вертеться, чтобы скомпиленный регексп мог долго сохраняться. Это, повторюсь, если PHP вообще так умеет. Другие языки умеют. Что регексп обязательно медленный, это совсем не факт.
494 3020710
>>3020697
Бла бла бла. Давай показывай быстрый реджекс. Желательно бенчмарк прямо с тем, который в посте.
Реджекс медленнее кода на нативном пхп. http://maettig.com/code/php/php-performance-benchmarks.php

И я еще раз повторю: все что ты напишешь, буквально весь код, который ты напишешь будет быстрее всего одного реджекса. Это не шутка. Медленне реджекса только запрос в базу. Но если это запрос в локальную базу вида "SELECT 1;", то по времени будет примерно одинаково.
Такие дела.
495 3020784
>>3020691
надеюсь ты так и будешь без работы сидеть дурачок
Без имени.png67 Кб, 788x675
496 3020796
497 3021068
>>3020796
А ты это заебись придумал.
Первый цикл на миллион итераций, с реджексом по фиксипрованной строке. Который вычисляется всего один раз, в первую итерацию, лол. Остальной миллион гоняется порожняком.

А второй цикл на 16 миллионов итераций. Здесь результат вычисляется уже 16 раз. По разу на каждый элемент excludes. А потом 16кк раз гоняется порожняком. Прямо даже хуй знает почему во втором случае медленнее получилось.
498 3021164
>>3021068
Сорян, не понял сразу, что ты зеленый ребенок.
499 3021345
>>3020410
битрикс ето кал
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. Правильно?
502 3021502
>>3021495
DOMDocument насколько помню, но могу и спиздеть, это биндинг к быстрой сишной либе libxml2. Альтернатив не так и много, но для них всех тебе уже виртуальный сервер будет нужен (VDS то есть). У либы на pure PHP хз что будет со скоростью. Парсер на скрипте может и тормозить. Так что я бы просто регулярками втыкал meta http-equiv content type.
503 3021503
>>3021502

>DOMDocument насколько помню, но могу и спиздеть, это биндинг к быстрой сишной либе libxml2


Судя по тому, что для того, чтобы он не жаловался на ошибки в вёрстке, нужно вызвать libxml_use_internal_errors(true) - звучит похоже на правду.

>Так что я бы просто регулярками втыкал meta http-equiv content type


Да, я так и сделаю, но было ощущение изначально, что это какой-то быдлокод и я что-то делаю не так. Однако, так и не смог нагуглить других решений. И что ещё больше запутывает - у конструктора DOMDocument есть аргумент encoding, но что он делает вообще хрен пойми. Указывай, не указывай - результат не меняется.
504 3021504
>>3021503
У него есть и version, и encoding. Похоже, это скорее всего то, что он тебе выдаст, если этот document сохранить как xml:
<?xml version="1.0" encoding="utf-8"?> - первой строчкой
изображение.png37 Кб, 1245x568
505 3021505
>>3021504
Да вроде как-то нет.
506 3021507
>>3021505
Их затирает loadHTML. Если saveXML пустой документ или с добавленными вручную нодами, то там как раз будет.
507 3021510
>>3020796
>>3021491
БАТУМИБИЗ. Сериоус бизнес ебать.
Учитесь, реджексовые. https://3v4l.org/GYbWC

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

>В ЧЕТЫРЕ



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

https://ideone.com/oMmUt5

И это по сравнению с очень быстрым индексированием в хэше.
509 3021518
>>3021516
Лол, так там просто все комбинации двух символов в итоге кешируются. Сколько их всего? Две-три сотни? А остальные 100к раз оно никаких реджексов не выполняет.
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, и убедись сам. Кэшируется, лол.
511 3021527
>>3021519
Причем здесь то как устроены сами реджексы вообще?
Пхп кеширует РЕЗУЛЬТАТ выполнения функции. Потому что на самом деле этих результатов в примере не миллион, а всего пара сотен.

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

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

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

Уот так уот. Пхп гораздо умнее ебланов, которые на нем пишут. И понимает что выполнять реджекс миллион раз - это тупость.
Разумеется кеш штука полезная, но не надежная. Поэтому самый правильный способ сразу писать нормальный код. Кеш и с нормальным кодом поможет, зато все внезапно не пойдет по пизде из-за неправильного порядка вызовов и неоптимально скомпиленных опкодов.
512 3021529
>>3021527

>Пхп кеширует РЕЗУЛЬТАТ выполнения функции.


НЕТ.
cryingwojakphotosv2custom.webp147 Кб, 2576x2399
513 3021530
>>3021529

>НЕТ

fuck.png36 Кб, 757x304
514 3021535
>>3021527
Мне не нужны эти танцы. Я уже сам на всякий случай модифицировал исходники PHP8.4 и собрал его из них. Я вижу свомим глазами, что PHP миллион раз ломится к функции сишной либы pcre2_match, когда я его прошу проверять одну и ту же строку одним и тем же регэкспом в цикле. Так что никакие результаты не кeшируются. Как ты вообще представляешь себе архитектуру такого кеша? Для него не существует подходящей архитектуры. Это должно быть что-то вроде кеша SQL для детерменистических функций, которому явно не место в скрипте.
515 3021538
>>3021530
Боевая картиночка.
516 3021539
>>3021529
>>3021530
Для добивающего осталось выяснить, что когда ты присваиваешь значение строки в другую переменную, до тех пор пока одна из переменных не поменяется значение будет общим.

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

НЕЕЕТ....
517 3021540
>>3021535
Какие танцы, дебич? Я ебу как ты там че скомпилил? Может у тебя опкеш вообще не включен.
Ты высрал пример на конкретной конфигурации пхп и железа. Я показал тебе почему он быстрый и как эта быстрота может как улетучиться, так и стать вообще мгновенной.
518 3021542
>>3021540
Лол, ты как себе вообще представляешь кэширование результатов функций? Для этого нужна хэш-таблица (аргументы) => (результат) с вытеснением более старых результатов, а никакой не опкеш.
519 3021544
>>3021535
>>3021542
Даже хуй знает что это за кеш такой.
Может вот такой? https://en.wikipedia.org/wiki/CPU_cache#Cache_hierarchy_in_a_modern_processor
AAAAAAAaaaaaaa.png84 Кб, 785x765
520 3021551
>>3021544

>кеш процессора


Ну это уж совсем из другой оперы.

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

https://ideone.com/AI6f92

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

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

Давай перди че-то про танцы какие-то. И компиль хуй к носу.
522 3021864
>>3021554

>что происходит?


Фигурные скобки проебаны.
523 3021970
>>3021864
Это просто альтернативный синтаксис. Хуй знает почему в изначальном примере так было написано. Нихуя не меняется от скобок https://ideone.com/uLVwmr
524 3021997
>>3021970
Так у тебя самого два цикла с более длинными строками, которые не могут участвовать в каком-либо кэшировании, поскольку они все разные, выполняются каждый процентов на 30 даже быстрее, чем цикл с короткими строками, среди которых много повторяющихся. Это буквально доказательство, что ничего не кэшируется. Ты все-таки троллишь, тварь.
525 3022090
>>3021997

>два цикла с более длинными строками выполняются каждый процентов на 30 даже быстрее, чем цикл с короткими строками


Стекломойный еблан, где ты это увидел?

>short : 0.00015


>medium: 9.89437


>long : 9.70363


Залупа ты понурая, о том и речь была что в списке коротких строк 90% повторений, которые отлично кешируются. А время для списка со средней длиной и длинной и есть настоящие затраты на все эти реджексы. Там уже похуй какая длина, хоть двадцать. Главный скачек затрат происходит в тот момент когда кеш перестает срабатывать.
Снимок.JPG24 Кб, 1357x406
526 3022168
Почему он мне все желтым выделяет? Как это оффнуть?
527 3022203
>>3022168
Двойную кавычку не закрыл в строке $sql.
528 3022256
>>3022090
E-5 это десятка в минус -5 степени, чучело ебаное.
слепошарый-уебан.png27 Кб, 551x284
529 3022273
530 3022413
Почему шторм любой инклюд подсвечивает красным светом и предлагает сделать глобальную переменную?
531 3022444
>>3022413
Шторм думает, что ты пишешь приложение под FPM/FastCGI со стройной декомпозицией всего в полтысячи классов, зашиванием всего в контексты, автоинклюдом на основе имен классов. Сделай один глобал, с тебя не убудет.
532 3022890
>>3021507
И правда. Значит, можно оформить спокуху и без задней мысли редактировать разбираемый html-код, добавляя в него объявление кодировки.
533 3022933
А как красиво вывести данные из mysql ? Хочу с бутстрапом сделать аккуратные куски текста, в гугле нашел только инфу в виде вывода таблицы с костыльными "echo <tr>".
041633.jpg193 Кб, 530x709
534 3022934
А знаете, довольно быстрый этот ваш PHP. Почему-то всегда раньше считал что тормознутый, и люди жаловались
535 3023039
>>3022934
Сейчас РНР сопоставим по скорости с джавой
536 3023398
Вы чё, пидорасы, охуели? Я-то думал, сейчас прочитаю ваш срач и как пойму, насколько регулярки медленные или нет, насколько стоит избегать их использования. Ага, лол.
ньюфаг
537 3023401
>>3022934
наверно с битриксойдами нас путал
538 3023408
>>3023401
Может, он олдфаг. Вроде, в PHP5 что-то принципиально изменилось, а потом ещё в PHP7 совсем хорошо стало.
539 3023453
>>3023398
Хз этот мужичок вроде опытный пизда, мб он и проебался с мантиссой но функции реально кешировать должно
540 3023562
>>3022934
С версии 7 стал конечно намного быстрее, но когда некоторые пытаются зеркалить сишный код на PHP, получается все еще намного хуже, чем, например, с жопаскриптом. В принцепе, если у тебя узкое место типа исказить картинку капчи, и инфраструктура позволяет, то просто делаешь модуль для пыха на сях. Но это уже переезд с виртуального LAMP хостинга на VDS, где тебе самому надо админить.

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

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

>>3023453

>функции реально кешировать должно


Вот откуда вы это берете, блять? Ну хоть ссылку дайте, где написано, что пых кэширует так, как вы пишете?
541 3023648
Считается ли нормальной практикой не использовать формы в Симфони, а самому ручками всё обрабатывать как на голом РНР? Дело в том, что мне они совсем не нравятся.
542 3024164
>>3023562

>Вот откуда вы это берете, блять?


Ну как минимум пых делает так как на пиках. Второй вызов strlen компилируется сразу в результат, функция не вызывается. Вот и думай.
543 3024274
>>3024164
Получается можно и двойные кавычки писать и ничего не замедлится?
544 3024281
В чем ошибка?
546 3024396
>>3024274
Проблема двойных кавычек не в скорости. А в непредсказуемости интерполяции. Использовать их нельзя по той же причине почему нельзя использовать нестрогое сравнение. Пхп пытается сделать с переменными какие-то ебанутые неочевидные преобразования, которые нам нахуй не нужны. Малейшая опечатка и произойдет хуй знает что. А найти такую багу можно только с дебаггером, буквально по строчкам перебрав весь код.

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

Поэтому либо конкатенация, либо sprintf. Двойные кавычки только если нужно вывести спецсимвол типа "\n" переноса строки.
547 3024437
Анон, может кто помочь удалить ненужные блоки из пхп страницы? Реально пробовал, но у меня потом страница не грузит. Подарю паскод, кто поможет

@nekto442
548 3024444
>>3024437
Сюда кидай, поможем.
549 3024640
>>3024444
Вот пример страницы https://demo.gempixel.com/short/
Вот сама страница https://www.mediafire.com/file/thk6nsif3gfig7l/index.php/file

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

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

А ты никогда не освоишь ни один фреймворк, потому что ты еблан.
554 3024891
>>3024164
поясни вкатуну, почему "0004 RETURN int(1)"? это стандартный код, который возвращается дефолтом типа?
555 3024943
>>3024891
Это нужно чтобы сказать виртуальной машине "стопе". Там цикл бесконечный, пока исполняемый код единицу не вернет выполнение не закончится.
556 3024946
>>3024887
Вкатун, спок. Тебя никто не спрашивал
557 3025112
>>2995686

Она про sanctum.

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



Это и есть JS.

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



Этот роут на сервере обрабатывает sanctum, как я понял, и на сервере делать ничего не надо.
558 3025125
>>2998602

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



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

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

в строке любое чилсло символов без апострофов ИЛИ строка это буква, за ней апостроф, и дальше 1 или более символов не-апострофов.
17028272171020.jpg149 Кб, 600x946
559 3025129
>>3024887
ТА САМАЯ НИКОМУ НЕИЗВЕСТНАЯ ИСТОРИЯ ПРО ШАРИК!!!!!!!!! СМОТРИТЕ ОН ЛЕТИТ БЕСКОНЕЧНО ОДНА ЗОЛОТУШНАЯ, ОДНА ПОЛТУШНАЯ, ОДНА СЕРЕБРЯЧКОВАЯ
560 3025130
>>2998604

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

>>2998618

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



Нет. Люди часто делают тупые ошибки, например, ставят пробел после @ или вместо точки, или пишут mailru слитно. И кто за деньги этим занимается, анализирует типичные ошибки и пишет костыли для их исправления.
561 3025132
>>2998645

Есть сайты типа: leetcode, codeforces, там куча задач на разные темы. Если непонятно, как их решать, то гугли книги или статьи по теме "структуры данных" и "решение олимпиадных задач".
562 3025139
>>3025132
А пхпшников часто валят на собесах литкод задачками?
563 3025140
>>2998667

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



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

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



Можно.
564 3025145
>>2998837

Опиши пример задачи, которая решается парой строчек на PHP и HTML, и посмотрим. Если бы все было так просто, то фреймворки были бы не нужны.
565 3025148
>>2998837

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



Дай ссылку на инструкцию, по которой ты все устанавливал. И дай текст или скриншот ошибки. И посмотрим, это инструкция неправильная, или ты невнимательно читаешь.
566 3025164
>>2999237

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



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

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



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

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

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

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

Чтобы это сделать, тебе надо изучить, как настраивается используемый тобой веб-сервер.
569 3025177
>>3004471

Это плохая идея. Вместо этого, куку должен обрабатывать контроллер и передавать в шаблон переменную вроде display_some_text.
570 3025183
>>3004496

Да, так и надо делать. Потому, что обработка кук должна быть в котроллере, а не в шаблоне. К тому же, твой код трудно будет адаптировать, если завтра понадобится не только проверять куку, но и содержимое БД например.
571 3025194
>>3004771

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



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

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



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

Это упрощает, например, тестирование: мы можем тестировать ту функция в изоляции.
572 3025196
>>3005015

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

Бывает и другой подход. В Доктрине "источником истины" может быть класс модели, а миграции генерируютя на основе кода.
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), ">")) {}
Так что ли?
574 3025206
>>3025139

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

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



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

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

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



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

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



Ну вот похоже, что твоя проблема в том, что ты не знаешь, что такое ORM и не привык использовать ООП. А не в фреймворке.
Screenshot 2024-01-29 143207.png115 Кб, 2094x280
576 3025216
>>3025197
Малой, это пхп. Тут кал. https://wiki.php.net/rfc/string_to_number_comparison
577 3025235
>>3025197

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

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

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

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



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

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



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

Для поиска таких проблем в коде можно использовать статические анализаторы вроде phpstan, psalm.
578 3025305
>>3025213

>ООП, атрибуты, DI, MVC, ORM


Я изучил ООП, атрибуты, MVC. Написал блог на ООП по MVC. Что такое атрибуты знаю, но не использовал.
DI, ORM ведь часть фреймворка. Как их заранее изучить?
579 3025386
ООПзависимые, а если я всё-таки хочу какой-то класс использовать процедурно, и чтобы он не имел возможности реализоваться? Типа Utils::timestampUs(). Как это правильнее сделать?
1. abstract class Utils {}
2. class Utils { private function __construct () {} }
Я обычно делал 1, но тут услышал мнение, что семантически abstract следует читать как "этот класс 100% должен быть унаследован и расширен, сам по себе не может быть реализован", а не просто "этот класс не может быть реализован". И, следовательно, семантически правильнее второе.
inb4 правильнее обоссать тебя, пиши ООП и не выёбывайся, дали тебе DI - вот и не пизди. Ага, понятно, но отвечая на мой вопрос?
580 3025397
>>3025386
Если ты написал class, то уже перманентно зашкварился об ооп. Ты теперь навсегда объектно сориентированный попуск, смирись.
581 3025435
>>3024319
Так у меня все правильно по документации
583 3025503
>>3025435
Вообще мож у тебя дальтонизм? Или ты думаешь что ide тебе красным хуярит чисто по приколу?
изображение.png17 Кб, 505x34
584 3025598
>>3024281
Перестань относиться к ошибкам как к ОЙ НИПАНЯТНА ВСЁ СЛОМАЛОСЬ. Относись к ним, как к подсказкам, которые говорят, что ты делаешь не так. В твоём случае это очень явно видно, никакой магии не происходит.
585 3025611
>>3025206
Я тот кто задал вопрос. Не спросили кст
587 3025645
>>3025499
Ну сделал стринг, та же ошибка
Снимок.JPG8 Кб, 554x214
588 3025780
>>3025645
Всё, сделал. Так и думал что в result гавно какое-то
589 3025791
Внимательней в следующий раз. Если подобные простые вещи, ищи отрывки чужого кода в гайдах или где ещё угодно
590 3025879
>>3025183
Окей! Спасибо за ответы.
17064645521251.png11 Кб, 1439x227
591 3025881
>>3025780

> так и думал


> on line 11



Но как, шерлок?
592 3026034
>>3025780
И это ты еще на фреймворки не перешел...
593 3026124
>>3024661
Так и делал и страница белая становилась
Я бы лучше паскод подарил за помощь. У меня как раз лишний есть
594 3026212
>>3025780
Текст ошибки можно закидывать в гуглтранслит и чатгопоту, кстати.
Screenshot 2024-01-30 084652.png159 Кб, 692x428
595 3026232
>>3025780
Необучаемый ебанат.
596 3026243
>>3026232
Лучше бы порадовался за человека что он смог решить проблему
597 3026256
>>3026243

>смог решить проблему


>не смог прочитать одну строчку в документации


>не смог прочитать текст ошибки


>несколько раз еблом тыкнули куда надо


>смог решить


>иде с самого начала и до сих пор подсвечивает косячный код



Радость у меня только от того что такие уебни никуда никогда не вкатятся. Таких дегенератов даже на кассу в пятерочке не поставят.
598 3026364
Область видимости свойства/метода, это вещь не настолько же серьёзная, как, например, указание типа свойства. Если свойство объявлено как int, хоть усрись, значение "foo" ты ему не присвоишь.
Если свойство объявлено как private, его фактически можно прочитать с помощью var_dump как минимум. Более того - можно изменить его значение извне с помощью ReflectionProperty.
Итого, область видимости - это что-то типа DocBlock. Подсказка для разработчика, которая говорит, как, по идее, всё должно быть. Но если захочется выстрелить в ногу (изменить значение private свойства извне) - технически это сделать можно. И, например, не стоит рассчитывать, что если ты объявил свойство private и не добавил к нему публичные геттер и сеттер, то его действительно нельзя будет получить и модифицировать извне. Если захочется - можно.
Правильно понял?
599 3026533
>>3026232
Это дефолтная псевдо ошибка при подключении include если переменная не глобальная
Screenshot 2024-01-30 133419.png340 Кб, 1980x1464
600 3026587
>>3026533

>Это дефолтная псевдо ошибка при подключении include если переменная не глобальная


Не бывает никаких "дефолтных" ошибок. Если шторм что-то подчеркнул тебе красным ты 100% делаешь какую-то хуйню. У тебя даже желтых подчеркиваний никаких в коде быть не должно.

Никто не объявляет переменные по разным файлам. Создается метод getConnection(), который и возвращает соединение. Никто блядь не бегает и не ищет где и нахуя эта переменная была объявлена.
601 3027427
>>3025386
Кто тебе мешает заполнить класс только статическими методами? Фактически у тебя получится библиотека функций.
602 3027621
Как же я жалею, что начал пользоваться стрелочными функциями.
Постоянно какие-то сюрпризы из-за их особенности запоминать окружение.
603 3027627
>>3027621
Все, нашел причину.
Минус 2,5 часа.
Ни о чем не жалею, сам виноват, что проморгал этот момент.
604 3027656
>>3026256
Да убивать таких надо в зародыше. И вообще, никто не вправе писать на божественном PHP, не доказав свою глубокую одаренность, граничащую с гениальностью.
Screenshot 2024-01-31 092030.png15 Кб, 1010x62
605 3027767
>>3027621
Интересно и почему же эти функции называют "замыканиями". Наверное какое-то совпадение.
606 3027778
>>3027656
Не передергивай, чтобы вкатиться в каловый донный язык для конченных дебилов, нужно как минимум уметь ЧИТАТЬ.

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

Коль такие проблемы - оформляй инвалидность, пенсию по шизе и не еби голову здоровым людям.
607 3028002
>>3027778
Да не визжи ты. Вся документация это буквально урезанный справочник где ничего толком не написано, с ребусами (string $govno int $a : bool false| ERROR). А ошибки это написанное машинным текстом сообщение, которое зачастую к реальной ошибке не имеет отношения. Пхпшторм вообще всегда подсвечивает любую рандомную хуйню, даже хэллоу ворлд нельзя написать без его подсветки.
Screenshot 2024-01-31 134332.png301 Кб, 1856x1694
608 3028066
>>3028002

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


Дегенерат, с магическим мышлением. В документации к каждой функции КАЖДЫЙ сука параметр детально расписан. Каждый вариант ошибки. Еще и блядь примеры использования в нескольких вариантах.

>с ребусами (string $govno int $a : bool false| ERROR)


>литературно называет ребусом пример кода


Я и говорю, что таким дебилам надо не код писать, а в больничку - глицин пить. Какой тут нахуй пхп вообще. Надо слабоумие лечить.

>подсвечивает любую рандомную хуйню


Рандомную хуйню генерирует твой больной мозг. А шторм просто подсказывает как этот высер превратить в нормальный код.
609 3028122
>>2988733

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

В глубину документации и потроха исходников уже по необходимости, когда задача того потребует.
610 3028140
>>2991390

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

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

Попробуй https://symfony.com/doc/current/create_framework/index.html
611 3028182
>>3001768

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

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

Потом потихоньку и базовые знания по докерам можно освоить. Сейчас они везде и понимать их на начальном уровне порой обязательно, чтобы решать задачи.
612 3028187
>>3003398
Так она для вкатунчиков, совсем простая.
Скорее маркетинг, чем обучающий материал, но для новичков таки полезный.
Если хочешь гоу дипер читай доку, она шикарна.
Когда становится тесно в доке — читай исходники, они тоже ничего.
613 3028259
Подскажите как находить полезные, часто используемые функции, например для работы с массивами. Единственный вариант лазить по доке заходя в каждую функцию?
614 3028275
>>3028259
Есть способ сразу знать что функция которая тебе нужна уже встроена в пхп.
615 3028409
>>3028259
спроси у чата ЖПТ, если лень по документации лазить. Вопросы такого уровня нейронка решает более-менее норм
616 3028626
>>3028409
Как на это отреагирует коллектив? Такое принято или примут за дауна?
617 3028738
>>3028626
Ну ты же им не скажешь, правда? А потом когда выяснится что то тебе в очередной подсказали это машинный бред, полезут проверять и выяснят что 90% того что ты делал это шизофазия чат бота, который нихуя не предназначен для программирования.

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

Нейрохуйня ведь умеет писать не "правильный" код, а максимально "похожий на правильный". Она блядь "правильность" определять не умеет.
618 3028898
>>3027427
Так а на мой вопрос это как отвечает? Есть класс, который состоит только из статических методов. Логично, что реализовывать этот класс нет смысла. Конечно, если где-то случайно он будет реализован, это не приведёт к ошибкам, но для наглядности было бы неплохо отметить, что весь класс по сути статичный. Раньше я делал класс abstract, но услышал мнение, что это пидорская тема. Семантически, мол, это модификатор из мира ООП, который подразумевает, что абстрактный класс будет унаследован и расширен.
17064140158300.mp4739 Кб, mp4,
720x480, 0:09
619 3028939
>>3028898

>Есть класс, который состоит только из статических методов


>Раньше я делал класс abstract


>это модификатор из мира ООП


А "класс" это не модификатор "из мира ООП"?
620 3028948
>>3028738
Да не, тут речь была про поиск функций для конкретного действия, задачки. О гении великого заменителя программистов я наслышан
621 3028965
>>3028948

>поиск функций для конкретного действия


Просто набрать в гугле "как срать?" уже не вариант?

Походу все кто мог выдачу гугла с первой страницы осилить в какие-то другие языки вкатываются.
622 3028982
>>3028965
Проблема в том, что неизвестно есть ли вообще этот метод. 3 раза переформулировал запрос, получилось найти искомый метод только практически скопировав его описание. "Получить проиндексированные значения массива по ключу php"
623 3029004
>>3028982

>проиндексированные значения массива по ключу


Еще бы оно нашло. Что это блядь вообще означает? Ключи это и есть "индекс". Как блядь в массиве может быть значения без ключа? И как по одному ключу можно получить несколько значений если ключ уникальный?

Ну а то что ты гугл посиком пользоваться не умеешь даже не удивляет. Сначала задается контекст, потом вопрос: "шиндовс php как срать какаха не выходит из жопи"
624 3029103
>>3028982
Это лишь означает то, что ты плох в гуглении. Учись формулировать запросы и всё получится.
625 3029109
>>3028965
Сейчас реально устроится только на РНР. Так бы я дальше учил джаву.
626 3029162
>>3028982
Возьми книжку Котерова по РНР, он там 90% функций рассмотрел.
627 3029166
>>3028898

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


Для чего?
628 3029224
>>3029109
Сейчас никуда нереально устроиться. Джуны не нужны и PHP не исключение. Походу ты на битриксойдные вакансии повелся и думаешь что сюда легко вкатиться
629 3029269
>>3029224
И что теперь? Возвращаться в джаву что ли?
630 3029273
>>3029269
Перескакивать с языка на язык такое себе. Если учил джаву продолжай учить его дальше. Кто тебе вообще сказал что джавистов не берут на работу?
631 3029286
>>3029273
В джава-треде сказали
632 3029329
>>3029286
Тебя вкатун-джавист затроллил и лишил одного конкурента в твоем лице. Поздравляю.
633 3029477
Вкатываюсь в 1с-Битрикс. Мнение?
634 3029573
>>3029477
В качестве строчки в резюме это скорее минус чем плюс. Рискуешь застрять на должности говночиста до седых мудей, пока ссаный битрикс не вымрет нахуй. А там уже на завод.
И да, само "программирование" на битриксе устарело лет на 10 минимум, как сейчас никто не пишет. Поэтому битриксоидов и не берут никуда, собственно
635 3029601
>>3028738
мб ты нахер пойдешь?
636 3029706
>>3029573
Ладно, убедил. Иду покорять Ларавель
637 3029770
>>3029601
Жпт дегенерат, в том то и прикол что ответы получаются РАЗНЫЕ.

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

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

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

Поэтому жпт хуиплетов не слушайте, просто читайте документацию. Все функции для работы с массивами можно за час изучить, а вкатываться вам пол года минимум.
638 3029811
>>3029770

>идиоту предлагают использовать чат в качестве справочника, чтобы стек оверфлоу самому не парсить


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

639 3029852
>>3029477
Хуже битриксоидов в пхп никого нет. Они органически неспособны писать нормальный поддерживаемый код.
Screenshot 2024-02-01 142747.png255 Кб, 2598x966
640 3029854
>>3029811

>чат в качестве справочника


>залупа сбредила пикрелейтед


Такой-то справочник.

Тебе, дебилу тупому, сделали целый сайт по yii, с полной документацией, примерами, книгами, гайдами, ссылками на исходники, форумом. Даже на русском сука. И везде есть кнопка поиска.
Не хочу, хочу жрать говно.
641 3029856
>>3029852

>писать нормальный поддерживаемый код


Можно подумать остальные пхп макаки способны.
642 3029861
>>3029601
У тебя тут просто выжимка из документации - мог у гугла так же спросить. Он код за тебя все равно не напишет, не протестирует и своей жопой за него отвечать не будет.
643 3029866
>>3029856
Вполне. Как минимум знают общие правильные абстракции, а не костыли из битрикса. Да и пишут обычно в одном стиле.
644 3029886
>>3029866

>знают общие правильные абстракции


Типа умеют зачитывать наизусть солид из википедии? Или бесконечный список паттернов?

Малой, 99% кода на пхп это нечитаемое неподдерживаемое говно. То что кто-то пытается свой говнокод в какие-то ебанистические нагромождения классов заворачивать лучше нихуя не делает.
645 3029927
>>3029886

>99% кода на пхп это нечитаемое неподдерживаемое говно


>яскозал


Ты случайно здесь, ребенок?
646 3030239
>>3029927
Ладно. Давай, "взрослый", расскажи мне откуда пхп макаки учатся писать нормальный код? Тут весь тред ноют что по пхп нормальных книг нет. А по ооп так вообще все под джаву или на крайняк шарп.
Head first patterns - джава
Синяя книга эванса - джава
Чистая архитектура Мартина - джава

Где тут пхп и где тут пхп макаки?
647 3030269
>>3030239
Тоже хочу учить джаву, но приходится пхп
648 3030271
>>3030269

>приходится


Кретин, кто тебя заставляет учить пыху? Учи свою джаву если он так тебе нравится, зачем себя так мучать?
649 3030282
>>3030271
Шансы устроится в пхп выше, чем в джаву. Сейчас там куча менторов, которые за деньги натаскивают нулевых челиков и они все вакансии закрывают. А в пхп больших денег нет, поэтому ментора работать не выгодно и поэтому самоучкам типа меня легче устроится. Ну это мне так видится.
650 3030724
Так нормально делать? А именно - foreach и аргумент по ссылке.

https://ideone.com/si7cma

Есть у меня многомерный массив. Мне нужно пройтись по нему и сделать определённые действия с каждым элементом. С элементами первого уровня - одни, с элементами второго уровня - другие. И т. д.
В качестве альтернативы я вижу array_map, но из-за вложенности это будет гораздо тяжелее читать. Я просто ссылки обычно не использую и мало про них знаю. Это тот самый случай, где они нужны, да?
651 3030730
>>3030724
Зачем ты такую дрысню пишешь? Ты вкатун?
652 3030731
>>3030730
Типа. А как поступить в такой ситуации?
653 3030859
>>3030724
А что за действия то?
654 3030918
>>3030724
ИМХО код плохой. Сложно читается.
Скажи, зачем ты делаешь unset($lvl3); на строке 23?
655 3030932
>>3030918
>>3030724

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

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

>>3030932
Да вот хуй знает, мне как будто тяжелее читать это. Не то чтобы прям тяжело, но foreach вообще легко, а тут слегка подвисаешь.
657 3031075
>>3030724
Это какая-то задачка из литкода или что это?
658 3031227
Кто-нибудь вообще настраивал XDebug для шторма через докер? Сейчас попробовал и ничего не получилось. Причём проблема очевидно в тупом шторме, который не может подхватить xdebug.
Самое бесячее, что надо для каждого проекта создавать тонну ебанутых настроек шторма, всякие папки прописывать, сервера, прочую залупу. Неужели это нельзя всё сделать проще? И ещё кто-то говорит, что шторм - это дофига удобно. На мой взгляд самый неудобный и долбанутый редактор, который я когда-либо встречал.
659 3031597
>>3031227
Можно. Все это делается в один клик в нихуя ты раскатал IDE.
660 3032553
Че пацаны? Симфони или ларавель?
661 3032573
Сижу-пишу свой говнокод, мешая ООП-код с ФП-кодом...

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

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

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

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

Просто стыдно за свой код, за то, что я даже не могу понять как мне писать его нормально. Поставить фигурную скобку где надо я могу, но вот понимание правильной архитектуры у меня нет, понимание оптимальных, логичных и красивых решений.
662 3032574
>>3032573
Всю архитектуру, за тебя, реализовали в фреймворке. Паттерны еще пойди поучи
663 3032585
Пыхтел над кодом. Добавил по интуиции условие и все заработало.
Одна проблема - я не понимаю почему мой код работает. Норм, пачаны?
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' все равно срабатывает повторно.
665 3032588
>>3032587
Ладно, пачаны, даже не думайте, если собираетесь о том, что у меня в коде. Я кажется понял куда смотреть.
666 3032603
>>3032573

>программисткого образования


Можно подумать, что там учат программировать. Там в основном решают простые задачки типа lab1.cpp, где пишут лютый говнокод. Преподы рассказывают лишь основы, буквально по вершкам. В итоге после универа ещё надо самому доучиваться, чтобы взяли на работу.
667 3032604
>>3032553
Ларавель - если хочешь стать фуллстеком, Симфони - если чистым бэком
668 3032750
>>3031597
Два дня долбался с этим Xdebug'ом, но в итоге победил. Оказалось, что в гайдах в интернете всякую фигню пишут, настроек нужно меньше, но всё равно надо точно знать какие именно.
Вообще, заметил, что с докером пишут конфиги как попало, лишь бы работало. Очень редко можно найти хороший гайд, где выносят переменные окружения в .env, не пытаются выловить ip-адрес контейнера, а обращаются по его имени.
И второй неприятный момент уже в самом докере, что есть различия между разными ОС. Я вначале наткнулся на гайд, где чел настраивал через винду, а в линуксах некоторые настройки надо писать по-другому.
669 3033173
Сложилось впечатление, что PHP запутывает своим желанием усидеть на всех стульях сразу. С одной стороны, он как бы говорит - тут всё серьёзно, на тебе статическую типизацию аргументов методов, и статическую типизацию возвращаемых значений, и ещё кучу всякого претенциозного, мол, мы не совсем безнадёжные говнокодеры, а стремимся к Java.
С другой стороны, он - собранная на коленке хуита с динамической типизацией, и никак ты не укажешь тип для переменной внутри метода, отсутствием типизированных массивов (внешние инструменты типа phpstan мы не трогаем, речь о самом языке), как будто бац-бац для говнокодеров, чел, типа, если хочешь что-то серьёзное писать, иди тереби джаву, раст, си, хуй знает, а мы тут хуяк-хуяк прототип, чисто посмотреть, взлетит или нет.
Правильно понял?
вкатун
670 3033175
>>3033173

>Правильно понял?


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

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

Никаких перспектив у пхп нет.
Доля использования именно как языка для написания кода будет падать и дальше. Джаваскрипт макаки сожрут весь рынок пхп макак просто потому что их в сотню раз больше. Все ресурсоемкие задачи уйдут го и модным растам зедам. А говнокодить сайты будут на джаваскрипте. Потому что фронт один хуй на нем. Нахуя два набора дебилов держать.
672 3033415
>>3033228
Как вывести стихотворение из mysql чтобы пхп не превращал его в строку а сохранил переносы?
673 3033452
>>3033228

>будет падать и дальше


Если я засну и проснусь через сто лет, то пхп также будут хоронить

Кстати, в пиндосиях, этих ваших, похороны пхп это давно уже ироничный мем. А по факту пыха как являлась топ 1 в бекенде, так и продолжает занимать 77-80% рынка. Остальное жрет джава и питон, а всякие однопроцентные объедки занимают уже ноды и прочие руби. Кстати, не секрет, что почти в ста процентах случаев Нода используется для сборки фронтенда, а не для разработки бекенда
674 3033467
Franken php. Годнота? Хуита? Стоит вкатываться?
675 3033491
>>3033415
Так, может, дело не в том, что php херит переносы, а в том, что оно выводится в браузер, т. е. HTML, т. е. для переноса нужно <br> вместо "\n".
На крайний случай можешь обернуть место, в которое ты выводишь, тегом <pre>
676 3033540
>>3033452

>так и продолжает занимать 77-80% рынка


И сколько из этого всего вордпресс и остальные цмс? В том-то и прикол что для этих сайтов программист не нужен. Я русским языком написал:

>Доля использования именно как языка для написания кода будет падать и дальше


Она и так падает непрерывно. 30% сайтов используют версию ниже седьмой. Это говно никто не обслуживает оно просто висит в интернете. Поддержка седьмой версии два года назад закончилась. Половина "сайтов" на пхп на седьмой версии. Половина пхп сайтов до сих пор под апачем крутится. Все это не актуальный кал. Про какое будущее можно говорить вообще? Какое нахуй развитие языка если две трети кода на нем это легаси, даже от актуальной версии на три года отставшее?

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

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

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

Напомню, что при всем при этом рынок пыхи это 80%. За последние нацать лет он ни упал вобще. Все потому что всё твои "другие" языки популярны, но популярны не в бекенде, а например в мобильной разработке, которая сейчас на хайпе, но без бека, как известно никуда не поедет (как и все в принципе)
678 3033683
>>3033611

>сравни количество вакансий на вордпресс и ларавель


Алеша, какие нахуй "вакансии" на вордпресс? Вордпресс потому и популярен, что там программист не нужен.

>когда будет на нем столько же вакансий как и на ларе


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

>А про то, что нода убьёт пыху я слышу года эдак с 15го.


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

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

Кому и кобыла невеста. Кому-то в кайф сидеть за копейки колупать баги в легаси говнокоде и облизываться на "новые" фичи языка, которые спиздили из джавы десятиллетней давности. Нахуя на это подписываться в 2к24 году? А самое главное нахуя работодателю в 2к24 в это вкладывать миллионы?
679 3033707
>>3033683

>тенденция


Значение знаешь? Тенденция это когда 20 лет назад пыха занимала 80% рынка, 15 лет назад - 60, 10 лет назад - 30 и т.д. А когда он стабильно занимает 80%, то о какой тенденции ты говоришь? О манямирке твоём, который ты прочёл лет 5-10 назад? Потому что крыть пыху говном уже давно моветон и признак школьника.

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

>развиваться некуда


Кекнул с дауна. А что же считается развитием?
680 3033748
Чисто интересно. Аноны, которые регулярно сидят в этом треде, для чего вы тут сидите? Я вкатун, иногда прихожу спросить что-то, поэтому и сижу в этом треде.
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
страница бойлерплейта сжимается в одну строчку. А с такими хуиплетами у руля никакого "развития" офк не будет.
682 3033772
>>3033766
Нихуя горение. Ну ладно.

>чем пыха лучше тайпскрипта?


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

>20% это актуалочка


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

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

>80% это вордпресс


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

>гошники получают больше


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

>формошлепство на ларавель


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

>поднять приложение без ебли со сторонними веб серверами


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

>фронт, бек, десктоп


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

>нет ридонли😭


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

>объявление свойств в конструкторе


Хорошо хоть в тайпскрипте такого нет, да?
682 3033772
>>3033766
Нихуя горение. Ну ладно.

>чем пыха лучше тайпскрипта?


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

>20% это актуалочка


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

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

>80% это вордпресс


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

>гошники получают больше


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

>формошлепство на ларавель


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

>поднять приложение без ебли со сторонними веб серверами


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

>фронт, бек, десктоп


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

>нет ридонли😭


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

>объявление свойств в конструкторе


Хорошо хоть в тайпскрипте такого нет, да?
683 3033825
>>3033748
А я прихожу пообщаться с вкатунами.
Мимо другой вкатун
684 3033889
Лично я попробовал РНР ещё в универе и тогда он мне показался действительно языком, чтобы быстро говнокодить сайтики в процедурном стиле. Но сейчас я познакомился с ООП в РНР и могу сказать, что он теперь мало чем уступает джаве. И при этом сохраняет все преимущества интерпретируемого языка. Особенно удобно при работе с докером, что не надо постоянно перезапускать контейнер с новым жарником как в джаве, а он просто мапится на твой код и при первом же запросе выполняется. Удобно, быстро, нет лишнего геморроя.
685 3033914
>>3033889

>рантайм типизация, рантайм инкапсуляция, рантайм ООП


И это полезно... чем? Тем что с динамической типизацией можно срать в код? Плюс так плюс.
Дальше шизофазия какая-то пошла. Даже на два пункта не хватило.

>Откуда ты берёшь эту инфу? Из смишных мемов?


Оттуда же откуда и ты. Ты ведь сурс сразу дал.
https://w3techs.com/technologies/details/pl-php/8
Доля рынка кста опять упала.

>Я тебе написал, пиздуй сам проверять количество вакансий


>Алеша, какие нахуй "вакансии" на вордпресс? Вордпресс потому и популярен, что там программист не нужен.


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

>Пиздуешь на хх и узнаешь, что мидл+ разрабы получают


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

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

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

В общем я понял почему ты каждый пост виляешь сракой обходя отток задач и синьоров в го. Потому что ты чекнул и понял что там пизда. Го уже вполовину размером с пхп рынок в раше. А по синьорским задачам похоже уже перерос. И дальше будет только веселее.
686 3033915
Никто не будет переписывать.webm1,3 Мб, webm,
1920x1080, 0:03
687 3033925
>>3033914
Не будет никто ничего переписывать на го. Как пилили сайты на РНР, так и будут пились. А вот как раз судьба го пока неизвестна, его нишу может занять любой новый модный язык.
688 3033928
>>3033925
Никто не будет переписывать всякую хуйню. А вот все критические сервисы, которые приносят бабки будут. Тебе, дебилу, про то и пишут - все саме вкусное и прибыльное вымывается.

Ты скрины видел? Несколько лет назад никакого го в помине не было. А сейчас там синьорских вакансий больше чем на ларавеле.
И чьи же это задачи пишут на го бывшие пхпшники? Наверное у фронтендеров часть рынка спиздили.
689 3033940
>>3033928
Го занял нишу С/С++ в бэкенде. Я помню ещё в 2017 смотрел доклады мэйлру, где они хвастались, что переписали почту на го, а раньше у них она была на С++. А нишу РНР го ни как не займёт. Конкуренты РНР - это всякие питон с джангой, дотнет с асп.нет, может действительно на жс/тс какой-нибудь бэкенд высрут, но ему надо будет догнать по удобству и производительности разработку на РНР, что весьма сомнительно. Скорей появится какой-нибудь новый язык, который предложит новый подход к быстрой разработке сайтов. Типа как в своё время руби на рельсах совершил революцию и ускорил написание MVC-приложений.
690 3033950
>>3033940
Доо, сишники в го набижали. Вот они эти сишники в ряд:
https://hh.ru/vacancy/92525414
https://hh.ru/vacancy/91937785
https://hh.ru/vacancy/92207521
Почему эти долбоебы на ларавель ищут пхп макак с опытом go? Откуда вообще у пхп макак опыт го если это ниша сишников? Да потому что в крупных конторах это повсеместно, я блядь сам курс по го проходил бисплатно за счет конторы, и не потому что я его выклянчил, а потому что критические сервисы хотят на го переносить.
691 3034663
>>2975215 (OP)
По работе нужно массив разделов превратить в древовидную структуру. Изначальный массив и массив, который должен получиться:
https://codefile.io/f/oyqbaZY0Tm
То есть по порядку, если следующий уровень больше предыдущего уровня, значит он является подразделом.
Как можно решить эту задачу?
692 3034672
Мужики объясните какая норма задач разной сложности, сколько человекочасов в день вы тратите?
693 3034726
>>3034663
Задачу решать будем мы, а зарплату получишь ты? Классно устроился, брат
694 3034737
>>3034726
Так тут почти все в перспективе рассчитано на получение зп. Даже решение учебника ОПа
695 3034859
ПЕРЕКАТ >>3034858 (OP)
ПЕРЕКАТ >>3034858 (OP)
ПЕРЕКАТ >>3034858 (OP)
Тред утонул или удален.
Это копия, сохраненная 14 апреля в 11:40.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски