Этого треда уже нет.
Это копия, сохраненная 25 мая 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Клуб изучающих PHP #122 /php/ 1958281 В конец треда | Веб
Здесь мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

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

С чего начать

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

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

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

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

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

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

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

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

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

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

Что почитать

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

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

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

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

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

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

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

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

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

PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
3 1958338
Первый
Снимок экрана 2021-03-05 180013.jpg55 Кб, 766x619
4 1958434
5 1958465
>>1958434

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

Завтра ты захочешь сделать, чтобы при ошибке выводилась форма с введенными значениями, и эту функцию придется переделывать. А вот если ее сделать, как я написал, то не придется.
val.jpg47 Кб, 517x616
6 1958479
7 1958481
>>1958479

> trim($login)


У тебя trim вникуда делается, сама переменная $login после trim останется неизменной. Нужно писать так $login = trim($login);

> if ($login==false)


Можно убрать строчку сверху и написать компактнее:
if (!checkLogin($login)) {
...
}
8 1958496
>>1958481
вот у меня еще есть 3 формы.
можно чтобы сокр код
сделать проверку этих форм через OR в одну строку
типа
if (!checkLogin($login) or !checkCountry(x) or !checkPassword(y)) {
не валидно }
9 1958499
>>1958479

trim можно убрать из функции, все же ее задача - валидация, а не преобразование данных. Тогда можно будет сделать, чтобы функция либо возвращала текст ошибки, либо null, если все ок. В таком случае мы сможем выводить разные сообщения при разных ошибках.

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

Также, у тебя странно, что ты возврашаешь 0, но в if сравниваешь с false.

Здесь это не требуется, но если понадобится, чтобы функция возвращала более 1 значения, можно возвращать массив.
10 1958501
>>1958496

Будет лучше написать единую функцию для проверки всех полей сразу. Чтобы она принимала на вход список полей и возвращала список ошибок в них.
11 1958503
>>1958499

>Тогда можно будет сделать, чтобы функция либо возвращала текст ошибки,


а анон выше говорит что так делать нельзя
12 1958529
>>1958281 (OP)
А почему код ниже выводит 1?
<?php
$a=1;
echo $a++;
13 1958531
Я вкатыш и мне кажется шапка устарела. Что делать? php.net от а до я вылизать собираюсь, после этого на ларавельку пиздовать собираюсь, после этого пойду сразу миддлом за 100к+, т.к. живу в ДС и есть возможность работать в офисе, бок о бок с профи.
Какие подводные?
15 1958534
>>1958529
Потому что он сначала прибавляет единицу, но не перезаписывает в переменной. Если хочешь, шобы сразу выводило, юзай ++$a;
16 1958543
>>1958534
Немного непонятно. А почему тогда в гайде написано что $a++ это $a=$a+1 ?
17 1958564
>>1958543
Не читай гайд из шапки, его писал двачер блять. Двачеры априори не могут писать гайды. Учи на php.net + google. Всё.
18 1958567
>>1958543
>>1958564
Написано то всё верно. Только в гайде походу не уделилось времени этому достаточно.
$a = 0;
echo $a++; //выводит ноль при том, что а будет единицей.

$a = 0;
echo ++$a; //а единица и выводит единицу
19 1958576
>>1958543
Это просто бездумно пизданутая хуйня из си.
Просто всегда делай $var++ и не пихай его в выражения, а отдельной строчкой.
20 1958580
>>1958567
Я это понял, но я не понимаю как это работает.
Получается $a++ это оператор, который возвращает значение $a вызывающей его функции, а после ее выполнения увеличивает ее на единицу?
21 1958585
>>1958580

> я не понимаю как это работает


Я тебе даже ссылку скинул на офф документацию, ты хоть открывал её?
валидатор2.jpg81 Кб, 822x679
22 1958592
>>1958501
не взлетела попытка
23 1958648
>>1958592
Почитай для чего используется оператор return
24 1958649
>>1958648
чтобы вернуть значение в куда-то,здесь в переменную
25 1958650
>>1958649

>для чего используется оператор return


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



Всегда было любопытно, откуда берутся такие логические цепочки рассуждений, например. Они же и не дедуктивны и не индуктивны.
26 1958652
>>1958650
смысле блять? ретурн на английском вернуть. че не так?
27 1958659
>>1958650
а как?
28 1958663
>>1958649

> чтобы вернуть значение в куда-то


Не в куда-то, а ИЗ функции

> в переменную


В переменную значение записывается, а не возвращается

https://www.php.net/manual/ru/functions.returning-values.php
29 1958707
>>1958663
Нет, именно в куда-то. В место вызова функции.
30 1958788
Я тут спрашивал в прошлом треде о авторизации для AJAX запросов.
В общем сделал так:
При каждой авторизации юзера создается/обновляется токен
При выходе с аккаунта планировал токен удалять, но понял что это приведет к ошибкам при двух и более одновременных сессиях/SPOILER]
При каждом дергании токена ( эвент retrieved ) проверяется, не протух ли он. Если протух, то токен обновляется.
Токен пробрасывается в html в мета тег. При отправлении AJAX запроса в javascript, он берется оттуда и пробрасывается в header
В миддлваре, при обнаружении AJAX реквеста с токеном в хедере, реквесту назначается юзер с таким токеном ( офк, если токен не протухший )

Что меня напрягает:
1) Нулевая безопасность. Если я получу хоть на момент доступ к ПК жертвы, я могу, например, сфотографировать себе токен жертвы, после чего без особой сложности выполнять на своем ПК любые операции от ее имени, просто подменяя в исходном коде свой токен на токен жертвы. Конечно, пока токен не протухнет или жертва не перелогинится.
2) Есть вероятность того, что токен протухнет между его пробрасыванием в html и отправкой самого запроса. Это как-то несерьезно

Действительно ли это весомые проблемы? И если да, то как они решаются? Есть идея делать очень маленькое время протухания, например 60 секунд, и каждые 55 секунд запрашивать по аяксу новый токен, пока не протух старый. Но это по-моему как-то слишком.
31 1958844
Как вывести этот ебучий массив arr, постоянно ошибку выдает

http://sandbox.onlinephpfunctions.com/code/141c2283841d204f4b9e00b4c52123e4324e8d79
32 1958847
>>1958788
Очевидная дополнительная проверка на мета данные браузера и другую тех информацию от юзера.
33 1958861
>>1958543

$a++ увеличивает $a на 1, но (если ты его используешь в выражении или команде) возвращает исходное значение $a до увеличения. То есть, если написать:

$a = 1;
$a++;
echo $a;

То выведется 2. А если написать

$a = 1;
echo $a++;

то выводится 1, хотя $a увеличивается и становится равно 2 (что легко проверить, дописав echo $a в конец).

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

$a++;

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

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

>>1958564

php.net читать конечно полезно, но там не учебник, а мануал и он больше рассчитан на тех, кто уже знает какой-нибудь язык программирования, вроде Си, и кому нужно только выучить отличия. Мануал на php.net не очень подходит для начинающих с нулевыми знаниями, как мне кажется.
34 1958864
>>1958580

Да, он увеличивает переменную, но возвращает значение до увеличения. Ты можешь проверить это кодом

$a = 1;
echo $a++; // 1
echo $a; // 2

Зачем так сделано? Логику тут найти трудно. Спроси у автора языка Си, зачем он так придумал. Я подозреваю, что просто потому что в компьютерах тех времен была команда для этого, вот он и скопировал ее в язык.
35 1958867
>>1958592

Ты зачем-то создаешь переменные, которые никак дальше не используются. Вот смотри:

function x() {
return $a = "текст";
}

Эта строка создает переменную $a, записывает в нее значение "текст", затем возвращает его и выходит из функции. При выходе из функции переменная $a уничтожается. Зачем ее тогда было создавать? Нужно писать просто:

return "текст";

У тебя команда

return $errors[] = "текст";

создает массив, но возвращает она не массив, а строку "текст". Зачем создается массив, непонятно, так как он никак не используется и уничтожается при выходе из функции. Если ты хотел вернуть массив из 1 элемента, то надо писать так:

return ["текст"];

Хотя правильнее было бы сначала собрать все ошибки в массив и в конце функции вернуть его:

$errors = [];
$errors[] = "текст";
$errors[] = "текст";
return $errors;

Также, функции надо называть осмысленно. Не form(), а check_form(), validate_form().
35 1958867
>>1958592

Ты зачем-то создаешь переменные, которые никак дальше не используются. Вот смотри:

function x() {
return $a = "текст";
}

Эта строка создает переменную $a, записывает в нее значение "текст", затем возвращает его и выходит из функции. При выходе из функции переменная $a уничтожается. Зачем ее тогда было создавать? Нужно писать просто:

return "текст";

У тебя команда

return $errors[] = "текст";

создает массив, но возвращает она не массив, а строку "текст". Зачем создается массив, непонятно, так как он никак не используется и уничтожается при выходе из функции. Если ты хотел вернуть массив из 1 элемента, то надо писать так:

return ["текст"];

Хотя правильнее было бы сначала собрать все ошибки в массив и в конце функции вернуть его:

$errors = [];
$errors[] = "текст";
$errors[] = "текст";
return $errors;

Также, функции надо называть осмысленно. Не form(), а check_form(), validate_form().
36 1958870
>>1958788

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

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

Я понимаю, если бы у тебя было API для сторонних приложений, но у тебя его нет.

> Если я получу хоть на момент доступ к ПК жертвы, я могу, например, сфотографировать себе токен жертвы,



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

> Действительно ли это весомые проблемы? И если да, то как они решаются? Есть идея делать очень маленькое время протухания, например 60 секунд, и каждые 55 секунд запрашивать по аяксу новый токен, пока не протух старый. Но это по-моему как-то слишком.



Не очень понятно, зачем делать короткий срок жизни токена и мучаться с продлеванием, если можно сделать время жизни токена больше, чем время жизни авторизационной куки и не мучаться.
37 1958871
>>1958867
тут фишка в чем,изначально я просто сделал проверку.где просто проверяли и выводили все найденные ошибки,но выполнение проги не останавливается!
можно конечно после каждого echo сделать die,но токга прога выведет первую попавшуюся ошибку и завершит процесс
38 1958917
Какие версии встречаются сейчас в живых проектах?
Произошел перекат на 7 или как попадется?
Вымер ли рынок искаробочных хостингов?
39 1958953
>>1958503

Возможно, кто-то что-то не так понял. Ты можешь сделать, чтобы функция проверки возвращала true/false, но тогда ты не сможешь вывести, в чем именно ошибка. Лучше сделать функцию, которая либо вернет текст ошибки, либо null, если ошибок нету. Либо можно возвращать массив ошибок, если он пустой, то ошибок нет. С массивом плюс в том, что можно вернуть несколько разных ошибок сразу.
40 1958954
>>1958871

Я не понял, в чем проблема. Если ты хочешь при ошибках делать die(), то поставь if с нужным условием.
41 1958959
>>1958954
я написал же,если в первой проверке есть ошибка,он выведет эту ошибку и умрет.не проверив следующие условия.
вроде все и правильно,не не идеально
42 1958962
>>1958953

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


попробую с массивами зайти еше раз
43 1959018
>>1958870

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


А как еще мне, например, отправить коммент от юзера по аяксу? Юзер в аякс запросе же никак не идентифицируем. Если я просто пошлю запрос, $request->user() будет возвращать null.
Алсо, здесь мне так и посоветовали делать: >>1955771 →
Или ты предлагаешь мне через яваскрипт как-то вытягивать данные из кукисов и сессии? Это же вроде небезопасно и по умолчанию невозможно, нет разве?

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


Чтобы когда хакер украдет токен, у него не было времени с ним что-то плохое сделать. Но это все похоже мои шизоидные теории, так что не обращай внимания.
44 1959068
>>1958867
а как извлечь извлечь из функ,если return['$login','$country','$password','$email'];?
45 1959075
>>1959018

> Юзер в аякс запросе же никак не идентифицируем. Если я просто пошлю запрос, $request->user() будет возвращать null.



Это почему? Аякс-запрос отправляется на сервер вместе с куками, следовательно авторизационная кука (и данные в сессии) должны быть доступны. Или в Ларавел это как-то специально ограничено?

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



А если хакер украдет авторизационную куку? Что, заставлять пользователя каждую минуту перелогиниваться?

Я думаю, кто-то что-то напутал. Токены используются в API, к которым обращаются внешние приложения. Там не используются авторизационные куки, нет сессии, потому нужен токен. Также токен может использоваться, чтобы ограничить его использование по времени или ограничить набор прав для него (то есть токен может давать меньше прав, чем полноценный логин).
46 1959079
>>1959068

Не понял вопрос. Извлечь что? Если тебе надо извлечь значения из массива, то можно писать либо:

$login = $array[0];
$country = $array[1];

Либо

[$login, $country, $password ] = $array;
47 1959087
>>1959079
но это массив в функции,просто так его оттуда не достать
делать через list()?
48 1959096
>>1959087

Приведи пример кода и что именно непонятно. Я вроде выше все описал.

list() уже устарел, сейчас массив разбирают с помощью квадратных скобок, как описано тут https://www.php.net/manual/ru/migration71.new-features.php#migration71.new-features.symmetric-array-destructuring
49 1959102
>>1959096
вот здесь хрен знает какая попытка
рядом попытка в ООП
50 1959111
>>1959102

В функции последний if очень странный, смотри сам:

- если массив ошибок пуст (ошибок нет), вернуть пустой массив
- если ошибки есть, то не вернуть ошибки, а вернуть массив с 4 строчками (зачем?)

Нужно было просто написать return $error и все. Зачем написан этот if?

Справа, увы, не ООП, а просто код со словом class. У тебя все сделано статикой. То есть ты не можешь, например, создать 2 объекта для 2 разных форм. И опять же, у тебя все вперемешку - и проверка данных, и вывод результата сделан вместе. Это не ООП.
51 1959193
>>1959075
Бля, спасибо тебе огромное что на путь истинный направил.
Жаль что ты не ответил мне еще в том треде, а то я всё это время потратил на то, чтобы нормально осуществить эту авторизацию, а оказалось что я говна бесполезного накостылил и все с коробки работает.
Просто я был почему-то уверен, что JS с куками взаимодействовать не должен.
Плюс, я не с головы взял, что $request->user() null возвращает. У меня действительно такое было, только я в тот момент не подумал, что это могла просто авторизационная кука протухнуть. А наверняка так и было.
Ну я и лох конечно. Еще и весь этот позор на гитхаб запушил.
52 1959239
Тут есть анончик среднего уровня, который будет иногда помогать с заказиками?

Новичек-кун, @kotovoi
Снимок экрана 2021-03-06 191738.jpg64 Кб, 751x697
53 1959263
>>1959111
а так ООП?
вроде работает
54 1959281
>>1959263
О разделении ответственности ( на конкретном примере, что функция не должна и выводить что-то на экран, и проверять значение ) тебе уже писали.
О именовании тоже писали сотню раз. Ну какое нахуй $var?
О указании тайпхинтов тоже писали.
В чем логика, что функции lenght() и symbols() еще и возвращают логин?
И самое главное, ты проебал всю изюминку ООП - инкапсуляцию. Зачем вообще нужен такой класс, у которого я должен явно вызывать методы проверки валидности по каждому правилу?
55 1959282
>>1959263
а не,оно потом сможет ошибку записать в БД
56 1959315
>>1959263

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

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

Вообще, чтобы разобраться в ООП, тебе стоило бы начать с более простых задач вроде тех, что перечислены тут >>1958238 → А то ты тыкаешься вслепую, пытаясь писать ООП код.

Также, научись форматировать код по PSR-1 и PSR-12. Если ты не можешь настроить плагин к редактору, то научись писать сразу с правильным форматированием. Во втором посте треда есть информация про форматирование кода. Я проверил - для VS Code частично помогает этот плагин: https://marketplace.visualstudio.com/items?itemName=kokororin.vscode-phpfmt
57 1959399
>>1959315
тыб ему просто про паттерный ооп написал солид, драй и тд, банду четырех пусть читнет.
мимокрестораб
image.png68 Кб, 1279x724
58 1959561
function longest($a, $b) {
return count_chars($a.$b, 3);
}
echo longest("hskfkwiiweqqaaa", "lllfkoioeooqioaskzz");
//вывод — aefhikloqswz

Классная функция. Вдруг кому полезно будет.
59 1959886
>>1958531

>Какие подводные?


Вкатываться в пыху, проживая в дс
60 1959894
>>1958917
В основном 7ые версии на проде сейчас. Найти что-то на 5ых версиях нужно постараться.
61 1959901
>>1959263
Бросай это дело. Программирование явно не для тебя.
Впервые вижу, чтобы так долго безрезультатно вникали в основы кодинга
62 1959912
>>1959901

Но это единственный путь иметь хоть какую-то норм зпшку здесь((
63 1959915
>>1959901

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


значит он читал не те книжки или вообще не читал, погромирование это не искусство, а ремесло, формошлепай и прибудет с тобой трудовой стаж.
нет бы вынести Design Patterns, чистый код мартина, полюбому есть специфический учебник по пыхе по типу "как перестать писать говно", в шапку.
64 1959959
>>1959886
а куда вкатываться? для джавы, го, си++, сишарп я туповат. в питоне вообще дата саенс и матан, там мне дорога закрыта. я с математикой вообще не в ладах
65 1959970
>>1959901
нет.
я должен доделать проэкт до финала
66 1959976
>>1959915
читал,и не одну-в целом поверхностое говно для полных нулей,бер рил прожект.
приходиться много гуглить,но там 99% процедурный код-зато работает и понятней
67 1959990
Подскажите, кто в курсе, какие тестовые задания сейчас дают джунам на ларавел?
Из того, что я находил в интернете - дают задание написать какой-нибудь CRUD. Но, возможно, сейчас какие-то ещё появились заебы?
Видел ещё инфу, что кто-то требует покрывать тестами весь код. Это действительно так важно сейчас работодателям или можно без этого устроиться? Общие знания о том, как тестами покрывать у меня есть, но мне лень было с этой еботней заморачиваться. Впрочем, если это так важно работодателям, то придется хули
68 1960016
>>1959990

>дают задание написать какой-нибудь CRUD


тот же круд везде это не системщина

>Это действительно так важно


да но времени не всегда хватает
69 1960020
>>1959976

>бер рил прожект


мне уже не надо, но если код с прода != хороший код, шаблоны проектирования хотя нужно иметь представление что это, тем более на собесе за них спрашивают в любом яп.
70 1960025
Решил задачку про список студентов от ОПа
https://github.com/codedokode/pasta/blob/master/student-list.md

ОП, аноны, можете посмотреть ?
https://github.com/qqzooi/student-list
71 1960031
>>1960020
я не собираюсь работать кодером
72 1960035
Меня заебал шарп, потому что на всех работах требуют не просто пилить бек, но и фронт на ангуляре/вью/реакте ну и прочей хренью заниматься, типа, блядь - лезть в залупу на сокетах хуячить, а я в универе наигрался с сокетами.
Так вот, в моей мухосране 2 варианта карьеры бекендера: шарп и пхп.
Вот и я заинтересовался ПХП. Поясните, не начнется ли с определенного момента эта же залупа с тем, что не достаточно просто пилить бек? Как я понимаю, чтобы вкатиться - нужно симфонию и/или ларавель покурить, да сделать какой-нибудь интернет-магазин, чтобы закрепить знания или что-то еще там нужно особое знать?
73 1960038
>>1960031
ты потом откроешь свой же код и нихуя там не поймешь/надо будет его расширять а там пиздец.
74 1960039
>>1959959
Ты реально затупок, один из популярнейших фреймворков веба как раз на питоне
75 1960043
>>1960038
я согласен в целом,что даже эстетически мой код всрат-но рабочая процедурщина.Короче,как вы говорите-херак и в продакшен
76 1960052
>>1960043
дело не в эстетике, процедурный код забит гвоздями и его проще переписать чем расширить, слишком абстрактный код перегружен и хрупок, одно изменение может потянуть пол кода.
77 1960057
>>1960052

>слишком абстрактный код


как раз хотел спросить про ООП,если много кода,много связей,как вы ориентируетесь в нем,особенно если там несколько слоев?
78 1960062
>>1959959
Я не затупок. Чтобы изучить джанго, надо понять от а до я питон. Как мне кажется, без матана ты его хуй поймёшь.
79 1960065
>>1960062

>без матана ты его хуй поймёшь


Сказки питономакак
80 1960066
>>1960057
есть принципы проектирования solid, dry, kiss, grasp и другие, вот их и придерживаемся, когда несколько человек пишут в одном стиле то каша более понятная.
81 1960086
>>1960065
То есть питон на самом деле можно выучить без матана?
82 1960146
>>1959990
Задам смежный вопрос: насколько часто на джуна вообще просят тестовое? Как по мне это ебанистика полная. За пару минут беседы же можно вполне +- понять уровень человека, если не задавать вопросы с листочка. Да и есть у меня гитхаб допустим, там интересные проекты которые месяцами делались, за каждую строчку могу пояснить и доказать что не верблюд. В чем прикол заставлять соискателей делать для каждого работодателя какой-то шаблонный круд с тестами, еще и с ограничением в какие-то условные 2 дня? При том что для меня эти два дня могут являться двумя вечерами после 13-часового таскания бетонных хуев, а для какого-то Ваньки это 48 часов, за которые это все дело даже обезьяна нагуглит и сделает. И какой вообще уровень эти круды могут показать?
83 1960217
>>1960146

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


нет нельзя
84 1960279
>>1959959

>а куда вкатываться?


Явно не в разработку.
Вон тестером попробуй, девопсом, фронтом, аналитиком. Но в бек путь заказан.
85 1960281
>>1960043

>даже эстетически мой код всрат-но рабочая процедурщина


Не, ты даже до рабочей процедурщины не дошел еще.
86 1960282
>>1960035
А на пхп попросят пилить фронт на жиквери
87 1960284
>>1960146
Если у тебя есть гитхаб и можешь пояснить за код там - навязывай его вместо тествого, типо чтобы время не терять.
Суть в том, чтобы убедить работодателя, что ты не хуй с горы и можешь код писать.
88 1960289
>>1960035
На пхп такой залупы больше. Проекты проще, квалификация исполнителей часто ниже, работодатели привыкли экономить на труде, им не нужны хорошие беки, фронты, дизайнеры, поэтому ты будешь этим всем заниматься. Не одновременно же! Сначала одним, потом другим, так что не пизди, что двоя зряплата должна быть как у двух-трех спецов.
89 1960352
>>1960035

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



Ору, блядь. Выкатывайся из профессии нахуй, наигрался он.
operaNWwQ4Kkm7a.png13 Кб, 1120x234
Помогите с Laravel 90 1960459
Может кто подсказать как сделать так что бы при выборе option менялось значение цены которое соответствует для имени
91 1960472
>>1960459
Этим JS занимается.
92 1960520
>>1960279
это схуя ли? Фронт для меня дрочь дичайшая, не хочу даже туда соваться. Хочу в бэк и пойду в бэк, на твоё мнение мне вообще поебать, выблядос
93 1960537
>>1960086
Ну совсем без матана нет, нужно уметь складывать, вычитать, делить, умножать, иногда ещё в степени возводить и корни извлекать, но это редко. Ещё желательно синус от >>1960066
косинуса отличать, но не обязательно.
94 1960562
>>1960520
Вангую, зайду через год в тред, а ты всё вкатываешься
95 1960568
>>1959901

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

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

>>1959399

Да не нужны тут никакие паттерны, чтобы форму проверить.
1615199065420.png315 Кб, 822x679
96 1960572

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


Лол
97 1960573
>>1960537
Ну на таком уровне знаю, конечно, не совсем же ебанат.
Даже производные смогу решить, лол.
>>1960562
Буду рад вновь увидеть червя тут, залетай
98 1960578
>>1960572
Тоже не понимаю, почему эта чмоня агрится?
Ему же советуют не тратить время зря.
Он же даже не сможет пояснить, что каждая строчка тут делает.
99 1960606
>>1960568

>Что значит "впервые вижу"? Ты что, препод и тебе есть с чем сравнивать?


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

>К тому же ты даже не знаешь сколько времени он потратил на изучение, а пишешь, про "так долго вникали"


Ну вот он как минимум неделю пытается простой скриптик накидать. Причем не воспринимает ни слова, что ему пытаются сказать.

>К тому же, основы кодинга - что какая команда делает - он как раз изучил


Он соврешенно не понимает флоу кода, тупо рандомно вызывает встроенные функции и операторы

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


Ему нужны основы, он даже без функций код не может написать, или написать код одной функции
100 1960615
>>1960606

>он даже без функций код не может написать


код без функций? че?
101 1960643
>>1960615
Без своих функций, обычную лапшу
102 1960646
>>1960025

> UNIQUE KEY `unique_index` (`email`,`token`)


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

> return json_decode(file_get_contents($file));


Советую добавлять флаг JSON_THROW_ON_ERROR, без него при неправильном JSON функция просто вернет null и не выдаст никакой ошибки (см. мануал по json_decode).

Также, мне кажется, JSON лучше преобразовывать в массив, а не в объект. Так как stdСlass в PHP - это непонятное недоразумение, это по сути не объект, а просто массив (так как у него не определен список полей и нет методов), только без функций для работы с ним. Зачем stdClass нужен, я не понимаю. Если ты хочешь мапить конфиг на объект, то сделай для этого класс и десериализуй JSON в объект этого класса. Если не хочешь, то наверно лучше будет использовать массив.

> $container->register('request'


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

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

Роутер логично положить в контейнер, но нелогично, что мы передаем реквест ему в конструктор. Правильнее сделать в нем метод route($request) и тогда один роутер сможет обработать любое количество реквестов. А вот список роутов обычно передают в конструктор роутера. Так роутер будет чуть более универсальным и в нем не будет захардкожен путь к конфигу (и ему вообще не важно будет, откуда берется конфиг).

Соответственно, в App мы бы создавали новый реквест и передавали в роутер. А тот передавал бы реквест и параметры роутинга в контроллер.

Класс Db не особо нужен. У меня такое ощущение, что в каких-то других учебниках зачем-то учат его делать и потому он появляется в коде в каждой работе. Класс Db (создание объекта PDO) полностью можно перенести в bootstrap.php. Ты ведь для других объектов не делаешь классы-фабрики, а для PDO почему-то сделал.

> @var DIContainer


> private DIContainer $container;



> @param DIContainer $container


> public function __construct(DIContainer $container)



> @param int $statusCode


> @return Response


> private function createResponse(int $statusCode = 200): Response



Не стоит писать phpDoc, если он не несет никакой новой информации, а просто дублирует указанный в коде тип.

> error_log($exception->__toString());


Ошибки типа 404 можно не логгировать (они все равно логгируются на веб-сервере вроде nginx, если нужно).

Насчет исключений, я не думаю, что все исключения должны наследовать ApplicationException. Как я понял, этот класс обозначает исключение, к которому привязан определенный HTTP код и сообщение на странице ошибки. Но если взять тот же ContainerException (или DbException), какое отношение контейнер имеет к HTTP-ошибкам? Никакого. Контейнер не должен решать, какую страницу ошибки выводить и что на ней писать, он должен просто сигнализировать об ошибке и все. Потому он не должен наследоваться от ApplicationException. От него должны наследоваться только исключения вроде ошибок доступа (код 403), ошибки 404 и тд.

Получается нарушение принципа единой ответственности. Контейнер или БД, выбрасывая исключение, определяют, какую страницу ошибки показать, с каким кодом и каким сообщением. Это не их ответственность.

> $split = $this->getSplitRealPath();


> $request->setRequestBody($split);



Этот момент в роутере выглядит коряво. Почему-то значения GET/POST проставляются в Request только после роутинга. Логичней проставлять их при создании Request, а позже, при необходимости, добавлять значения параметров через $request->setAttributes. Хотя, мне не очень нравится, что в реквест вообще что-то дописывается. По идее же реквест представляет пришедший от пользователя запрос, а нем нет никаких атрибутов. В нем есть URL, GET, POST и все. Я знаю, что некоторые фреймворки дописывают атрибуты в реквест, но это, на мой взгляд, выглядит коряво. Логичнее было бы параметры после роутинга не записывать в реквест, а просто передавать в контроллер.

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

actionIndex и actionSearch можно было бы объединить вместе, это очень похожие вещи - выборка из таблицы.

> private function getHtml(string $items): string



Это конечно корявенько, что HTML формируется не через шаблон. Можно было сделать, чтобы Pagination просто возвращал бы данные для отображения пагинатора, а HTML формировать в шаблоне из этих данных.

Неаккуратно сделано, что CookieHelper работает в обход Request/Response и ставит куки напрямую.

> public function getCsrfToken(): string


> return ($this->cookie->getCookie('csrf')) ?: $this->csrfToken;


Логика работы этой функции непонятна. Она возвращает непонятно что.

> if ($_SERVER['REQUEST_METHOD'] == 'POST') {


Это логичнее делать через $request->isPost().

> private int $outputRows;


Мне кажется, это стоило просто прописать в контроллере. StudentTableGateway не отвечает за отображение данных и не знает, по сколько строк надо выводить.

В функции getAll() наверно не надо было заморачиваться с джойном. Обычно делают так, что пагинация работает после сортировки, то есть сначала записи сортируются и затем из них выбирается запрошенная страница. Просто ORDER BY ... LIMIT ....

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

В роутинге не стоило указывать в регулярках GET-параметры. Ведь никто не гарантирует, что они придут именно в таком порядке, как описано:

> ?key=(id|name|surname|sgroup|score)&sort=(asc|desc)(&page=[1-9][0-9])?



Обычно при роутинге GET-параметры игнорируют и смотрят только на path.

> (isset($student->gender) && $student->gender == 'male'


Тут стоило использовать константу, наверно.

В общем, сделано хорошо. Видно, что ты поковырялся в сторонних фреймворках.

Советую также сделать описание в README и добавить скриншоты, если ты захочешь потом показывать эту работу в резюме.
102 1960646
>>1960025

> UNIQUE KEY `unique_index` (`email`,`token`)


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

> return json_decode(file_get_contents($file));


Советую добавлять флаг JSON_THROW_ON_ERROR, без него при неправильном JSON функция просто вернет null и не выдаст никакой ошибки (см. мануал по json_decode).

Также, мне кажется, JSON лучше преобразовывать в массив, а не в объект. Так как stdСlass в PHP - это непонятное недоразумение, это по сути не объект, а просто массив (так как у него не определен список полей и нет методов), только без функций для работы с ним. Зачем stdClass нужен, я не понимаю. Если ты хочешь мапить конфиг на объект, то сделай для этого класс и десериализуй JSON в объект этого класса. Если не хочешь, то наверно лучше будет использовать массив.

> $container->register('request'


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

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

Роутер логично положить в контейнер, но нелогично, что мы передаем реквест ему в конструктор. Правильнее сделать в нем метод route($request) и тогда один роутер сможет обработать любое количество реквестов. А вот список роутов обычно передают в конструктор роутера. Так роутер будет чуть более универсальным и в нем не будет захардкожен путь к конфигу (и ему вообще не важно будет, откуда берется конфиг).

Соответственно, в App мы бы создавали новый реквест и передавали в роутер. А тот передавал бы реквест и параметры роутинга в контроллер.

Класс Db не особо нужен. У меня такое ощущение, что в каких-то других учебниках зачем-то учат его делать и потому он появляется в коде в каждой работе. Класс Db (создание объекта PDO) полностью можно перенести в bootstrap.php. Ты ведь для других объектов не делаешь классы-фабрики, а для PDO почему-то сделал.

> @var DIContainer


> private DIContainer $container;



> @param DIContainer $container


> public function __construct(DIContainer $container)



> @param int $statusCode


> @return Response


> private function createResponse(int $statusCode = 200): Response



Не стоит писать phpDoc, если он не несет никакой новой информации, а просто дублирует указанный в коде тип.

> error_log($exception->__toString());


Ошибки типа 404 можно не логгировать (они все равно логгируются на веб-сервере вроде nginx, если нужно).

Насчет исключений, я не думаю, что все исключения должны наследовать ApplicationException. Как я понял, этот класс обозначает исключение, к которому привязан определенный HTTP код и сообщение на странице ошибки. Но если взять тот же ContainerException (или DbException), какое отношение контейнер имеет к HTTP-ошибкам? Никакого. Контейнер не должен решать, какую страницу ошибки выводить и что на ней писать, он должен просто сигнализировать об ошибке и все. Потому он не должен наследоваться от ApplicationException. От него должны наследоваться только исключения вроде ошибок доступа (код 403), ошибки 404 и тд.

Получается нарушение принципа единой ответственности. Контейнер или БД, выбрасывая исключение, определяют, какую страницу ошибки показать, с каким кодом и каким сообщением. Это не их ответственность.

> $split = $this->getSplitRealPath();


> $request->setRequestBody($split);



Этот момент в роутере выглядит коряво. Почему-то значения GET/POST проставляются в Request только после роутинга. Логичней проставлять их при создании Request, а позже, при необходимости, добавлять значения параметров через $request->setAttributes. Хотя, мне не очень нравится, что в реквест вообще что-то дописывается. По идее же реквест представляет пришедший от пользователя запрос, а нем нет никаких атрибутов. В нем есть URL, GET, POST и все. Я знаю, что некоторые фреймворки дописывают атрибуты в реквест, но это, на мой взгляд, выглядит коряво. Логичнее было бы параметры после роутинга не записывать в реквест, а просто передавать в контроллер.

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

actionIndex и actionSearch можно было бы объединить вместе, это очень похожие вещи - выборка из таблицы.

> private function getHtml(string $items): string



Это конечно корявенько, что HTML формируется не через шаблон. Можно было сделать, чтобы Pagination просто возвращал бы данные для отображения пагинатора, а HTML формировать в шаблоне из этих данных.

Неаккуратно сделано, что CookieHelper работает в обход Request/Response и ставит куки напрямую.

> public function getCsrfToken(): string


> return ($this->cookie->getCookie('csrf')) ?: $this->csrfToken;


Логика работы этой функции непонятна. Она возвращает непонятно что.

> if ($_SERVER['REQUEST_METHOD'] == 'POST') {


Это логичнее делать через $request->isPost().

> private int $outputRows;


Мне кажется, это стоило просто прописать в контроллере. StudentTableGateway не отвечает за отображение данных и не знает, по сколько строк надо выводить.

В функции getAll() наверно не надо было заморачиваться с джойном. Обычно делают так, что пагинация работает после сортировки, то есть сначала записи сортируются и затем из них выбирается запрошенная страница. Просто ORDER BY ... LIMIT ....

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

В роутинге не стоило указывать в регулярках GET-параметры. Ведь никто не гарантирует, что они придут именно в таком порядке, как описано:

> ?key=(id|name|surname|sgroup|score)&sort=(asc|desc)(&page=[1-9][0-9])?



Обычно при роутинге GET-параметры игнорируют и смотрят только на path.

> (isset($student->gender) && $student->gender == 'male'


Тут стоило использовать константу, наверно.

В общем, сделано хорошо. Видно, что ты поковырялся в сторонних фреймворках.

Советую также сделать описание в README и добавить скриншоты, если ты захочешь потом показывать эту работу в резюме.
103 1960670
>>1960643
лапша это неструктурированный код, он может работать.
104 1960740
>>1960646

> Из-за этого у тебя Request и Router получаются спутаны друг с другом, а лучше бы если они были независимы.


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

> Это конечно корявенько, что HTML формируется не через шаблон.


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

> В функции getAll() наверно не надо было заморачиваться с джойном.


Как раз и сделал через джойны для пагинации. Чтобы происходила сортировка только для тех данных, которые отображаются на странице. Если делать без джойнов, то получится, что сначала выполняется сортировка, а только потом LIMIT X, Y. Данные на N странице одни, а после сортировки другие. Как по-другому сделать (если вообще можно по-другому сделать на стороне бека) - не знаю

Спасибо большое, Анон, что указал на косяки и что можно исправить. Как думаешь, можно уже пытаться по собесам походить ?
105 1960782
>>1960646

> Этот момент в роутере выглядит коряво. Почему-то значения GET/POST проставляются в Request только после роутинга.


Вспомнил, почему так вообще получилось. Получилось так из-за того, Request разбирает не только GET/POST, но еще и может разбирать параметры из маршрутов, н.р маршрут:
user/(id/[0-9]+) => user/actionView/$1
Соответственно, чтобы разобрать параметры, которые заданы через маршрут, ему нужно дергать метод роутера (getSplitRealPath), который как раз получает путь user/actionView/$1 на основе запрошенного маршрута. По итогу придется либо отказываться от этого, либо будут повторяющиеся методы в разных классах, ну или зависимость
106 1961059
Здравствуй, мудрый Анон! Я >>1941113 → -хуй, которому ты указал на криворукое решение на представление чисел в текстовой форме.
Я немножко подтянул теорию, последовал твоим советам и родил это:
https://ideone.com/HSjBXD

Критикуй, Анонче!
Спасибо!
107 1961264
>>1960740

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



Можно сделать так: делаем отдельный HTML-шаблон и в него передаем объект Paginator. Шаблон выводит HTML, а за подробностями (какие цифры и ссылки выводить) обращается к Paginator.

Генерация HTML в коде плохая идея, так как такую верстку трудно поддерживать, разбираться в ней, вносить правки.

> Если делать без джойнов, то получится, что сначала выполняется сортировка, а только потом LIMIT X, Y. Данные на N странице одни, а после сортировки другие. Как по-другому сделать (если вообще можно по-другому сделать на стороне бека) - не знаю



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

И еще, обычно при смене сортировки пагинация сбрасывается на первую страницу.

> Как думаешь, можно уже пытаться по собесам походить ?



Я не HR. Посмотри требования к вакансиям. Согласись сделать тестовое задание, возможно оно по сложности будет как эта задача или проще.

>>1960782

> Получилось так из-за того, Request разбирает не только GET/POST, но еще и может разбирать параметры из маршрутов, н.р маршрут:


> user/(id/[0-9]+) => user/actionView/$1



Это $1 в Симфони называют "атрибутами" и роутер после разбора URL помещает их в $request->attributes. Ты бы мог тоже сделать в реквесте массив для атрибутов и методы get/set для него. Но мне кажется, это коряво. Получается, объект Request знает что-то о роутинге, хотя он должен лишь представлять полученные от пользователя данные. Было бы корректнее передавать атрибуты вроде $1 в метод контроллера, например так:

public function actionView(Request $r, array $attributes)

Или даже так, с использованием рефлексии по имени параметра определять, что туда передать:

public function actionView(Request $r, int $id)

В Симфони атрибуты реквеста используются и для других вещей - например, код может до вызова контроллера определить город пользователя и сохранить в атрибутах. А контроллер его оттуда возьмет. Но опять же, мне кажется, это коряво, а реквест из-за атрибутов превращается в свалку нетипизированных данных.
107 1961264
>>1960740

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



Можно сделать так: делаем отдельный HTML-шаблон и в него передаем объект Paginator. Шаблон выводит HTML, а за подробностями (какие цифры и ссылки выводить) обращается к Paginator.

Генерация HTML в коде плохая идея, так как такую верстку трудно поддерживать, разбираться в ней, вносить правки.

> Если делать без джойнов, то получится, что сначала выполняется сортировка, а только потом LIMIT X, Y. Данные на N странице одни, а после сортировки другие. Как по-другому сделать (если вообще можно по-другому сделать на стороне бека) - не знаю



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

И еще, обычно при смене сортировки пагинация сбрасывается на первую страницу.

> Как думаешь, можно уже пытаться по собесам походить ?



Я не HR. Посмотри требования к вакансиям. Согласись сделать тестовое задание, возможно оно по сложности будет как эта задача или проще.

>>1960782

> Получилось так из-за того, Request разбирает не только GET/POST, но еще и может разбирать параметры из маршрутов, н.р маршрут:


> user/(id/[0-9]+) => user/actionView/$1



Это $1 в Симфони называют "атрибутами" и роутер после разбора URL помещает их в $request->attributes. Ты бы мог тоже сделать в реквесте массив для атрибутов и методы get/set для него. Но мне кажется, это коряво. Получается, объект Request знает что-то о роутинге, хотя он должен лишь представлять полученные от пользователя данные. Было бы корректнее передавать атрибуты вроде $1 в метод контроллера, например так:

public function actionView(Request $r, array $attributes)

Или даже так, с использованием рефлексии по имени параметра определять, что туда передать:

public function actionView(Request $r, int $id)

В Симфони атрибуты реквеста используются и для других вещей - например, код может до вызова контроллера определить город пользователя и сохранить в атрибутах. А контроллер его оттуда возьмет. Но опять же, мне кажется, это коряво, а реквест из-за атрибутов превращается в свалку нетипизированных данных.
108 1961293
>>1961059

> $n%100


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

> $j = 10 * (floor(( $n%100) / 10));


переменную надо было назвать "десятки". $tens, например.

> $iSpelling


Тоже неудачное название.

> }


> else {


Что за нестандартное форматирование? Во втором посте треда есть ссылка на сайт, где можно отформатировать код.

> $k=null;


Должно быть $k = 0 так как дальше $k сравнивается с числам (if ($k>0)), а null сравнивать с числом неправильно.

Код функции small_number_to_text можно упростить, если вместо переменных $iSpelling, $jSpelling и тд добавлять слова в массив. Тогда не нужны будут ветки, где переменным присваивается null.

> $smallNInText


Лучше назвать $result или $spelling.

> if ($j>=10 and $j<=20) {


> $wordForm = $form3;


Можно избавиться от $wordForm и сразу писать return $form3. Код будет проще.

> if ($partsArray[2])


Так нельзя проверять наличие элемента, так как если его нет, то обращение [2] вызовет ошибку. Надо проверять через array_key_exists или count($x) >= 2

> $partsArray


Надо было назвать $groups или просто $parts.

В общем, тебе надо сделать следующее:

- поменять названия переменных
- отформатировать код по правилам
- попробовать его укоротить, как я описал выше (не теряя читабельности. Не надо пытаться запихнуть несколько строчек в одну).
108 1961293
>>1961059

> $n%100


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

> $j = 10 * (floor(( $n%100) / 10));


переменную надо было назвать "десятки". $tens, например.

> $iSpelling


Тоже неудачное название.

> }


> else {


Что за нестандартное форматирование? Во втором посте треда есть ссылка на сайт, где можно отформатировать код.

> $k=null;


Должно быть $k = 0 так как дальше $k сравнивается с числам (if ($k>0)), а null сравнивать с числом неправильно.

Код функции small_number_to_text можно упростить, если вместо переменных $iSpelling, $jSpelling и тд добавлять слова в массив. Тогда не нужны будут ветки, где переменным присваивается null.

> $smallNInText


Лучше назвать $result или $spelling.

> if ($j>=10 and $j<=20) {


> $wordForm = $form3;


Можно избавиться от $wordForm и сразу писать return $form3. Код будет проще.

> if ($partsArray[2])


Так нельзя проверять наличие элемента, так как если его нет, то обращение [2] вызовет ошибку. Надо проверять через array_key_exists или count($x) >= 2

> $partsArray


Надо было назвать $groups или просто $parts.

В общем, тебе надо сделать следующее:

- поменять названия переменных
- отформатировать код по правилам
- попробовать его укоротить, как я описал выше (не теряя читабельности. Не надо пытаться запихнуть несколько строчек в одну).
109 1961327
>>1961264

> Так и должно быть, что данные другие.


Понял. Но как ты смотришь на то, чтобы подзапрос в виде джойна оставить ради оптимизации лимита ? Читал статью (на хабре вроде), что если данных очень много и у нас будет LIMIT 100000, 10 например, то это сильно бьет по производительности. В плане того, что mysql сначала переберет 100000 записей, а только потом выдаст следующие 10

> Это $1 в Симфони называют "атрибутами" и роутер после разбора URL помещает их в $request->attributes.


После прошлого ответа еще посидел подумал и в голову похожая идея пришла. В плане того, что раз это параметры маршрутов, то и разбирать их должен непосредственно сам роутер, а не реквест. Значит в правильную сторону мыслил
110 1961349
>>1961293

> $iSpelling


>Тоже неудачное название.


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

>Должно быть $k = 0 так как дальше $k сравнивается с числам (if ($k>0)), а null сравнивать с числом неправильно.


Когда писал это, почему-то боялся, чтобы при $k=0 не получилось фигни типа "шестнадцатьноль". Теперь понял, почему этого НЕ получится. Спасибо.

>Код функции small_number_to_text можно упростить, если вместо переменных $iSpelling, $jSpelling и тд добавлять слова в массив. Тогда не нужны будут ветки, где переменным присваивается null.


Пробовал так делать. Но при объединении массива через implode (' ',$x) добавлялись лишние пробелы в числах, в которых отсутствовали сотни, десятки или единицы. Я что-то делаю неправильно?

>Лучше назвать $result или $spelling.


Нет, я все-таки так и не понял принципа названий переменных. :3

В остальном спасибо, Анон, ты как всегда охуенен!
111 1961634
Анон, тупой вопрос. Я вроде думал что понимаю что такое API, REST, вся эта блудня с create|update и т.д. Но как обычно практика все пом есстам расставила, лол.
У меня есть раздел ( группа роутов ) приложухи (слим 4), в ней роуты на просто отрисовку страниц, пост-запросы от форм, а так же c этих страниц несколько ajax-запросов к серверу.
Трабла возникла когда я захотел проверку прав закинуть в мидлвэйр на группу роутов, а роуты у меня внезапно ( ага ) есть те что возвращают шаблоны, а есть те что возвращают ajax. Соответственно мидлвэйры могут быть разные, но я хотел как то по группам группировать.
Так вот вопрос - можно ли назвать те маршруты что обрабатывают ajax запросы - API? И нужно ли мне их вынести в отдельный раздел и отдельные классы?
А то, условно, у меня в одном классе контроллера находятся как методы что обрабатывают обычные запросы от браузера, так и те что обрабатывают ajax.
112 1962089
Есть ли такая команда, которая позволяет выводить текст с сайта в виде файла txt? У меня есть код, который выводит данные БД в виде JSON, но я не знаю как сделать так, чтобы он выдал мне этот JSON текст в виде txt файла.
113 1962105
115 1962155
>>1962089

JSON это не .txt, а .json файл.

Тебе надо вывести текст (JSON) через echo, просто перед этим надо выставить правильные заголовки, а именно Content-Disposition: attachment и Content-Type: application/json. Первый говорит о том, что браузер должен предложить сохранить файл, второй указывает тип файла. Для надежности можешь добавить Content-Length, чтобы при обрыве связи битый файл не сохранялся бы.
116 1962165
>>1961634

Вообще, по моему, прописать права в middleware неудобно. Там можно сделать глобальную проверку (вроде того что в раздел /admin может зайти только админ), но если у тебя в админке 40 разделов, ты их все будешь в middleware перечислять? А если у раздела поменяется URL, ты не забудешь в middleware поменять?

Плохо, когда определение роута и права разнесены.

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

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

- /admin - доступно только суперадминистратору
- другой - доступно всем

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

-----

Что касается AJAX. По моему, так это не имеет значения, возвращает контроллер AJAX или JSON. проверка прав для них работает одинаково.

Некоторые выносят API отдельно, но мне кажется это актуально, если у тебя есть настоящее, документированное API для внешних сайтов или устройств. Если у тебя просто обработчики аякс запросов с сайта, я бы не называл это полноценным API.
117 1962169
>>1961349

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



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

$millionWord = getWordForm($millions);
$words[] = $millionWord;

это читается как:
слово для миллиона = выбрать форму слова для миллионов
добавить в массив "слова" "слово для миллиона".

Еще лучше убрать лишнюю переменную и написать сразу:

$words[] = getWordForm($millions);

А если написать

$x = $spelling[$j];

то это не читается.

Представь, что ты открываешь проект в 100 000 строк кода (который ты никогда не прочтешь целиком), и в нем какую-то функцию и в ней какую-то строчку. Ты хочешь сразу понять, что она делает, а не искать выше что это за переменная $j и что в ней хранится. Код с переменными вроде $j нечитабелен. Аналогично с именами функций.

> Но при объединении массива через implode (' ',$x) добавлялись лишние пробелы в числах, в которых отсутствовали сотни, десятки или единицы. Я что-то делаю неправильно?



не добавляй в массив пустые строчки и пробелы не появятся.
117 1962169
>>1961349

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



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

$millionWord = getWordForm($millions);
$words[] = $millionWord;

это читается как:
слово для миллиона = выбрать форму слова для миллионов
добавить в массив "слова" "слово для миллиона".

Еще лучше убрать лишнюю переменную и написать сразу:

$words[] = getWordForm($millions);

А если написать

$x = $spelling[$j];

то это не читается.

Представь, что ты открываешь проект в 100 000 строк кода (который ты никогда не прочтешь целиком), и в нем какую-то функцию и в ней какую-то строчку. Ты хочешь сразу понять, что она делает, а не искать выше что это за переменная $j и что в ней хранится. Код с переменными вроде $j нечитабелен. Аналогично с именами функций.

> Но при объединении массива через implode (' ',$x) добавлялись лишние пробелы в числах, в которых отсутствовали сотни, десятки или единицы. Я что-то делаю неправильно?



не добавляй в массив пустые строчки и пробелы не появятся.
118 1962175
>>1961327

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



Такая проблема производительности лимита есть. Она решается отказом от номеров страниц и использованием индекса, как описано тут https://use-the-index-luke.com/sql/partial-results/fetch-next-page

То есть, вместо LIMIT 10000, 10 мы используем, например, WHERE id > :lastId LIMIT 10.

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

У тебя сортировка сейчас, как мне кажется, сделана некорректно. При смене сортировки результаты на странице (например, первой) должны меняться, а у тебя они не меняются.
image.png75 Кб, 1434x924
Высрал код 119 1962255
Здраствуйте аноны в общем я хотел написать на laravel с 0 знаниями форму где динамически добавляются новые строки в таблице по нажатии кнопки. Добавление и удаление я сделал, но получилось крайне хуево, можете дать совет. Как обойтись без смешивания js, html, php
120 1962354
>>1962255

> Как обойтись без смешивания js, html, php


Никак. Динамическое изменение страницы без перезагрузки по другому не сделать.
121 1962389
>>1960646

Анон, я пофиксил. Можешь еще раз посмотреть ?
https://github.com/qqzooi/student-list

>>1962175

>У тебя сортировка сейчас, как мне кажется, сделана некорректно.


Да, я уже исправил. Просто изначально думал, что должны сортироваться только те данные, которые в данный момент юзер видит на конкретной странице.
122 1962391
>>1962255
Можно переложить рендер из жс в пхп, но тогда будут перезагрузки на каждый чих, а на беке придется хранить состояние отрисованных элементов.
А от хтмл никак не избавишься, если нужен UI.
Чистый бек это какой-нибудь JSON API
123 1962419
А чем отличаются Laravel и Symphony? Они разные задачи решают? Я не пыхер, просто интересно.
124 1962421
Почему в ларавеле по умолчанию в .gitignore не прописаны автогенерируемые вебпаком папки/файлы из public? Может быть в этом есть какой-то здравый смысл? Или просто потому что?
>>1962419
Symfony - джава-стайл для крупных проектов
Laravel - RAD-фреймворк для хуяк-хуяк и в продакшен. Антипаттерн на антипаттерне, почти что вордпресс.
125 1962437
>>1958281 (OP)
Какие кавычки использовать более правильно и почему?
126 1962441
>>1962419
Ларавел - комбайн по типу Рельс, поставил и пользуйся.
Симфони - набор пакетов, которые можно использовать независимо друг от друга
127 1962445
>>1962437
По факту, особой разницы нет, но стоит иметь в виду это
https://www.php.net/manual/ru/language.types.string.php
128 1962450
>>1962437
Одиночные кавычки быстрее.
129 1962454
>>1962441
Только не пакетов а компонент. В композер пакетах бандлы для симфони бывают, хуй ты их где кроме симфони используешь.
130 1962457
>>1962454
А компоненты симфони это хуйня такого уровня, что если ты кастомно из них что-то собираешь, то ты скорее сам фремворк общего назначения можешь написать. В практических задачах это не встречается. Так что не надо это постоянно повторять, типа "симфони гибкая".
131 1962567
>>1962165
Спасибо за ответ, и за ранее сделанные ответы на мои вопросы тоже спасибо!

>>Там можно сделать глобальную проверку


В сущности так я и реализовал.
132 1962638
>>1962457

>ты скорее сам фремворк общего назначения можешь написать


О чем и речь, что симфони может выступать как фреймворком (веб скелетон), так и конструктором фреймворков.

>В практических задачах это не встречается


Крайне редко в очень специфичных условиях. Например, когда делаем прошивку - веб морду для роутера
133 1962716
>>1962255

Не надо пихать HTML в строковые литералы в JS. Это уродливо. Надо сделать HTML-шаблон внутри тега <template> (HTML5) или <script type="text/x-template">. А из JS брать этот шаблон, менять что нужно и вставлять в документ.
134 1962719
>>1962354

Не гони, прекрасно можно обойтись без вставки HTML в JS, просто ты не знаешь про шаблоны.
135 1962722
>>1962450

Пруфы? Ты просто обманываешь начинающих, которые не могут проверить это утверждение.

И одиночные, и двойные кавычки дают одинаковые опкоды в байт-коде, проверь сам, врун: https://3v4l.org/cXPKF/vld#output
136 1962723

>>19627>>1962354


Handlebars.js
я пользуюсь, мне норм.
137 1963092
>>1962169

>не добавляй в массив пустые строчки и пробелы не появятся.


Подскажи, правильно ли я понимаю алгоритм (буду описывать простым языком, чтобы не обосраться):
если (существует число сотен) {
$массивПреобразованныхВСловаЧисел[]=$массивСТекстовойФормой[числоСотен];
}
...
то же самое, для десятков и сотен, инструкцию else и elseif можно же вообще не писать?
А потом склеить все через implode ( ' ',$smallNumberInTextArray)?

Но таким же образом нельзя поступать с массивом выбора формы слов для миллионов, тысяч и десятков, ведь там 0-й элемент массива строго соответствует разряду рублей, 1-й элемент - тысячам, 2-й элемент- миллионам.
Я все правильно понял?
Спасибо за терпеливые объяснения.
138 1963103
>>1962723
Ващет в жс уже завезли родные темплейты
139 1963138
>>1963103
Не мешай людям тащить бесконечное количество зависимостей.
140 1963149
>>1962722
Ну чего ты такой серьезный. Это старый, бородатый прикол, про скорость одиночных кавычек. Да и все равно мы тут не байты вычисляем, а в бутылочное горлышко базы данных упираемся.
141 1963391
Почему у меня не работает UPDATE базы данных?
Перепробовал сто вариантов из интернета ничего не работает. Как будто пустота там где строчка с командой UPDATE
как так?
остальное работает, а UPDATe ни в какую
в чём секрет?
142 1963393
>>1963391
Показывай код, хули.
143 1963394
>>1963393
$sql = "UPDATE map SET owner = $p_id WHERE x = $p_x AND y = $p_y" ;
$stmt = $link->prepare($sql);
$stmt->bind_param($p_id, $p_x, $p_y);
$stmt->execute();

if (!$link->query($sql)) {
echo "query failed: (" . $link->errno . ") " . $link->error;
}
144 1963398
>>1963394
bind делается для ? плейсхолдеров, а ты сразу вхуячил значения в запрос. Плюс там ещё параметр с какими-то форматами нужен вроде.
Дальше query каким боком там?
Короче, у тебя там косяк на косяке, и это я ещё не шарю в этом mysqli или что это.
Читай документацию.
145 1963400
>>1963398
по простому тоже не работает
выходит Error updating record: но без указания ошибки

$sql = "UPDATE `map` SET `owner` = $p_id WHERE map.x = $p_x AND map.y = $p_y";

if (mysqli_query($link, $sql)) {
warn("Record updated successfully");
} else {
echo "Error updating record: " . mysqli_error($link);
}
146 1963402
>>1963400
В базу ту подключился?
Сделай echo $sql и попробуй исполнить руками этот запрос.
147 1963407
>>1963402
сообщение о соединении с базой есть

echo $sql
выдает
UPDATE `map` SET `owner` = 9 WHERE map.x = 34 AND map.y = 34
ввожу в базу руками
работает
148 1963415
>>1963400
Ты в курсе что это не подготовленный запрос? Ты ж подставляешь переменные тупо в строку $sql
149 1963418
>>1963407
Ну хуй знает тогда.
150 1963437
>>1963415
Покажи подготовленный запрос
151 1963442
>>1963400

Попробуй в else сдампить:

var_dump($link->connect_errno);
var_dump($link->errno);
var_dump($link->error);
var_dump($link->error_list);
var_dump($link);

Вдруг что найдется.
152 1963443
>>1963442
NULL NULL NULL NULL NULL
153 1963489
>>1963443

У тебя явно проблема при установке соединения с БД. Так как $link должен быть объектом, а не NULL. Покажи код установки соединения и сдампь, чему равна $link.
154 1963580
>>1963489
Всё стандартно

при этом кол работает если переменные заменить на циферки

$link = mysqli_connect('###', '###', '###', '###');
if (!$link) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully<br>';

if(!empty($_SERVER['REMOTE_ADDR']) ){
$ip = $_SERVER['REMOTE_ADDR'];
}
else{
$ip = empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : $_SERVER['HTTP_X_FORWARDED_FOR'];
}

//mysqli_close($link);
155 1963582
Анон. Что лучше wordpress или hugo?
156 1963585
Говорят wp дырявая как наташа, правда?
157 1963587
Connected successfully
object(mysqli)#1 (18) { ["affected_rows"]=> int(0) ["client_info"]=> string(13) "mysqlnd 7.4.8" ["client_version"]=> int(70408) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(27) "### via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(11) "5.6.48-88.0" ["server_version"]=> int(50648) ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(330084) ["warning_count"]=> int(0) }
158 1963629
>>1963582

>hugo


>cms


>на go


Чет взлольнул.
Зачем го вылез из микросервисного загона в цмс?
159 1963637
>>1963580
Короче, ты в каком-то месте неожиданно обсираешься, тут гадать можно долго, потому что причина неочевидна и не в самой работе с бд. Ищи.
160 1963639
>>1963637
Где искать то? Это практический весь код который проблемный.
161 1963641
>>1963639
Сделай в две строчки.
conn = connect
query(conn, 'update table set hui=1 where id=1')
Должно сработать без вариантов. Потом смотри что отличается.
162 1963654
>>1963629
цмс не цмс. но для блогинга hugo тоже подходит. в чём твой рофл?
163 1963661
>>1963629
wp сайты за 2 секунды ломаются. как ты думаешь, тебе такое устроит такой расклад?
164 1963665
>>1963661
А почему говорят, что wp неуязвим, если ставить последнюю версию пиэйчпи и обновлять плагины?
165 1963676
>>1963665
обновлять плагины? а ты думаешь избежишь от взлома? а хер там было с маслом. один фиг будут ломать школохакеры. и будут внедрять вирусы, рекламы, всякая чепуха. возможно и станет в ряды ботнетов у китайских школяров. а в hugo всё ахуенно, он железобетонен. в markdown пишешь и пушишь в github. в netlify автоматом билдиться. и всё это невъебически защищен от всех криворуких.
166 1963677
>>1963676
Да, говорят, что хакеры ломают только старье с известными уязвимостями, а если все обновлять, обновлять версии вордпресса, обновлять плагины, обновлять версии пиэйчпи, менять пароль все время, все время, то вордпресс будет неузявим! Так говорят в интернете!
167 1963681
>>1963676
Говорят, что новая версия вордпресса неуязвима.
168 1963688
>>1963681
В общем тебя порадую. В даркнете есть такие форумы как exploit.in, wwh-club и т.д. Ну так вот я недавно видел в экплоите как можно ломать новую версию вп 5 и выше. Уже давно слиты как ломаются вп сайты 5.7.
169 1963697
>>1963641
Так работает, а когда делаю чтобы вставлялось из переменных то перестает работать
170 1963701
>>1963688
Если уязвимость так широко известна, значит ее поправили или скоро поправят.
171 1963723
>>1963701
Да ладно не поправили. Недавно пробовал поднять в виртуалке вп блог, и попробовать взломать. Всё как есть. Ломаются на ура.

> Если уязвимость так широко известна



В том то и дело что уязвимость не известна большинству. Какой среднестатистический вася будет в onion сайтах сидеть? даже топовые менеджеры толком то и не знают, что существуют такие дыры в этих цмсках. в теплых офисах сидят пьют чай, и ничем не думают. и вдруг внезапно бегают во весь офис вырывая волосы, что их сайт взломали хакеры, что внедрили злоебучий скрипт, который копирует сам себя, распространяя во все датацентры. так ломаются крупные сайты, даже твиттер, фейсбук.
172 1963761
>>1963661
Если ломают цмс на пхп, что мешает сломать цмс на го?
173 1963762
>>1963654
В странном выборе языка. Преимущества го в цмс не задействованы, а вот недостатки тут как тут
174 1963778
>>1963762
в общем ты даже не понял о чем идет речь. на кури https://gohugo.io, темы на любой вкус https://themes.gohugo.io. но я бы не юзал эти темы, а самому лучше создать шаблон как-то удобнее.
175 1963847
>>1963778
CMS
@
CLI


Это для кого вообще сделано?
176 1963854
>>1963847
для людей сделано карл ))
sage 177 1963864
Вы че, ебанутые? Вы тут на полном серьезе CMS обсуждаете? Насколько нужно себя не уважать, чтобы с таким говном связываться?
178 1963879
>>1963864
Лучше быть просто верстаком, чем с CMS связываться?
179 1963882
>>1963723
А в фреймворках ты типа сам защиту настраиваешь?
180 1963898
>>1963723
>>1963882
З.Ы. я еще не учил, что такое фреймворк. Я пока только вордпресс изучаю.
>>1963864
Я думаю, что начну с ЦМС, потому что фреймворки - СЛОЖНА!
181 1963965
>>1963864
Только рофла ради. Сам это говно даже будучи джуном за км обходил.
Я кажется уже и фреймворки перерос, достался настолько большой проект, что фреймворка в нем не видно
182 1963971
>>1963879
Конечно. Только конкуренция на фронте сильная, но это более квалифицированный труд, ну и зп больше намного даже больше чем у обычных пыхеров.
CMS поедают людей как раз потому, что устроиться с ними работать вообще с нулевыми знаниями проще простого.
Работодатели понимают, что осознанно в этом дерьме копаться мало кто будет, из-за чего выращивают макак с нуля.
В итоге люди по пять лет на CMS работают, а по знаниям не тянут даже на нормального trainee.
>>1963898
И кто тебе такую дурную идею посоветовал? Сам придумал?
image.png33 Кб, 783x342
183 1963981
>>1963971

>В итоге люди по пять лет на CMS работают, а по знаниям не тянут даже на нормального trainee.


И зарабатывают соответственно. Пикрил самая крупная битриксопараша в городе, берут людей чуть ли не с улицы, лишь бы мог эту коробку шатать
184 1964053
>>1963864
Ну дак речь идет именно тузлов для блогинга, одно цмс пыхой, а другой генератор на golang. В генераторе hugo нужно иметь намного больше багажа знаний. Вот эти: html, js, css, flex, grid, микроразметку, golang в конце-то концов.
hugo.png86 Кб, 1600x900
185 1964060
В upwork спокойно рубишь зеленные если владеешь ангельским. В hugo заданиях конкуренции намного меньше, чем wordpress.
186 1964062
>>1964053

>Вот эти: html, js, css, flex, grid, микроразметку, golang в конце-то концов.


Оч сложно
187 1964065
В общем hugo - это jamstack. Кто нихуя не понимает что это за махина? Вот https://jamstack.org/generators также есть в этом списке next.js как многие сейчас в нем пишут.
188 1964067
>>1964062

конечно. кто может писать всё нативе? вот именно сложно.
189 1964085
>>1964067
Сарказм не понят.
Эти вещи из базового уровня веб макаки, хз как без них в 2к21 девелопить
190 1964110
>>1964085

> Эти вещи из базового уровня веб макаки



Ну дак то и имелось ввиду, не как макаки. Мало кто правильно имеет логично писать в html, css. Многие пишут без разбора, вермишелят как попало. Хоть бы подкурили бы разных методологий бэм например.
191 1964147
>>1958844
var_dump ($arr); код пыхи обернуть в тег <pre>
image.png34 Кб, 643x331
192 1964165
анонче, почему так:
http://phpbook.ga/l1/loops.html
в уроке говорится, что всего выплат должно быть 61270 р. за 13 мес.

я поправил код по-своему:

if ($creditBalance < 5000) {
$paymentTotal = $creditBalance + $paymentTotal;
echo "С меня хватит!\n всего {$paymentTotal}";
break;
}

и у меня в 11 месяце остается 4к и всё какбэ
в чем прикол?
193 1964479
>>1964165
Ну, можно упростить, как там написано и расписать вручную алгоритм. Взять кредит не 40к, а 4к.

Через месяц с комиссией получается 4000 + 1000 + 40000.03 = 5120. Шкальник платит 5к, остается 120. Через месяц они превращаются в 1000 + 120 + 1200.03 = 1123,6. Шкальник выплачивает их и в итоге получается он заплатил 5000 + 1123,6 = 6123,6

При этом программа с таким кредитом выдаст следующее:

1 месяц спустя: долг = 120 руб, выплачено всего 5000 руб.
С меня хватит!


Т.е. видно что некорректно считается последняя выплата. Если взять данные из этой строки 12 месяц спустя: долг = 262.31722768997 руб, выплачено всего 60000 руб. и посчитать 60000 + 1000 + 262 + 2620.03 = 61 269,86

В твоей проверке $creditBalance < 5000 ты забываешь про косарь комиссии и проценты.

/
Если баланс отрицательный — хватит считать /
if (($creditBalance + $creditBalance
0.03 + 1000) < 5000) {
$sumTotal = $paymentTotal + 1000 + $creditBalance + $creditBalance*0.03;
echo "С меня хватит! Я выплатил {$sumTotal}";
break;
}
194 1964481
>>1964479
Блин, знак умножения исчез, короче где 0.03 там имеется в виду умножение
195 1964568
А почему mysqli_query работают а когда внутрь функции пихаешь то перестают работать?
196 1964666
>>1964568
Пример бы хоть показал, пиздун.
197 1964668
Аноны, какую либу можно заюзать для авторизаци/регистрации и проверки прав? приложуха slim 4, ORM eloquent.
Раньше юзал Cartalist/Sentinel она как раз использует улоквент, думаю ее снова заюзать. Но может другие варианты есть?
198 1964706
>>1964668

> Раньше юзал


Если всем устраивает, зачем наворачивать другое?
199 1964711
>>1964706
Для расширения кругозора мб
200 1964822
>>1964065

Трудно сравнивать hugo и wordpress. Hugo это примитивный статический генератор сайтов, то есть ты берешь, правишь какие-то файлы, из этого генерируется набор HTML, который ты выгружаешь на хостинг. В то время как вордпресс это полноценный динамический движок с админкой.

Вот подумай, что удобнее не разбирающемуся в программировании человеку: удобная админка вордпресса с формами или редактировать руками маркдаун-файлы, потом запускать скрипты в консоли? Плюс, маркдаун-синтаксис очень ограниченный (например там нет вставки видео с Ютуба). Плюс, вордпресс можно расширять и добавлять там произвольные динамические страницы. Например, там посетители могут оставлять комментарии или ставить лайки. А в статических сайтах, генерируемых hugo, ничего подобного нет.

Статические сайты и их генераторы известны уже давно, непонятно зачем вы подаете этот hugo как что-то новое. Простой статический генератор сайтов из маркдауна пишется на PHP за один вечер, после чего hugo становится не нужен.

Зачем нужен Go, когда можно писать и статические, и динамические сайты на PHP, я не понимаю. Ну если кому-то хочется помучаться с этим языком, где даже классов нету - вперед и с песней. Не забудьте только Си сначала выучить, так как без него за Го нет смысла браться, вы ничего не поймете.

В общем, ерунда этот jamstack. Тот, кто пришел тут его пиарить, наверно сам слабенький PHP разработчик, боится конкуренции и хочет сбить с толку изучающих PHP.

И грид тоже отстой, так как не поддерживается старыми браузерами. Зачем тратить свои силы, чтобы получить убогий HTML код, работающий только на твоем компьютере, когда можно писать хорошую кроссбраузерную верстку, которая отображается даже в IE. Убогие всегда найдут какую-нибудь отмазку, лишь бы не признавать свои слабые скиллы.
201 1964834
>>1964822

>можно писать хорошую кроссбраузерную верстку, которая отображается даже в IE


Кто-то еще пользуется ишаком?
202 1964878
>>1963676

Ты сравнил, статический генератор сайтов на убогом Го (он настолько убог, что в нем нет даже классов) и полноценную CMS на PHP.

Насчет уязвимостей последней версии вордпресс - где пруфы?

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

Хотя на практике людям нужны сайты с админкой, а не редактировать маркдаун на гитхабе.
203 1964881
>>1963092

> Подскажи, правильно ли я понимаю алгоритм


Да.

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



Не понял, о каком массиве идет речь и зачем его склеивать. Ты сначала получаешь письменное представление числа (например: "сто пять"), кладешь его в массив слов. Затем получаешь форму слова "миллион", тоже кладешь его в массив слов. Потом кладешь туда представление тысяч, потому форму слова для "тысяч" и тд.
204 1964907
Я вкатываюсь, еще учебник до конца не прошел. Уроки по вротпрессу штурмую. Фреймворки не смотрел даже. Ну, хорошо, вы говорите, что вротпресс дырявый.

А с фреймворками там че? Там как так получается, что защита лучше, чем у вротпресса? Или ты самописную защиту должен хреначить? НИЧЕ НЕ ПОЙМУ!
205 1964912
По вротпрессу говорят, что надо ставить последнюю версию вротпресса, плагины обновлять до последней версии, надо чтобы был SSL, https. Настроить htaccess. Все время менять пароль. И ТОГДА ВРОТПРЕСС СТАНЕТ НЕУЯЗВИМЫМ!!!!!!!! Так говорят в интернете.
206 1964923
>>1964907
В фреймворках зачастую единая точка входа в приложение. Соответственно навесить различных ограничителей проще, чем в вп, где этих точек может быть сотни.
Остальное зависит от настроек веб сервера.
72414919.jpg72 Кб, 450x450
207 1964924
208 1964927
>>1964822

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


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

> И грид тоже отстой, так как не поддерживается старыми браузерами



https://www.caniuse.com/?search=css grid
209 1964928
>>1962389

В роутере сделаны неудачно, на мой взгляд, методы getController() и getAction(). Чтобы они вернули значение, надо сначала вызвать route(), но как об этом догадаться? Получается, один метод при вызове влияет на работу других методов, это называется побочные эффекты и это нехорошо.

Правильнее было бы, если бы был метод, который получает, например, Request или просто $urlPath и возвращает controller, action и attributes.

Та же проблема с пагинацией. Было бы лучше, если бы все методы работали корректно без необходимости вызывать метод run().

> private int $limitStudents = 10;


Это можно было сделать private константой.

Плохо, что тут идет вперемешку PHP и HTML: https://github.com/qqzooi/student-list/blob/6466cbedf7026440a2885c871cc93701a0581cce/App/Components/Navbar.php#L7

Лучше было бы, если бы Navbar только хранил информацию о пунктах меню, а преобразование в HTML происходило бы в шаблоне. То есть, HTML-шаблон бы обращался к классу Navbar, получал список пунктов и рендерил их. В твоем решении править верстку неудобно, так как она раскидана кусками по классу.

То же касается NotificationUtil и других мест, где есть HTML в классах. HTML-код лучше формировать в шаблоне.

SVG-код, наверно лучше поместить в файл и подключать через file_get_contents(). Как в твоем коде редактировать иконки? Руками переносить в файл, потом обратно в код?

Я думаю, что JOIN в getAll() не нужен, так как он ни на что не влияет.

> user-scalable=no,


Это в общем плохое решение, так как лишает пользователя удобства. Может, у человека шрифт слишком мелкий или наоборот, мало информации на экран влезает. Я на десктопе часто на сайтах меняю масштаб.
210 1964930
>>1964822

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



> А в статических сайтах, генерируемых hugo, ничего подобного нет.



Для этого есть disqus, isso, github issue много чего есть.
211 1964936
>>1964927

У grid нет даже 5-летней поддержки, не говоря о 10-летней. IE не поддерживает, даже 11 версии. Даже Хром поддерживает с 2017 года. Это значит, например, на телефоне 2016 года работать не будет.

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

Хотя, я вижу, все поступают противоположно тому, что я учу и вовсю используют плохо поддерживаемые технологии. Это понятно, качественно сделать сайт мало кто может, лепят как попало. И ладно бы это были вкатуны, так нет вроде опытные разработчики тоже лепят как придется. Я от работы фронтендеров испытываю только разочарование. Хуже них разве что любители внедрить микросервисы на малоизвестном языке и свалить.
212 1964947
>>1964924
Ну, значит надо не использовать плагины из списка ушатанных.
213 1964959
>>1964930

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

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

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

Или: надо сделать форму записи на какой-нибудь день с пометкой занятых дней. Ты на hugo это не сделаешь, а на динамическом PHP-сайте - легко.

И ты подаешь hugo как что-то новое, хотя статические генераторы сайтов существуют уже много лет, и есть генераторы на PHP. С которыми ты можешь сделать что угодно, поменять что угодно, и тебе не надо тратить ценное время на изучение языка Го. Зачем нужен hugo, если есть генераторы на PHP?
214 1964963
>>1964947
Так ты узнаешь уже после, лол.
Вордпресс это как шиндовс, все хотят его поиметь, потому что дохуя потенциальных жертв пасется.
215 1964967
>>1964963
Тогда надо антивирусной утилитой прочесывать код! Я видел какой-то видос, где приводился список эксполитов для пиэйчпи. Потом их пихали на сайт пиэйчпи. А потом прочесывали утилитой антивирусной, и она находила, что вот эту хуйню надо выпилить!
216 1964997
>>1964967
Интересно, на чем основан принцип работы подобной лабуды
217 1965076
Сосоны, а вы знали, что существует punto switcher, который автоматически меняет раскладку? Типа пишешь дштл и эти буквы автоматически превращаются в link.
218 1965106
Как сделать массив $arr как $replace ?

$arr = ['d' => ['f', 'e' ],'a' => ['c', 'b'] ];

$replace = ['a' => ['b','c'], 'd' => ['e', 'f']];
219 1965109
>>1965106
reverse на каждом из массивов
220 1965133
>>1965109
И как это поможет? И мне нужно только с одним массивом arr работать
221 1965172
>>1965133
foreach не проходил?
222 1965174
>>1965133
>>1965172
Точнее, сюда больше рекурсия подойдет
223 1965178
>>1965076

> punto switcher


Как там в 2004?
224 1965182
>>1965178
А что надо использовать в 2к21 году? СКАЖИ, АНОН! СКАЖИ ГЛАСНО!
225 1965191
>>1965178
>>1965182
Я вообще никогда не понимал, зачем это использовать, хуйня какая-то.
226 1965197
>>1965191
Чтобы писать код я переключаю раскладку клавиатуры. Например:
echo '<b>Привет мир!</b>';
Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл. И вместо того, чтобы мне исправлять это руками punto swither сам мне все поменяет.
227 1965198
>>1965197
У меня такое бывает очень редко, а если и забываю, то сразу это вижу.
Такая же программа наоборот поощряет забывать, вредный костыль.
228 1965199
>>1965197
Бывало такое, что он переключал раскладку там, где не надо?
229 1965201
>>1965172
>>1965174
И как фореч и рекурсия может изменить вложенные массивы?
230 1965211
>>1965201
А ты совсем глупенький?
Может еще за тебя код написать?
231 1965217
>>1965182
Я хз где ты там в пхп кириллицу используешь, у меня даже с фронтом таких проблем нет, по большей части ты один хуй пишешь на английском.
232 1965220
>>1965217
Тудушки и комменты на русском офк временные
233 1965228
>>1965220
Привыкай сразу писать на ингрише, кириллица в коде не нужна.
234 1965233
>>1965217
Там где пхп код и в нем верстка.
235 1965234
>>1965199
Пока нет, но я только только начал использовать.
236 1965241
>>1965233
Хуево, надеюсь это у тебя просто какой-то тестовый прожект. А вообще, полезно научиться слепой печати, тогда проблема неправильной раскладки уйдет на нет и скорость набора существенно вырастет. Я хз как там щас пунто свитчер работает, но раньше он часто обсирался и включал неправильную раскладку.
237 1965243
>>1965211
Решил задачу так, норм?
ksort($arr);
asort($arr['a']);
asort($arr['d']);
var_dump ($arr);
238 1965264
>>1965228
Она в коммиты не попадает. Тудушки сугубо для себя пишу
239 1965404
>>1965197

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


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

>шиндовс

240 1965566
>>1965404

>И, кстати говоря:


>шиндовс


А в чем собсна проблема?
241 1965615
>>1965197

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



Как ты можешь не заметить, что ты не переключил раскладку, когда печатаешь, если ты смотришь на текст, который печатаешь?
242 1965625
>>1965615
Потому, что я успею нажать пару кнопок быстрее, чем увижу, что текст стал не той раскладки. Можно конечно удалить эти пару символов, переключить раскладку и заново написать как надо.

А можно до конца дописать "дштл" и punto switcher переделает это на link.
243 1965626
>>1965615
То есть печатаешь же быстро. Мгновенно нажал две кнопки, и потом увидел, что там получилось "дш" вместо "li".
244 1965654
>>1965615
То есть при слепой печати тоже можно ошибиться с раскладкой, особенно, если ты очень быстро набираешь текст. Ты быстропальцый Абелардо! И ты успеешь нажать пару кнопок и лишь потом поймешь, что эту пару символов напечатал с не той раскладкой!
245 1965666
Аноны, недавно, велосипедя свою приложуху понял что она кривая и косая. Короче начал читать Зандстру, 5 издание "Объекты, шаблоны и т.п." - реально книга заходит.
246 1965672
>>1965666
пс
Собственно я о том говорю - что до некоторых книг видимо нужно дорасти. У меня возникла проблема что мой код плохо структурирован, я понял что мой код криво - и возникло желание сделать лучше,и понимание того как я уже плохо сделал, и почему.
На мой взгляд эти ооп - проблемы скрывают современные фреймворки с DI - контейнерами работающие на рефлексии.
Когда сам делаешь косо - отлично понимаешь почему косо и неудобно.
247 1965788
>>1965076

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

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

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

>>1965178

В ручном режиме он позволяет немодально переключать раскладки по левому/правому Ctrl, что удобнее встроенного модального переключателя.

Хотя конечно, удобнее всего было бы иметь выделенные клавиши рус/лат, но западные производители не прислушиваются к мнению русскоязычных пользователей. Даже у Эппл используется убогая раскладка (где русские буквы совмещены с символами, где некоторые символы в разных раскладках на разных клавишах, где не клавиш рус/лат), хотя Эппл делает свое железо и мог бы сделать нормальную клавиатуру, где буквы и символы не совмещены. Но не хотят ради нас заморачиваться.
248 1965866
>>1964881

>Не понял, о каком массиве идет речь и зачем его склеивать.


Я опирался на свою программу, где для текстового представления трехзначного числа и форм названий разрядов я использовал разные массивы.
А потом внимательно перечитал то, что предложил ты и понял, что можно легко и просто избавиться от лишнего массива и вкладывать и число и форму слова в один массив, главное только не обосраться с порядком формирования этого массива.
Анон, ты делаешь великое дело: избавляешь от квадратно-гнездового мышления таких мимохуев, как я, тем самым улучшая генофонд планеты :3
249 1965889
ОП, или кто тоже разбирается. подскажите вот в чем:
Есть приложение, просто роутер который вызывает обработчики.
В обработчике/контроллере я хочу что то сделать, допустим записать лог в файл.
Пусть у меня нет сервис локатора, или DI контейнера.
Как я реализую подобное:
допустим метод класса обрабатывает запрос
...
public function anyMethod(){

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

$serviceFabric = new ServiceFabric ( new MonologLoggerService );

$serviceLogger = $serviceFabric->getInstanseLogger();

$serviceLogger->warning('что нибудь пишу в лог');

}

}

Если абстрагироваться от контейнеров и сервис локатора - такой подход адекватен?
Это фактически мои первые потуги в рамках ООП.
Получается в моем варианте фабрика - это не совсем то что должно быть?
Фабрика возвращать должна один и тот же экземпляр одного конкретного класса - просто с разными настройками?
Или фабрика может возвращать экземпляры разных классов , объединенных общим интерфейсом или абстрактным классом?
249 1965889
ОП, или кто тоже разбирается. подскажите вот в чем:
Есть приложение, просто роутер который вызывает обработчики.
В обработчике/контроллере я хочу что то сделать, допустим записать лог в файл.
Пусть у меня нет сервис локатора, или DI контейнера.
Как я реализую подобное:
допустим метод класса обрабатывает запрос
...
public function anyMethod(){

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

$serviceFabric = new ServiceFabric ( new MonologLoggerService );

$serviceLogger = $serviceFabric->getInstanseLogger();

$serviceLogger->warning('что нибудь пишу в лог');

}

}

Если абстрагироваться от контейнеров и сервис локатора - такой подход адекватен?
Это фактически мои первые потуги в рамках ООП.
Получается в моем варианте фабрика - это не совсем то что должно быть?
Фабрика возвращать должна один и тот же экземпляр одного конкретного класса - просто с разными настройками?
Или фабрика может возвращать экземпляры разных классов , объединенных общим интерфейсом или абстрактным классом?
250 1965892
>>1965889
п.с.
$serviceFabric = new ServiceFabric ( new MonologLoggerService );

в рамках этой строки понятие "инверсия управления" означает ли то что класс ServiceFabric получая в качестве аргумента класс MonologLoggerService - перестает зависить от его реализации?
Или "инверсия управления" это что то иное?
251 1965963
>>1965889

> Фабрика возвращать должна


Фабрика может возварщать чт оугодно, тут важно то что ты не напрямую создаешь инстансы нужных тебе класов, а обращаешся к фабрике чтобы она построила что-то подходящее под твою задачу. Естественно чтобы был смысл ебаться с фабриками нужно чтобы она возвращала (как ты и написал) экземпляры разных классов , объединенных общим интерфейсом или экземляр одного класса с разными настройками. Оба варианта возможны но в случае с фабрикой намного предпочтительней первый - для расширения нужно просто добавить новый класс. Второй вариант это скорее для DI (один класс в который передаются разные настройки) - фабрика в общем там лишняя.

> "инверсия управления" это что то иное


Инверсия управления это когда ты напрямую не управляешь порядком выполнения кода, а просто хуяришь отдельные обработчики, а они уже вызываются фрейморком когда нужно.
252 1965997
Аноны, помогите понять порядок решения задачи про калькулятор из гайда. Задачу-то я решил быстро, при помощи регулярок:
https://ideone.com/zlq51o
Вполне рабочий калькулятор.
Но потом вернулся к условию и попробовал решить по ТУ, т.е. через посимвольный разбор строки. Калькулятор-то я написал:
https://ideone.com/YqedpG
да вот только мой калькулятор не работает, если первым действием идет деление (почему так? В голове крутится, что я проебал какую-то очевидную, мелкую, но важную деталь в процессе построения цикла) и работает только с целыми числами.
И как при посимвольном разборе строки ввести поддержку дробных чисел без костылей, лишнего дроча, и самозапутывания, в виде нескольких конвертаций строки в разные типы данных?
253 1965999
Смотрите, такая задачка. Есть список дат, нужно прогнать их через функцию, которая возвращает список вида [item1 => val, item2 => val2], и в конце записать csv вида item,date1val,date2val,date3val...
Не могу придумать структуру, чтобы последовательно наращивать эти данные для последующей записи.
254 1966008
>>1965999
Пока я придумал только два варианта:
- сохранять по датам, а потом дополнительный цикл, чтобы из этого построить новую подходящую структуру
- передавать результат в саму функцию и возвращать обратно с добавлениями, ну или через global
Оба хуевы.
255 1966059
>>1958281 (OP)
Аноны:
1) Можно ли будет перекатиться из php в frontend если что или опыт php не будет учтен для frontend?
2) Какой из PHP фреймворков легче учить Symfony, Laravel или Yii2? И за сколько?
3) Нужна ли математика или знания алгоритмов для разработки и поддержки highload проектов и участия в проектировании архитектуры проектов?
4) До чего нужно дойти в php и MySQL, чтобы спокойно пойти на джуна?
256 1966063
>>1965889

Если ты решил спроектировать что-то, то ты должен ответить на вопрос: зачем нужен тот или иной класс? Не проще ли без него?

Вот например, зачем ты сделал фабрику логгеров? Что тебе мешает сразу создать логгер через new MonlogLoggerService?

> Если абстрагироваться от контейнеров и сервис локатора - такой подход адекватен?


Я не понимаю, зачем ты сделал фабрику.

> Фабрика возвращать должна один и тот же экземпляр одного конкретного класса - просто с разными настройками?


> Или фабрика может возвращать экземпляры разных классов , объединенных общим интерфейсом или абстрактным классом?


Бывает и так, и так. Фабрику обычно добавляют для решения таких проблем:

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

Ну и вопрос: чем тебе не подходит DI? То есть, просто передавать логгер в конструктор твоего класса? Зачем ты начал изобретать какие-то странные решения?
257 1966070
>>1965892

> в рамках этой строки понятие "инверсия управления" означает ли...



Я полистал Фаулера ( https://martinfowler.com/articles/injection.html#InversionOfControl ) и твой код не похож на то, что у него описано как "инверсия управления":

> For this new breed of containers the inversion is about how they lookup a plugin implementation. In my naive example the lister looked up the finder implementation by directly instantiating it. This stops the finder from being a plugin. The approach that these containers use is to ensure that any user of a plugin follows some convention that allows a separate assembler module to inject the implementation into the lister.



> означает ли то что класс ServiceFabric получая в качестве аргумента класс MonologLoggerService - перестает зависить от его реализации?



Я не понимаю, что тут делает ServiceFabric. Он просто возвращает тот объект, который ему дали? Тогда зачем он нужен?

Не видя кода ServiceFabric, нельзя сказать, зависит он от MonologLoggerService или нет. На первый взгляд, он зависит, так как требует его передачи в конструктор.
258 1966076
>>1965999

Непонятное описание задачи.

> Есть список дат,


Понятно

> нужно прогнать их через функцию, которая возвращает список


Понятно

> и в конце записать csv вида item,date1val,date2val,date3val.


Уже менее понятно. dat1val - это склеивание строк date1 и val?

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


Непонятно.
259 1966079
>>1966076
Это значение для этого item для этой даты.
260 1966086
>>1965997

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

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

Если уж использовать регулярки, не лучше ли использовать preg_match_all с регуляркой такого вида:

число | знак операции | любой другой символ

Она разобьет строку "2 + 2 / error" на массив строк [2, +, 2, / , e, r, ,r ,o ,r]. И уже обходя этот массив, мы можем легко выделить из него числа, операции и ошибочные символы.

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

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


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

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


Я думаю, можно собирать цифры в строку, а когда мы доходим до знака операции, вызывать функцию преобразования строки в число.
261 1966088
>>1966059
Да и в ОП посте уроки актуальные? Где можно найти хороший, но не длинный курс
262 1966089
>>1965997

А, понял, в чем ошибка. У тебя при нахождении знака деления выполняется два ифа подряд:

elseif (!is_numeric($symbol) and $operation == '') {

и затем сразу

if (!is_numeric($symbol) and $operation != '') {
263 1966092
>>1966079

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

[
item1 => [date1 => val1, date2 => val2],
item2 => [...],
...
]

Вариант 2:

[
date1 => [item1 => val1, item2 => val2],
date2 => [...],
....
]
264 1966096
>>1966092
Основная проблема в том, что генерируем мы по датам, а выводить потом надо по айтемам.
В принципе я уже решил с дополнительным циклом после каждого вызова, но думал может есть какое-то элегентное решение.
265 1966116
>>1958281 (OP)
Есть 2 таблицы,
в одной список упражнений [id - описание]
в другой журнал [id - id_упражнения - день].
При выполнении упражнения в таблицу журнал добавляется запись. Eсли я сейчас сделаю JOIN journal ON exercises.id = journal.exercise_id WHERE day = x ,и всего упражнений 3 а записей в журнале 2 то мне выдаст 2 строки, а хотелось бы чтоб выдавал все 3 с NULL'ами там где записей нет. Это реально?
266 1966120
>>1966116
left join
267 1966149
>>1966120
уже пробовал, не работает
268 1966155
Написал тут часть задачи про сайт тестирования. Так как я ленивый мудень, то занято это значительно больше времени, чем хотелось. ОП, посмотри, пожалуйста
https://github.com/deadj/testhub
269 1966164
>>1966149
where выбирает только совпадающие, замени на and
270 1966181
Нихуя не понял, как решить задачу про банкомат из гайда.
Жадный алгоритм зделол, а как заставить работать эту хуйню с усложнением условий (выдача минимальным числом купюр 6600)- хуй знает. В подсказке к задаче ебаный матан, а я не люблю математику, где букв больше, чем цифр. Я тупой? Выкатываться из треда?
271 1966184
>>1966181

>я не люблю математику, где букв больше, чем цифр


Во всей математике букв больше чем цифр.
plachuschiykot.jpg20 Кб, 426x314
272 1966202
Что-то не могу найти курсов по Магенте 2. Как будто никто не работает с ней. На курсхантере пусто, ютуб разрозненные видео выдает. Подскажите, кто что знает
273 1966204
А зачем сделали что php из коробки без шаблонизатора в хтмл лезет?
274 1966206
>>1966204
90-е года, дикий веб.
275 1966240
>>1966204
php это и есть шаблонизатор.
276 1966301
>>1966204

> А зачем сделали что php из коробки без шаблонизатора в хтмл лезет?


YAGNI + KISS
PHP это все-таки бэкенд и шаблонизатор там нужен не всегда (например, если ты только принимаешь данные с формы и выдаешь в ответ какой-нибудь JSON). А если нужен - есть много сторонних решений, используй любое. Зачем разрабам ПХП заниматься шаблонизаторами, если им нужно сам язык развивать и поддерживать.
277 1966437
>>1966063

>>Вот например, зачем ты сделал фабрику логгеров? Что тебе мешает сразу создать логгер через new MonlogLoggerService?



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

>>Бывает и так, и так. Фабрику обычно добавляют для решения таких проблем:


>>Ну и вопрос: чем тебе не подходит DI?


Я в первую очередь решал такую для себя проблему - получить возможность быстрой замены конкретной реализации какого то сервиса во всем клиентском коде в приложении. И я специально не пользуюсь DI - контейнерами, или банальным сервис-локатором. Хочу лучше прочувствовать что дает не правильный подход. Мне как то проще сделать криво, столкнуться со всеми минусами кривого решения, и тогда я по настоящему понимаю реальные плюсы правильного подхода.

>>Не видя кода ServiceFabric, нельзя сказать, зависит он от MonologLoggerService или нет. На первый взгляд, он зависит, так как требует его передачи в конструктор.


А как же в таком случае должен выглядить полностью не зависимый ServiceFabric?

А как поправить мой пример кода так что бы стало более правильно?

И вот вопрос тогда, вот в DI контейнере я определил сервис, LogService::class. И в клиентском коде я получаю этот объект из контейнера. А после я решил что в контейнере LogService::class должен быть иной логгер, не монолог. Я просто руками в контейнере меняю Монолог на что то другое, и все?
Или есть иной вариант.

Сорр если туплю, я Зандстру начал читать , разделы про ООП, пока что все немного в кучу. У него сервис локатор это класс, который через статические методы получает и возвращает какие то объекты - паттерн Регистр примерно так.
277 1966437
>>1966063

>>Вот например, зачем ты сделал фабрику логгеров? Что тебе мешает сразу создать логгер через new MonlogLoggerService?



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

>>Бывает и так, и так. Фабрику обычно добавляют для решения таких проблем:


>>Ну и вопрос: чем тебе не подходит DI?


Я в первую очередь решал такую для себя проблему - получить возможность быстрой замены конкретной реализации какого то сервиса во всем клиентском коде в приложении. И я специально не пользуюсь DI - контейнерами, или банальным сервис-локатором. Хочу лучше прочувствовать что дает не правильный подход. Мне как то проще сделать криво, столкнуться со всеми минусами кривого решения, и тогда я по настоящему понимаю реальные плюсы правильного подхода.

>>Не видя кода ServiceFabric, нельзя сказать, зависит он от MonologLoggerService или нет. На первый взгляд, он зависит, так как требует его передачи в конструктор.


А как же в таком случае должен выглядить полностью не зависимый ServiceFabric?

А как поправить мой пример кода так что бы стало более правильно?

И вот вопрос тогда, вот в DI контейнере я определил сервис, LogService::class. И в клиентском коде я получаю этот объект из контейнера. А после я решил что в контейнере LogService::class должен быть иной логгер, не монолог. Я просто руками в контейнере меняю Монолог на что то другое, и все?
Или есть иной вариант.

Сорр если туплю, я Зандстру начал читать , разделы про ООП, пока что все немного в кучу. У него сервис локатор это класс, который через статические методы получает и возвращает какие то объекты - паттерн Регистр примерно так.
278 1966507
>>1966437

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

- определяем интерфейс логгера LoggerInterface
- делаем несколько логгеров, реализующих этот интерфейс

Далее есть несколько вариантов, как это использовать:

1) с помощью DI

В конструкторе объявляем зависимость от LoggerInterface, сохраняем его в $this->logger, и далее в коде используем его:

$this->logger->warning("Yes");

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

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

2) с помощью ServiceLocator

Делаем в ServiceLocator метод getLogger(): LoggerInterface и используем его:

$this->locator->getLogger()->warning("Yes");

Здесь для подмены логгера надо лишь заменить единственную функцию getLogger().

Про минусы сервис локатора (и про плюсы DI) можно прочесть у меня в уроке про DI: https://github.com/codedokode/pasta/blob/master/arch/di.md

3) с помощью Registry - создаем логгер, кладем в Registry, а в других местах берем его оттуда.

Заметь, что ни один из этих подходов не требует писать фабрику. Мне кажется, она в данной ситуации не нужна.

-----

Подход с интерфейсом работает, если ты пишешь сам код логгеров. Если ты используешь сторонние библиотеки, ты не можешь заставить их соответствовать твоему интерфейсу. В таком случае ты пишешь интерфейс LoggerInterface и адаптеры (вроде MonologAdapter), которые соответствуют интерфейсу и которые передают сообщения сторонней библиотеке.

-----

Теперь про минусы твоего кода:

- ты копипастишь код создания фабрики много раз (каждый раз, когда тебе нужен логгер), а копипаста это плохо (если придется что-то менять, то придется менять в куче мест). Нарушаешь DRY = Dont Repeat Yourself.
- у тебя, чтобы поменять тип логгера, надо его менять в куче мест
- у тебя каждый раз с помощью new создается новый объект фабрики и новый объект логгера. Это может вызвать проблемы, например, если логгер открывает соединеие с БД, то каждый новый логгер будет открывать новое соединение и ты упрешься в лимит на число соединений. Правильнее использовать один объект логгера везде, а не создавать каждый раз новый. Или другой пример: ты хочешь не печатать в лог сообщение, если оно совпадает с предыдущим. Ты не сможешь это сделать, так как каждый раз ты создаешь новый объект логгера, который ничего не знает о предыдущем логгере и предыдущем сообщении.

> И вот вопрос тогда, вот в DI контейнере я определил сервис, LogService::class. И в клиентском коде я получаю этот объект из контейнера. А после я решил что в контейнере LogService::class должен быть иной логгер, не монолог. Я просто руками в контейнере меняю Монолог на что то другое, и все?



Поменять так просто ты не можешь, так как ты в куче месте в коде прописал LogService и код ждет именно этот класс.

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

----

На самом деле, тут есть еще второй вариант, без интерфейсов. Ты можешь сделать класс-посредник, LoggerService, вся суть которого в том, что он передает сообщения конкретной бибилиотеке (например, Monolog). Везде ты внедряешь объект этого класса в качестве логгера. Тогда для замены логгера тебе будет достаточно поменять код в LoggerService.
278 1966507
>>1966437

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

- определяем интерфейс логгера LoggerInterface
- делаем несколько логгеров, реализующих этот интерфейс

Далее есть несколько вариантов, как это использовать:

1) с помощью DI

В конструкторе объявляем зависимость от LoggerInterface, сохраняем его в $this->logger, и далее в коде используем его:

$this->logger->warning("Yes");

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

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

2) с помощью ServiceLocator

Делаем в ServiceLocator метод getLogger(): LoggerInterface и используем его:

$this->locator->getLogger()->warning("Yes");

Здесь для подмены логгера надо лишь заменить единственную функцию getLogger().

Про минусы сервис локатора (и про плюсы DI) можно прочесть у меня в уроке про DI: https://github.com/codedokode/pasta/blob/master/arch/di.md

3) с помощью Registry - создаем логгер, кладем в Registry, а в других местах берем его оттуда.

Заметь, что ни один из этих подходов не требует писать фабрику. Мне кажется, она в данной ситуации не нужна.

-----

Подход с интерфейсом работает, если ты пишешь сам код логгеров. Если ты используешь сторонние библиотеки, ты не можешь заставить их соответствовать твоему интерфейсу. В таком случае ты пишешь интерфейс LoggerInterface и адаптеры (вроде MonologAdapter), которые соответствуют интерфейсу и которые передают сообщения сторонней библиотеке.

-----

Теперь про минусы твоего кода:

- ты копипастишь код создания фабрики много раз (каждый раз, когда тебе нужен логгер), а копипаста это плохо (если придется что-то менять, то придется менять в куче мест). Нарушаешь DRY = Dont Repeat Yourself.
- у тебя, чтобы поменять тип логгера, надо его менять в куче мест
- у тебя каждый раз с помощью new создается новый объект фабрики и новый объект логгера. Это может вызвать проблемы, например, если логгер открывает соединеие с БД, то каждый новый логгер будет открывать новое соединение и ты упрешься в лимит на число соединений. Правильнее использовать один объект логгера везде, а не создавать каждый раз новый. Или другой пример: ты хочешь не печатать в лог сообщение, если оно совпадает с предыдущим. Ты не сможешь это сделать, так как каждый раз ты создаешь новый объект логгера, который ничего не знает о предыдущем логгере и предыдущем сообщении.

> И вот вопрос тогда, вот в DI контейнере я определил сервис, LogService::class. И в клиентском коде я получаю этот объект из контейнера. А после я решил что в контейнере LogService::class должен быть иной логгер, не монолог. Я просто руками в контейнере меняю Монолог на что то другое, и все?



Поменять так просто ты не можешь, так как ты в куче месте в коде прописал LogService и код ждет именно этот класс.

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

----

На самом деле, тут есть еще второй вариант, без интерфейсов. Ты можешь сделать класс-посредник, LoggerService, вся суть которого в том, что он передает сообщения конкретной бибилиотеке (например, Monolog). Везде ты внедряешь объект этого класса в качестве логгера. Тогда для замены логгера тебе будет достаточно поменять код в LoggerService.
279 1966695
НЕ ПОЛУЧАЕТСЯ БЛЯТЬ РЕШИТЬ ЗАДАУ,Я ПИЗДЕЦ ТУПОЙ ГУМАНИТАЙРИЙ, ДАЙТЕ ЗНАК ЧТО ДЕЛАТЬ С ЭТОЙ ЗАДАЧЕЙ ИЗ ОП ПОСТА, РАЗБИЛ УЖЕ ЛОБ ОБ ГУГЛ

W5.1. Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?
280 1966840
>>1966695
Я же выше скидывал как нужно переделать цикл для корректной работы алгоритма

if (($creditBalance + $creditBalance x 0.03 + 1000) < 5000) {
$sumTotal = $paymentTotal + 1000 + $creditBalance + $creditBalance x 0.03;
echo "С меня хватит! Я выплатил {$sumTotal}";
break;
}
16083948225120.jpg167 Кб, 547x531
281 1966918
https://ideone.com/PpCkDJ
Пожилой круг написал на костыличах тупа, остался ряд вопросов: нахуя нужны были $toAngle и $fromAngle? Как напечатать злоебучий пробел, если до него нет других символов? На ideone нельзя кодировку менять? Пришлось английский алфавит выводить.
282 1966953
>>1966840
Спасибо огромное и вообще спасибо тебе за этот Гайд, я давно хожу около этой темы и ты сделал просто супер толчок, именно этого мне не хватало, чтобы дальше изучать самому, ещё раз спасибо, уверен что задам ещё много тупых попросив, но зная что есть такие люди - не страшно делать ничего, редкость в нашей стране
283 1966955
>>1966840
Спасибо тебе огромное анон, только благодаря твоему найду смог начать самообучение, редко встретишь такого человека, спасибо!!
284 1967290
>>1966202

>Что-то не могу найти курсов по Магенте 2


Зачем тебе магента?
285 1967302
>>1966059
1. Можно, но придется изучать новые темы: работу браузера, верстку, жс, жс фреймворки (они работают немного по другим паттернам, нежели бек)
2. Laravel для простого старта. Yii2 устарел. Symfony может показаться переусложненным.
За сколько - от тебя зависит.
3. Математика не нужна. Алгоритмы только основы чтобы не делать запросы к базе в цикле и потом удивляться, а че так медленно. Higload больше про оптимизацию узких мест, про инфраструктуру, про хитровыебанные запросы в бд, про кеширование и т.д.
4. Быть в состоянии запилить CRUD приложуху (на подобии задачи про студентов) на одном из современных фреймворков
>>1966088
Ларакасты глянь например
286 1967679
анонсы, я немножко в ступоре. подскажите один момент. вот есть класс с 4 протектед методами. и есть паблик метод который является аналогом конструктора (класс используется для рендера форм). и вот такой вопрос: мне сверху приходит айдишник формы от 1 до 5 если что, и в зависимости от него я должен дернуть соответствующий protected метод чтобы он отрендерил нужную форму. как такое провернуть с максимально нормально кодстайлом? а то сейчас на ум приходит только тыкать пять if где внутри будет тупо return $this->renderFormName();
287 1967716
>>1967679
Switch case
16156255712243 (online-video-cutter.com).mp463 Кб, mp4,
360x360, 0:03
288 1967801
есть база данных с графами "ингридиенты" "блюда"
например, одна строка из базы данных: лук укроп картошка мясо = пюре зразы котлеты картошка
есть кнопка "поиск"
за сколько анон готов сделать поиск по бд?:
1) Вбиваешь "картошка" - выводятся все результаты, где "картошка" хоть слева, хоть справа
2) Вбиваешь в поиск "картошка = " и он искал картошку только в ингридиентах
3) Вбиваешь в поиск "= картошка" и он искал картошку только в продуктах
И если находится такое слово, то выводятся пользователю все строки из базы данных в изначальном формате:
"лук укроп картошка мясо = пюре зразы котлеты картошка"
на биржи не иду, хочу поддержать нашего анона
290 1967817
Swool рабочая тема?
291 1967869
>>1967817
Русский программист swool становится большой богатый, много риса и нефритовый стержень
292 1967881
>>1967869
Krasota
293 1968051
>>1967801
Лол, задача на пару часов.
Скок платишь?
294 1968348
>>1967801
чи шо совсем долбоеб? Гуглится за 5 минут

tbl - таблица, txt - столбец

1) SELECT FROM tbl WHERE txt LIKE '%картошка%'

2) SELECT
FROM tbl WHERE EXISTS (
SELECT LEFT(txt, LENGTH(txt)-LOCATE('=',txt)) FROM tbl WHERE txt LIKE '%картошка%'
)

3) SELECT * FROM tbl WHERE EXISTS (
SELECT RIGHT(txt, LENGTH(txt)-LOCATE('=',txt)) FROM tbl WHERE txt LIKE '%картошка%'
)

на пыхе-то распишешь сам надеюсь. Блять, очередной зумер походу, который нихуя не умеет и хочет вкат.
Как багодарность - хуячь донат https://rayfund.ru/get_involved/donate/ сюда например с пруфом (чеком) или попущен.
295 1968352
>>1968348
быстрофикс

абу звездочки проебал после SELECT-ов в 1 и 2 случаях
296 1968533
>>1968348

Тут, по моему, для поиска слева/справа от равно можно использовать выражение вида

WHERE txt LIKE '%=%картошка%'

Но вообще, структура базы данных какая-то странная. Надо делать отдельно таблицы ингридиентов, блюд и связи многие-ко-многим между ними.
297 1968592
>>1966840
/ В эту переменную запишем получившееся имя /
$name = '';

/ Гененрируем 4 слога /
for ($i = 1; $i <= 4; $i++) {
/ Выкидываем случайное число (count - число элементов в массиве) /
$random = arrey_rand($letters, 1);
$randomText = $letters[$random];
$name .= $randomText;

echo "Выпало число {$random}, слог {$randomText}\n";
....
}

echo "------\n";
echo "Советую имя: {$name} - не прогадаешь!\n";

В чем я не прав?
298 1968593
без цикла работает нормально, загоняю в цикл и получаю ошибку
299 1968597
>>1968592
array_rand, а не arrey_rand
300 1968598
всем привет, собираюсь вкатиться в пыху.
несть несколько вопросов. буду благодарен, если ответите.
1. Что почитать из русской литературы?
Пока склоняюсь к Котерову + параллельно гуглить
2. В книгах сейчас в основном пыха 7-ая, как потом свитчнуться на 8?
3. мне 25 (не поздно вкатываться?) и я манагер, собираюсь учиться по 2-3 часа по вечерам и на выходных по 5-6. это очень хуево?
301 1968613
>>1968597
А, точно, но всеравно у меня выдется ошибка, не могу понять вч ем проблема того тчо я высрал
302 1968619
>>1968598
Просто начни вкатваться по инструкции в шапке, как только начнешь понимать принцип работы языка - будешь вдаваться в подробности
303 1968661
>>1968593
>>1968613
Ну так привел бы текст ошибки
304 1968671
>>1968533
авотхуй
пики смотри
image.png57 Кб, 778x829
305 1968799
>>1968661
Писал выше, вот полный текст, не могу понять в чем именно я ошибся
306 1968846
>>1968799
Сотри 24 строку. Ideone, кстати, подсвечивает такие ошибки во время редактирования кода.
307 1968887
>>1968598
Начни дрочить как хобби, и выкинь нахуй далеко маня мечты про вкат, про тыщи денег и маня успех. Если ты сейчас по жизни сосешь хуй, то дело в первую очередь в твоей личности и образе мышления и привычках. И поверь - ты так же будешь учить пхп как живешь - через пизду. И работать будешь также, если дотянешь до этого - через пизду и за три копейки.
Начни лучше с личных качеств.
А прогинг как хобби - это может и не зайти нихуя.
308 1968889
>>1968846
Спасибо, рад как ребёнок)
309 1968892
>>1968887
п.с. мимо 34 лвл, типа вкотился потому что хуебень уже сам пишу всякую за деньги , за 3 блядь года.
но я по вышке - ойти
310 1968897
>>1968887

>>1968598

Ставлю жирный плюс под словами этого анона, сразу после универа хотел вкатиться в фронт энд, были манямечты и все такое, думал, что я смогу зарабатывать и съехать на хату, что мне опмогут курсы на котрые я отходил и что я буду просто супер. Но по факту работал в калл центре, потом переводчиком в брачке и потом в говнофирме, начал работать над мировосприятием( это алкашка, наркота, работа с психологом) сразу вспомнил как в детстве ездил на олимпиады и решал задачи и решил не то что вкатиться - а понять ПХП, понять интересно мне или нет и так же как в детстве порадоваться от решения задач. Сейчас четко понимаю, что тут поможет только упорство и ответственность, других путей нет. Но надежны на перекат в эту сферу как работу я даже не строю, все так же варюсь в менеджерской среде, потому что нужно хавать за какие-то бабки и с этим поможет только имеющийся опыт. Так что ты не думай что все так просто, дело даже не в часах, которые ты потратишь, а будет ли тебе это хотеться
311 1968914
>>1958281 (OP)
Тупой вопрос:
есть старый сайт на Symphony 2
Отредактировал в нём один из twig-файлов (главный).
Содержимое страницы осталось прежним.

Пробовал:
Перезапустил apache
Обновил страницу через ctrl+f5
Очистил вручную папку app/cache

В чём может быть дело?
На этом же хостинге лежит сайт на Laravel.
C ним таких проблем нет. Если отредактировать blade-файл, то изменения подхватываются на лету.
312 1968934
начал учить пхп и решил окончательно перекатиться на линукс.
как поднять свой сервер?
поставил апач 2 и пхп 8.0.3
запускаю в терминале апач и по пути "/var/www/html/test
" есть мой пхп файл, он и обрабатывается.
пока на этом остановлюсь и буду так учить пхп. это правильно?
(знаю про ламп и готовые сервера, но решил попробовать вот так по-деревенски)
313 1968935
>>1968897
Слушай, я столько это говна в своей голове перекрутил, что мне в пору в тиктоке блядь людей жизни учить я полу серьезно, я даже имею концепты и темы о чем говорить. Я на этой хуйне собаку сожрал. И полностью принял то что твой успех - это ты сам. Ты точка отсчета.
А люди тащатся в прогинг как за серебрянной пулей что решит их все проблемы - хуй. Проблемы только сам человек может решить, когда осознает.
314 1968937
>>1968934
Нахуй тебе сервера вообще?
Дрочи в консоли основы.
315 1968946
>>1968937
какие основы в консоли?
основы линукса? или что?
316 1968957
>>1968946
начни с прав на каталоги и файлы
317 1968961
>>1968957
chmod 777, мне этого достаточно
Untitled.png219 Кб, 1920x1170
318 1968968
>>1968946
Да всего. Открываем справочник, веб из этого нужен только нескольким пунктам в конце, и то они решаются средствами фреймворка, поэтому учатся отдельно.
319 1968981
>>1968968
я не знаю английского.
320 1968985
>>1968981
При чем тут английский? Я тебе говорю, что 95% возможностей языка не требует веба.
321 1968990
>>1968985
а причем тут не требуют веба? я хочу сразу понять работу серверов и т.д. Хочу это всё делать в линуксе, а не в ебливой винде
322 1968993
>>1968990
Потому что ты на ровном месте намного усложняешь всё.
Но если хочется, то почему нет.
323 1969001
>>1968993
усложняю потому что пока не особо понимаю, что к чему. Хочется всё и сразу. Послушаю твоего совета и пока буду не спеша осваивать язык.
324 1969126
>>1968799
А мб начнешь писать код в IDE и запускать локально?
Там глядишь и иде подсветит ошибки, и в консоли при запуске выдаст стектрейс
325 1969128
>>1968935
>>1968887
Говорят, у коучей прорвало, захлестнуло даже наш тред
326 1969132
>>1968990
Тогда поднимай нжинкс, чтобы он при загрузке линя автоматом поднимал сервер. А потом упакуй это в докер и так же, чтобы автоматом поднимало.
Только это путь в девопсы, а не бекендеры.
327 1969194
Как пхп исп ядра проца?
Только одно?
328 1969232
>>1968914
На stackoverflow посоветовали выполнить: php app/console cache:clear --env=prod.

Проблема в том, что в проекте нет ни app/console ни bin/console.
Симфония как будто не установлена полностью. Composer install тоже не срабатывает (проблемы с совместимостью пакетов).
329 1969243
>>1967290
Многа деняк дают
330 1969273
>>1968051
500 руб за код и ещё 500 если созвонимся в скайпе и расскажешь, как работает код и немного основных вопросов по пхп, но не дольше часа
@Dima_Kedr
331 1969287
>>1969243
Сколька?
332 1969298
333 1969383
>>1969128
О да, коучем быть заебись - втираешь банальщину, еблом торгуешь. Ахуительно. Главное ебло построже делать, что бы окружающие думали что ты тайное знание открыл.
334 1969690
Анон, подскажи по доктрине. Есть джве сущности Tag и Post с отношением one to many. Нужно получить с помощью кверибилдера только те теги, у которых есть хотя бы один пост
335 1969693
>>1968981
Земля пухом, ебать
336 1969713
>>1969690
Уже не надо.
337 1970124
>>1968914
Если ты уверен что шаблон точно тот, значит дело в кэше

>>1969232

> Проблема в том, что в проекте нет ни app/console ни bin/console


Кэш можно вручную снести, там для кэша twig отдельный каталог должен быть.
338 1970145
>>1968914
Если нет папки console, значит криво установлены пакеы через композер.

Самый быстрый вариант - снести папку кеша. Скорее всего это var/cache.
339 1970170
>>1970145

> Самый быстрый вариант - снести папку кеша. Скорее всего это var/cache


Я бы все-таки не сносил все, а ограничился только кэшем твига, а в идеале еще и забэкапить кэш. Особенно если это продакшн.
340 1970180
>>1970145
Я только сейчас понял, что сайт хостится на виртуалке, а те файлы, что я пытался редактировать вообще не задействованы.
Забавно то, что сам хостинг представляет собой VDS (хост Fastpanel, ось Debian), и на нём зачем-то запущен VirtualBox.
341 1970186
Дайте совета. У меня кодерский стаж менее года, прохожу курсы и потихонечку изучаю бэк параллельно с фронтом, изучаю Laravel на ларакасте и еще материалы.
Мне нужно сделать сайтец знакомому (Без тролинга, реально помощь нужна), там всё поставлено на OpenCart, вроде всё просто, только вот как ориентироваться в этом непонятно, документаций там нет ваще никакой, просто концепт MVC и всё. Вроде он тоже понятен, но! Как находить методы и переменные? Какой то плагин в редакторе использовать? ctags? Помогите пожалуйста.
342 1970192
>>1970186

> Мне нужно сделать сайтец


> там всё поставлено на OpenCart


Так нужно сделать с нуля иди доделать/переделать готовое?

> Как находить методы и переменные?


Качаешь сайт себе на локальный сервер и открываешь в IDE
343 1970212
>>1970192

>Так нужно сделать с нуля иди доделать/переделать готовое?


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

>Качаешь сайт себе на локальный сервер и открываешь в IDE


ДА поставил давно уже, параллельно разбираюсь, не могу понять как методы искать. В Vim вроде есть CTRL+P плагин с ctags.
Может еще какие советы есть как разбираться в непонятном коде?
344 1970388
class A
{
private $varA;

public function __construct($config = [])
{
parent::__construct($config);
$varA = 1;
}
}

Это выебоны программиста?
PHP + API 345 1970697
Аноны, можете накидать пример моих действий, есть 3 паблик API с которых нужно получить данные, причём получить их в определённой последовательности, в приоритете 1 API, то есть если 1 API недоступно, вывести данные со 2 API, а если и оно недоступно или таких данных на нём нет, то запросить их с 3 API, на всё про всё секунд 10, дольше думаю юзер ждать не будет

Гугл сказал что делается это так

$ch = curl_init('http://site.ru/api1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
echo $html;

Если я подряд вставлю 3 таких кода каждый на свой URL они будут исполняться по очереди ожидая окончания предыдущего или это всё работает в асинхроне и например с 3 API данные могут прийти быстрее чем с 1?

Надеюсь я понятно объяснил что хочу сделать, если коротко то выводить данные с запасных API если приоритетное не отвечает или тормозит
346 1970728
>>1970697
Чистый курл не нужен, юзай газл, твоя задача замечательно ложится на промисы

>Если я подряд вставлю 3 таких кода каждый на свой URL они будут исполняться по очереди ожидая окончания предыдущего или это всё работает в асинхроне и например с 3 API данные могут прийти быстрее чем с 1?



В твоём коде выполнится последовательно
348 1970734
>>1970388
да, код полностью эквивалентен
class A
{
private $varA = 1;
}
349 1970759
>>1970728

>В твоём коде выполнится последовательно


То есть если 1 API не доступно весь скрипт будет висеть ожидая его ответа? Или у curl_init есть какой-то таймаут ожидания ответа после которого он дропает запрос и идёт дальше по коду?

>юзай газл


Это типа как XMLHttpRequest в JS?
350 1970780
>>1970759

>у curl_init есть какой-то таймаут ожидания


Да, есть. И он настраивается

>юзай газл


>Это типа как XMLHttpRequest в JS?


Это либа пхпшная. Хоть бы загуглил прежде чем спрашивать
351 1970799
>>1970780

>Это либа пхпшная


Просто хотелось обойтись без костылей, чистой ванилой так скажем 1 файлов скрипта, но вообще у PHP получается только 2 способа загрузить данные с API - это file_get_contents и curl_init получается?

>Да, есть. И он настраивается


Надеюсь не на сервере, а то с этим будет проблема
352 1970819
>>1970799
CURLOPT_CONNECTTIMEOUT
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); // 1 second timeout
353 1970821
>>1970799

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


Использование библиотек - не костыль. Тем более настолько проверенных временем.
К тому же на голом пхп в продакшене далеко не уедешь

>Надеюсь не на сервере, а то с этим будет проблема


Почитай пхп доку по курлу - там все параметры описаны, задается это дело в коде
354 1970833
>>1970819
>>1970821
Cпасибо аноны, вроде стало яснее, мне не для чего-то серьёзного, для себя мелкие фитчи на сайт

Пока для меня загадка только в том в какой последовательности я получу ответы если сделаю запрос сразу на несколько API, я так понял что код будет идти последовательно без асинхрона, особенно благодаря CURLOPT_CONNECTTIMEOUT, чтобы читать следующий API, если предыдущий не дал ответ за указанное время, надеюсь всё так
355 1970987
>>1970833
Пхп по своей природе синхронен. Так что первый запрос в апи будет ждать ответа, либо конца таймаута
356 1971012
>>1970987
Охуенно, завтра начну тестировать кашу что я придумал, ещё раз спасибо
357 1971034
>>1970833
>>1970987
Есть multicurl, нк и вообще в газзле промисы есть, все не так просто
358 1971121
Господа сеньеры, какой дистрибутив линукс посоветуете осваивать нулевому вкатышу? Убунту? Дебиан? Минт? Генту? Арч? БолгенОС?
359 1971128
>>1971121

15 лет сидим на Fedora. Лучший дистриб. Я даже домой себе поставил. Чё там осваивать? Ставишь по принципу next-next-next и у тебя просто всё работает. Были бы богатые, на RHEL бы сидели разумеется.
360 1971130
>>1971128

Из различных десктопов мне больше всего нравится Mate десктоп с переработанным Гномом 2, если там конечно от него что-то ещё осталось.
361 1971192
>>1971121
Любой популярный. Как освоишься, уже будешь дрочить разные дистрибутивы, DE и конфиги под свой вкус.
362 1971215
>>1971121

>нулевому вкатышу?


Убунту.
Ответов-советов нагуглить на нее проще всего.
363 1971543
Аноны давно уже вывалился из темы, в PHP данные на страницу так и выводятся с помощью echo? Например я хочу сделать мелкое API которое просто пройдя через 7 кругов ада выдавало бы мне ссылку, я в него вывожу результат простым echo?
364 1971544
Прарни, какую IDE посоветуете для обучаюгося-нулевого-соплепомнойного-понадусерового-какло-швайно-вкатыша?
365 1971547
>>1971543
Да, только тебе наверное не в HTML это все нужно получать, а в каком-нибудь JSON, т.е. помимо echo нужно будет еще и заголовки поменять
366 1971549
>>1971544
Визуальная Студия Код
367 1971553
>>1971547
Заебись, пиздец чё серьёзно от echo так и не ушли и всё выводится им родимым? Ну ещё понятно вар дампом, но это другое
368 1971554
>>1971553

> от echo так и не ушли


Куда уходить и зачем? Вместо echo сделать huecho? И что это даст? Если тебе нужна гибкость и удобство - обмазывайся любым шаблонизатором на выбор. В Си printf уже 50 лет используют и ничего.
369 1971559
Делал спиздил сайт на php 5, который опенсервер сейчас не поддерживает. На php 5 всё работало. Как это подправить под php7-8? Помогите долбаебу плз
370 1971562
>>1971559
Пиздец... пиши с нуля лучше.
371 1971563
>>1971562
Я бы не задавал такой вопрос, если бы мог с нуля
372 1971568
>>1971554
Я только ЗА, просто что не возьми везде всякие пидоры-нигеры обязательно всё переделывают потому что НЕ МОДНО НЕ ТОЛЕРАНТНО, УСТАРЕЛО И НЕ ЕБЁТСЯ В ЖОПУ, НАДО ПЕРЕДЕЛОТЬ
373 1971570
>>1971559
1. У тебя же в ошибке все написано. В $_SESSION не получается найти ключ user_authed. Ты его сам туда пишешь или это какое-то стандартное значение?

2. Зачем ты этот ключ проверяешь двумя условиями, если можно воспользоваться одним с else?
374 1971595
>>1971549
Спасибо большое)
image.png47 Кб, 1109x407
375 1971621
>>1971570

>1. У тебя же в ошибке все написано. В $_SESSION не получается найти ключ user_authed. Ты его сам туда пишешь или это какое-то стандартное значение?


На php 5 все работало, мне кажется тут неверный синтаксис для нового php

>2. Зачем ты этот ключ проверяешь двумя условиями, если можно воспользоваться одним с else?


Потому что я ничего не понимаю. Мне просто интересно почему это не работает сейчас
376 1971629
>>1971621

В коде следующие ошибки:

- есть уязвимость SQL инъекция, она позволяет залогиниться под любым пользоваетелем не зная пароля, подробно описано тут: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
- не надо хранить в базе пароли в открытом виде, надо хранить соленые хеши от них: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md
377 1971635
Как нормально писать на Laravel?
В документации и на ларакастах всяких логика в контроллерах и фасады. Не пойму, это просто примеры для краткости, или действительно все так пишут?
У меня почему-то такие вещи вызывают отвращение. Пока что делаю так: для каждой модели создаю сервис, который эту модель декорирует.
Как логика, так и любые запросы к БД оборачиваются в сервис. В итоге контроллер непосредственно общается только с сервисом.
Во избежание копипасты был создан базовый сервис с наиболее используемыми методами: create, find, delete, update, all и т.д.
А чтобы не копипастить вообще любой понадобившийся метод из квери билдера в сервис, я просто сделал публичным метод, который возвращает билдер модели.
Нормально делаю, или ненормально? Если ненормально, то как надо?
378 1971646
>>1971629
Что мне сделать что бы сайт то заработал...
379 1971647
>>1971646
Нахуй На фриланс пройди. Никто тут не будет за тебя твою работу выполнять, в говнище колупаясь.
380 1971657
>>1971621

> Мне просто интересно почему это не работает сейчас


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

Так это не работает, нужно и самому немного покумекать.

> мне кажется тут неверный синтаксис для нового php


Раз кажется - берешь ошибку и копируешь ее в гугол. Вот что говорит документация по поводу функции которую ты пытаешься использовать https://www.php.net/manual/ru/function.mysql-query.php Нужно переделать код и использовать вместо неё другую
381 1971678
>>1971121
Ща бы вместо кодинга пердолингом заниматься
382 1971680
>>1971544
Шторм - стандарт индустрии
383 1971682
>>1971635
Ты сделал репозиторий, а не сервис. Либо смесь сервиса и репозитория
384 1971683
>>1971646
Выкинь это говно и пиши на современном пхп
385 1971848
>>1971682

>смесь сервиса и репозитория


Задумывалось это. Хотя, я так задумался, что для некоторых моделей у меня логика отсутствует, и эти "сервисы" действительно являются репозиториями.
Причем вообще бесполезными, так как абстракции никакой по сути и нету.
Надо будет удалить их. Только что вместо них использовать? Фасады богомерзкие? Внедрять инстанс модели в зависимость?
Ох как же сложно с этим вашим актив рекорд. Вот в доктрине на тебе entity, на тебе entity manager, на тебе репозиторий. Бери и пользуйся. А тут уже какой день пытаюсь со всем этим говном совладать
386 1972020
>>1971121
Точно не арч, дебиан потому-что это системы для системных администраторов которым нужна система с минимальным набором стартовых программ. Даже не как новичку, но и профи бы посоветовал Fedora, Ubuntu (Мне не нравится) и это впринципе всё что требуется. Все системы на GNU+Linux похожи и разницы в них мало, в основном различия в сообществах, а так всё тоже самое. (Я бы посоветовал Fedora)
387 1972022
388 1972023
>>1971128
Согласен.
389 1972025
>>1971554

>В Си printf уже 50 лет используют и ничего.


У нас есть не просто printf, у нас есть printf с разными вкусами!
390 1972034
Сап двач!
Подскажите вкатывалщику на пыхе. Фриланс, хороший вариант получения опыта? Именно нулевому разрабу, без опыта.
391 1972041
>>1972034
Я тоже нуб, думаю если опыта вообще нет, то во фриланс сразу нельзя, нужно портфолио стартовое сделать, щас этим занят. Пет проекты итд. Тоже интересно узнать как начинать.
392 1972058
>>1972041
Как опыт думаешь получать? Через стажировки?
393 1972068
>>1972034
Фриланс на пыхе это чаще всего задачи вроде "у нас тут есть куча говнокода, нужно добавить туда еще говнокода". Сомнительный способ научиться грамотно погромировать. Тем более если ты без опыта.
394 1972075
>>1972068
Как тогда опыт, этот получать? Через стажировки?
395 1972077
>>1972075
Пилишь проектики для себя. Например, в шапке есть задача. Сделал, показал анону, твой код обосрали, переделал. Потом берешься за проект посложнее. И так далее.
396 1972079
>>1972077
Эти проекты годятся для трудоустроиства? А то РАБотадалям коммершеский опыт подавай
397 1972095
К большому кристалу можно только за бабло портаться?
398 1972183
>>1972034
Фрилансить нужно будучи хотя бы мидлом. Дадут тебе хотелок кабанчика - что будешь с этим делать?
399 1972184
>>1972058
Опыт получать через пет проектики.
Можно брать существующие проекты и колхозить свой клон с нуля
400 1972185
>>1972079
Если красиво покажешь и расскажешь - вполне.
А если каким-то чудом выдашь их за комм опыт, то с руками оторвут
401 1972187
Вопрос!
Есть легаси проект со своей функцией загрузки классов.

Как безболезненно начать параллельно юзать composer, не порушив старую архитектуру?
402 1972188
>>1972183
Тоже верно, спасибо учту
403 1972189
>>1972185
Благодарю, буду пробывать
404 1972194
>>1971544
Очевидно же, Eclipse
405 1972196
>>1972187
А в чем у тебя там конфликт?
406 1972205
>>1972196
composer начинает пытаться загружать свои зависимости другим, старым загрузчиком
407 1972286
>>1966181
>>1958281 (OP)
Та же фигня, может подскажет кто-нибудь? Предыдущие задачи все решил.
408 1972296
>>1972286
В той же ситуации. Я уже дальше пошел, решил оставить банкомат на потом. Тут
https://php.ru/forum/threads/zadachki-po-php.46947/
кто-то что-то пытался объяснить, но на фразе

>Поскольку мы номиналы банкнот храним в массиве a, естественно, что F(0) = 0, F(a[1]) = F(a[2]) =...= F(a[k]) = 1.


ЯННП. Мне не естественно, например.
Анончики, поясните кто-нибудь за логику решения банкомата.

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

https://ideone.com/BghFlD
409 1972299
>>1972296

>В той же ситуации. Я уже дальше пошел, решил оставить банкомат на потом


А мне ОКР не позволяет.
410 1972328
>>1972205
>>1972196
всё, решил:
благо легаси-классов в данном случае немного,
пришлось прописать их composer.json/dump-autoload
и полностью отказаться от старого загрузчика
411 1972338
Аноны, я достаточно хорошо понимаю как работают потоки в node.js. А точнее речь о файлах которые загружает браузер в форме с типом
multipart/form-data. А с пхп что то я запутался. Хотя на пхп много больше написал.
В пхп все автоматом из коробки делается, файл попадает в $_FILES , а сам сохраняется где то в temp. А как мне непосредственно а пхп получить доступ к потоку запроса. Я допустим каждые 1000 байт входящего файла хочу подергать?
412 1972379
>>1972286
>>1972296
Я посмотрел по ссылке, вроде несложно там обьяснено.
Строим табличку, сколько нужно купюр для каждой суммы от 0 до нужной, если есть вариант с меньшим числом большими купюрами, то заменяем.
Ну и потом раскручиваем обратно, отнимая наибольшие от суммы.
https://ideone.com/cO6Pdf
413 1972393
Такой вопрос. Что более распространено в компаниях: Apache+Mysql, или Nginx+Postgres? Чему большее внимание?
414 1972400
>>1966181
>>1972286

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

В общем случае этот алгоритм не работает. Что можно придумать? Можно начать с подхода "в лоб":

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

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

Дальше алгоритм можно оптимизировать. Например, если сумма равна 1200, и у нас есть купюра номиналом 500, то имеет смысл брать только 0, 1 или 2 экземпляра этой купюры, а 3 и больше можно не проверять.

Или еще оптимизация: если у нас сумма равна 1200, мы решили брать 1 купюру по 500 и перебираем кол-во купюр номиналом 200, то можно начать с числа (1200 - 1 x 500) / 200 = 3 и затем проверять остальные варианты (2, 1 и 0 купюр номиналом 200).

---

Что касается алгоритма в интернете, он работает с неограниченным кол-вом купюр. Если вы хотите его использовать, его надо модифицировать для работы с ограниченным кол-вом купюр, и проверить, возможно ли это вообще.
415 1972411
>>1972393
Nginx + MySQL и Nginx + Postgres
416 1972425
>>1972411
Apache нахуй?
417 1972500
>>1958281 (OP)
Подскажите современную альтернативу TimThumb
418 1972681
>>1972425
Нахуй
419 1972785
Та ну нахуй ваш Ларавель. Кусок конченного кривого говна. На таком писать - себя не уважать. крик души
420 1972895
>>1972785
Ну не пиши, тебя никто не заставляет
421 1972909
Аноны, дайте совет - как правильно проверять загружаемые пользователем на сервер файлы?
Мне нужно только картинки загружать.
Сначала я проверяю exif_imagetype(), после is_uploaded_file().
Это нормальный вариант?

Есть еще функция mime_content_type(), она в принципе равнозначна exif_imagetype()?
exif_imagetype - вроде читает сигнатуру из первых байт файла, определяя какая это картинка, и картинка ли вообще. По идее mime тип в этих первых байтах и хранится.

А как мне ограничить размер файла? Что бы если мне не залили гигабайтное кино, например.
В ноде просто считаешь поток request,часть где multipart-form-data, и если он слишком большой - перестаешь из него читать.
В пхп только через настройки php.ini? Я так понимаю что если файл попал в $_FILES -то он уже залит, значит ограничения где то выше должны быть.
Я в .htaccess установил директивы

php_value upload_max_filesize 10M
php_value post_max_size 10M

кажется нихуя не дало
как правильно заливтаь файлы?
422 1972912
>>1972909
п.с.
директивы
php_value upload_max_filesize 10M
php_value post_max_size 10M

работают, только не пойму какое исключение они возвращают.
По факту просто не качает файл и все. А скрипт обработчик пытается выполниться
sanitizing.png12 Кб, 693x185
423 1972942
Привет, аноны. Недавно вкатился. Пилю сайт с базами данными, чисто потренироваться. Может кому встречалась какая-нибудь супер классная и полезная статья, про то, как отсанитарить инпут правильно? Английский свободный. Какие-то статьи читал по теме, но они касались этой темы довольно поверхностно. Пока пользуюсь пикрилейтед, но подозреваю это не самый лучший способ.
424 1972950
>>1972942
Лол, какая-то дедовская хуйня. Для базы есть prepared statements, которые решают проблемы с эскейпингом и иньекциями, дальше можно заэнкодить через htmlspecialchars, чтобы избежать всяких xss.
425 1972969
>>1972895
И не буду пока барин не заставит
А ты дрочи себе свои фасады
426 1972985
>>1972400
Я в правильном направлении иду?

https://ideone.com/gw28Wd
427 1973009
Аноны, что нужно использовать в пхп для работы с изображениями? Мне нужно приводить все загружаемые картинки к одному размеру.
Так я понял по документации для этого используются три варианта пакетов: GD , Gmagick , ImageMagick.
Какое из них нужно выбрать?
Или еще варианты есть?
428 1973174
>>1972985
А что за задача?
429 1973186
>>1972985

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

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

>ImageMagick


Я вот это использовал, очень удобно, можно использовать готовый пример. Использовал это для генерации картинок для мобильной версии сайта, чтобы ускорить загрузку сайта для телефонов, там же все равно маленький экран
431 1973197
>>1972942
Чем что-то запрещать в логине, проще что-то разрешать. Сделать регулярку на лат.буквы и цифры. А для пароля сделать ввод чего угодно. Ты ведь все равно прогонишь это через htmlspecialchars, PDO, плюс пароль наверняка захэшируешь с солью. Никакая гадость не пролезет.
432 1973212
433 1973248
Анон, помоги! Не могу понять, в чем я ошибаюсь. Решаю задачу про написание текста по кругу. Вроде все сделал верно, но при написании теряется первый символ введенной строки: https://ideone.com/t381vz
А еще мой круг кажется мне кривоватым, как бык поссал.
А еще поясни, пожалуйста, в чем сакральный смысл переменной $height и почему она у нас равна именно 30?
434 1973263
>>1973248
for ($i=0;$i<=$phraseLenght;$i++)
<= на один раз больше срабатывает и затирает первый.
435 1973544
Что быстрее: условный круд на симфони или ларе?
436 1973548
>>1958281 (OP)
Анончики помогите. С меня - нихуя.
На диске лежит файл image.png, размер 20000 на 20000. Вывести картинку как баннер размером 200 на 100 пикселей.
437 1973555
>>1973544
Скорее все упрется в железо и разница будет несущественной.
438 1973559
>>1973548
Берешь любую библиотеку для обработки изображений, делаешь баннер и выводишь.
R8aLhmiN8rUgojf5QE8E0wAqhU73-qbcx2952[1].jpg85 Кб, 612x236
439 1973736
>>1973544
https://hackernoon.com/php-laravel-vs-symfony-a-detailed-comparison-of-web-development-frameworks-sq493y3l
Ну вот некий тест. Предполагаю, что может меняться от версии к версии.. В целом, логично, что на старте симфони за счёт сложности будет чуть медленнее.
440 1973738
>>1973736
>>1973544
Вообще в таком сравнении смысла не очень много. Понятно, что всегда быстрее минимальный на pure PHP -- и, собственно, что?
441 1973759
>>1973738
Я бы лучше смотрел на среднее время ответа сервера, тот же вордпрес упаси боже может две секунды думать в то время пока лара и симфони >50мс
442 1973774
>>1973736
О, спасибо. По-моему разница в три раза - это не чутка.
443 1973984
>>1973774
Думаю, при наполнении данными и применении кеширования эта разница нивелируется. Но если просто нужна причина не учить сложную симфони -- то да, можно опираться и на этот тест.
444 1974058
>>1973544
Там для лары на днях Octane презентовали - асинхронный фреймворк на основе swool. 6к рпс из-коробки
445 1974062
>>1973186
Как реализовать?
446 1974252
С ларавелом выгоднее всего учить Vue. А с Symfony так же, или на Angular/React в связке с ним больший спрос?
447 1974266
>>1973559
Какую?
448 1974408
PHP 8 уже используют, его нужно учить или подойдут туториалы, где изучают PHP 7?
449 1974423
>>1974408
Легаси евривеа. Даже 7 то не везде используется (тут вот недавно был анон с говнокодом, который работал только в 5), а 8 и подавно. Смотри мануалы по 7, а про 8 разве что для общего развития можешь почитать.
450 1974498
>>1958281 (OP)
Хочу устроиться на работу PHP джуном, но до этого я готовился на frontend (js). Можете подсказать короткий путь, как подготовиться к собесу за 18 дней?
Я учился по книжке ОПа, но дошел до ООП, да и все забыл уже по PHP. Но что такое циклы, условия и ООП в целом я знаю.
Сейчас уже нет времени решать задачи про банкомат и расчет маршрута как же я с ними марался.
Может подскажете видео курсы или книгу? Так же нужно выбрать фреймворк, который легче и быстрее учится. И если можно по нему тоже курс какой-нибудь.
Вот требования вакансии:
Знание PHP, ООП, MVC
Опыт написания SQL запросов
Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)
451 1974544
>>1974498

> 18 дней


> Сейчас уже нет времени решать задачи



Ну тебе тогда нужна книга PHP for dummies in 18 days

> Вот требования вакансии:


Сомневаюсь что ты за 18 дней наберешься таких знаний. Скорее всего у тебя просто каша будет в голове. Мне кажется лучше пока забить на фреймворки и сконцентрироваться на самом PHP + MYSQL. Сами фреймворки просто базово изучить, а на собеседовании так и сказать что ты опыта работы с ними не имел, но очень хочешь и готов быстро во все вникнуть в боевых условиях.
452 1974553
>>1974498
Фронтенд на пых сменить ебать ты дурачина! А так шансов пройти у тебя собес мало, зубри вопросы для собеседований из гугла
453 1974562
>>1974408
Бери самый свежак стабильную версию.
Присесть на хуи легаси всегда успеешь
454 1974565
>>1974498

>Хочу устроиться на работу PHP джуном, но до этого я готовился на frontend (js). Можете подсказать короткий путь, как подготовиться к собесу за 18 дней?


Ждем через 18 дней пост у мобильщиков/датасаентистов с аналогичным содержанием
455 1974609
>>1974553
>>1974565
Господа, в моей мухосрани мало вакансий (на джуна только вот эта). Я согласен, очень глупо метаться с фронта в бэк, но там и зп белая, а горький опыт показывает, что зп в черную это не всегда хорошо. Короче компания вроде приличная, судя по отзывам знакомого знакомых. Плюс там знания js тоже желателен. Нуууу, не знаю короче, я так долго вкатывался, уже не знаю что делать
456 1974634
>>1974498
Ну ты охуевший это не плохая характеристика на самом деле, такие люди и добиваются успеха.
Я вот почти год как вкатываюсь, все задачки из ОП-поста сделал. Перед этим 4 года вышки писал на всем на чем только можно, помимо кодинга там хорошо выучил сети и базы данных, и всё равно не считаю что я уже готов к работе.
Я ж еще столько всего не пробовал: API, реактивные фреймворки, докер, тесты ( всегда впадлу было их делать ) и прочее. Да и вообще себе много чего не представляю о реальных веб-приложениях.
457 1974678
>>1974634

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



Чел...
Screenshot20210322210606.png43 Кб, 1027x315
458 1974702
Как перестать орать?
Вкратце о ситуации: в самом аналоговнетном фреймворке пхп-мира есть строка, обнуляющая дробную часть float при отправке запросов в БД.

Как же я охуел блять, это просто пиздец.
$eloquent->insert (3.14); // 3 is precise enough!

https://github.com/laravel/framework/issues/23850
459 1974718
>>1974634
Пока ты теряешь время, требования всё больше растут, и становиться всё сложнее вкатиться
460 1974746
>>1974718
Требования не менялись лет пять..
461 1974794
>>1974746
Пора высунуть голову из песка и сходить по собесам.
Сейчас даже на джунские ваки требуют знаний архитуктуры и хуйлоада, не говоря уже про всякие докеры
462 1974795
>>1974702
В ларе и не такой говнокод встретить можно
1616446038692.png1,1 Мб, 900x900
463 1974813
>>1974718
Все равно мои скиллы быстрее требований растут.
я обязательно вкачусь...
464 1974821
>>1974813
Если б так было - ты бы уже джуном пахал
465 1975112
Я сделал кнопку, которая уменьшает на 1 значение одной из переменных в массиве $_POST:
<input type="submit" name="warmday" value="<?= ($_POST['warmday'] - 1) ?>">
Проблема в том, что при нажатии этой кнопки все остальные значения удаляются и остаётся только эта изменённая переменная. Как сделать так, чтобы остальные значения сохранялись?
image.png281 Кб, 923x838
466 1975142
>>1958281 (OP)
ОП, два дня туплю в эту задачку, куда копать, подскажешь?
467 1975149
>>1975142
Нужно просто вывести значения массивов? Или тут какая-то более глубокая задача?
Ну вот тебе первая строка:
echo $word1[3]. ' ' .$word2[0]. ' ' .$word3[3];
Остальные строки по этому принципу
image.png294 Кб, 1017x941
468 1975159
>>1975149
Вот, я думаю так будет понятней, нужно, чтобы рандомно делался стишок из слов в массиве
469 1975194
>>1975159

Просто в массивах цифры меняешь рандомайзером., перед этим посчитав величину массива.
470 1975218
>>1975194
Есть же array_rand
471 1975254
>>1975194
дело в том, что в подсказках автор задачи предлагает делать это через цикл, я хуй его пойми как пустить это дело через цикл
472 1975258
>>1975112

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


Это происходит, т.к. ты при новом запросе посылаешь новый пост, в котором есть только твоя переменная.
Вообще $_POST - это те данные, которые пришли из текущего запроса. Она не хранит данные из прошлых запросов.
Хочешь хранить данные дольше одного запроса - используй другие хранилища, например куки, файл или бд
473 1975260
>>1975254
Делаешь табличку вида [1 => $words1]
И потом вторую с нужными цифрами.
474 1975272
>>1974795
Недавно, кстати, попробовал Lumen вместо лары. И чет не понял, а нахуя нужна лара?
По ощущениям, люмен - то, чем должна быть лара, просто без нескучных обоев.
475 1975280
>>1974702

>eloquent->insert (3.14); // 3 is precise enough!


Не понял. В ишью же вроде сказали что для децимала нужно передавать '3.14' и все будет ок.
476 1975283
>>1975272

>люмен - то, чем должна быть лара


Люмен - кастрированная версия лары, микрофреймворк. Норм, если нужна апишка или микросервис.

>нахуя нужна лара?


Лара - комбайн для быстрой разработки и прототипирования. Подходит для монолитов
477 1975462
>>1974062

В голову приходит 2 варианта:

1) сделать по принципу работы счетчика за электричество. Как он работает? Изначально все цифры на нем равны 0, например 0000. Затем увеличивается последняя цифра, когда она доходит до 9, она сбрасывается в 0 и увеличивается предыдущая (получается 0010). И так далее, до комбинации вроде 9999.

Ты можешь точно так же увеличивать число купюр.Сначала увеличивать самую младшую, потом сбросить ее в ноль и увеличить следующую, итд. Только разница в том, что максимальное число купюр будет не 9, а какое-то другое число, и для каждой купюры свое. То есть, начать с комбинации 0 0 0 0 и идти до максимально возможной.

Сначала можно сделать это по-простому, а потом ты можешь переделать это с использованием генераторов ( https://www.php.net/manual/ru/language.generators.php ). То есть, сделать функцию-генератор, которая будет через yield выдавать комбинации одна за другой.

2) с помощью рекурсии (это когда функция вызывает сама себя). Пишем функцию, которая принимает на вход массив "зафиксированных" количеств купюр. Например, это может быть "2x1000 3x500". Эти "зафиксированные" купюры она не трогает, а перебирает более младшие. То есть, она добавляет к зафиксированным сначала "0x200", потом "1x200", потом "2x200" и тд. И, получая таким образом новые комбинации, она снова вызывает сама себя, передавая себе эти комбинации.

Ну то есть, сначала мы вызываем функцию, передавая ей пустой список зафиксированных купюр. Она начинает генерировать комбинации из самой старшей купюры вроде 0x5000, 1x5000 итд. И каждый раз вызывает себя, передавая эту комбинацию. Вызванная функция генерирует комбинации из 2 купюр, например: 0x5000, 0x2000, затем 0x5000, 1x2000 итд. При этом на каждой комбинации она снова вызывает себя, передавая эти комбинации. Так постепенно будут перебраны все возможные комбинации.

Тут получится довольно простой код. Опять же, в случае успеха ты можешь переделать его на функцию-генератор. Но сначала попробуй по-простому решить.
478 1975473
>>1975254

Для начала, можно написать без цикла. Но ты заметишь, что получается много похожего однотипного кода. Что, если стишок станет длиннее, копипастить код?

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

$template = [
[слово, другое, третье], // варианты для первого слова
[слово, еще, слово], // варианты второго слова
...
];

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

>>1975112

Можно передавать их через скрытые поля.
479 1975485
>>1975272
Вообще наоборот, зачем нужен люмен когда есть лара? В этом люмене постоянно что-то работает не так как в ларе, пакеты часто несовместимы. То, что могло занять 5 минут, может затянуться на пару часов, вот и вопрос, в чем ты выигрываешь выбирая более легкий фреймворк? Я думаю точно не в производительности, шо то шо это ну такое, и явно не в dx. Тогда в чем?
480 1975634
Такой вопрос, почему data.message и data.statusreg undefined?
481 1975680
>>1975634
Пустое тело цикла foreach
482 1975689
>>1975680
так при чем тут этот цикл
483 1975703
>>1975689
Вардамп поставь на каждой строчке в пхп и консол лог на каждой строчке в жс - поймешь, где данные теряются.
Пора учиться самостоятельно дебажить
484 1975704
Посоветуйте пожалуйста, книги для backend разработчика. В частности интересуют сети, базы данных итд. В целом, фундаментальные основы. Без привязки к языку программирования.
485 1975709
>>1975704
Для каких целей? Новичек/работающий?
486 1975713
>>1975709
новичок, планирую в пых вкатываться
487 1975723
>>1975703
Ну я выяснил что в data не заносится responce
488 1975780
>>1975713
Тогда лучше для начала код пописать, книжки потом
489 1975786
>>1975723
Попробуй перед респонсом в пхп ебануть header('content-type: application/json')
490 1975790
>>1975704
Начнём с вопросов. Ты уже прошёл шапку ОПа?
491 1975799
>>1975790
да, в принципе всё понятно
492 1975846
А вы изучали php по гайду в самом начале?
493 1975847
И расскажите как начать писать на php
494 1975867
>>1975846
Не всё изучал, только начал. Почему книги спрашивал, потому-что. Возможно придётся свалить, в родную мухосрань, где нет интернета. И нужно учебный материал приготовить. Ну это, при худшем раскладе
495 1975916
Кто-нибудь пользуется Heroku для развёртки сайтов? Хочу туда закинуть своё тестовое на ларавеле, но столкнулся с проблемой конфигов.
У хероку, насколько я понял, два варианта: либо автодеплой с гитхаба, либо ручной коммит через хероку CLI (ещё есть докер, но я в нём ни ухом, ни рылом). Но конфиги-то коммитить нежелательно, .env у гита должен быть в игноре. Плюс, мне нужно И показать код на гитхабе, И развернуть готовое приложение на хероке, И иметь возможность работать с проектом локально.

Пока что придумал такой велосипед:
- Делаю коммит изменений, пушу на гитхаб.
- Меняю в .env параметры доступа к БД с локальных на хероковые, убираю из гитигнора этот конфиг.
- Коммичу, пушу на хероку.
- Откатываюсь на предыдущий коммит, грохаю из истории коммитов всё, что выше.

И так при каждом коммите. Это норм вообще? Или я делаю нечто странное?

И ещё проблема: нет картинок. Они у меня в /public/storage, который слинкован командой php artisan storage:link. Но, во-первых, линковка работает только пока я подключён (если перелогиниться и проверить - в /public каталога /storage не будет), а во-вторых, даже после линковки, все картинки 404. Я было на права подумал, но нет, у соседних css файлов права ровно такие же. Как починить?
496 1975953
Аноны, подскажите, приложение на slim4.
Возникла трабла с warning который бросается на то что файл который клиент заливает на сайт - слишком большой.
Проблема в том что этот варнинг:
Warning: POST Content-Length of 118009112 bytes exceeds the limit of 5242880 bytes in Unknown on line 0
выбрасываеется мне сразу на страницу, с какого то хера. А после него - мое приложение вызывается.
Функции
ini_set('display_errors', '1');
error_reporting(E_ALL);
я вообще не определял.
С помощью
set_error_handler('handlerErr', E_ALL);

тоже это варнинг отловить не могу. Откуда он сука лезет.
497 1975957
>>1975847
Скачиваешь OpenServer (он говно и с него придется слезать в будущем, но для начала более чем пойдет), любой текстовый редактор и вперед и с песней.
498 1975986
>>1975953
п.с.
чето не пойму а с какого хера этот вэрнинг вообще сыпется?
По идее если файл слишком большой - то ошибка эта будет в $_FILES, разве нет?
499 1976018
Аноны, какой сервер предпочтильнее apache, или nginx? Что в конторах ставят?
500 1976020
>>1975634

Проверь, что именно отдает сервер в ответ на запрос. Для этого ты можешь открыть средства разработчика в браузере (F12 или Ctrl + Shift + I) на вкладке Network перед отправкой запроса. И посмотреть, что приходит с сервера и с какими заголовками.

>>1975916

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

Гугление выдало мне такую статью: https://devcenter.heroku.com/articles/config-vars
501 1976029
>>1975953

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

Ты можешь сделать такие вещи:

- отключить display_errors, чтобы варнинг шел в логи, но не показывался на экране (почему он у тебя включен вообще?)
- повысить ограничение на размер POST. Там есть 2 отдельных лимита - на размер тела POST и на размер файла
502 1976123
>>1976029
Спасибо! Я уже разобрался.
Как ты описал так и было
503 1976133
>>1966918

$toAngle и $fromAngle по задумке должны задавать начальный и конечный угол фразы (угол первой и последней букв). Может, ты хочешь не полный круг сделать, а лишь дугу от 60 градусов до 270.

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

> На ideone нельзя кодировку менять? Пришлось английский алфавит выводить.


На ideone прекрасно работают русские буквы. Проблема в том, что ты используешь обращение к строке как к массиву: $phraseArray[$x], а надо mb_substr (урок: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md )

По коду: для преобразования из радиан в градусы и обратно есть готовые функции вроде rad2deg.

> round($ko)x2.7+$centerX


тут умножение надо было делать внутри round(), а то у тебя получается в итоге дробное число.

lk, ko - неудачные имена переменных.

> for($x = 1;$x<80;$x++){


> echo $screen[$y][$x];


Тут можно было использовать implode для преобразования массива в строку вместо цикла.
504 1976148
>>1975867
Без интернета с пхп каши не сваришь
505 1976151
>>1975847
Ставишь php, phpstorm и пишешь
506 1976154
>>1976018
nginx внутри докера
507 1976168
Из линукс, что нужно знать? bash? Навигация, редактирование файлов итд? Знания админа нужны?
508 1976176
>>1976168
Не повредят. Тебе нужно будет использовать различные консольные утилиты, а скорее всего и базовым администрированием серверов заниматься.
509 1976227
>>1976176
Как доказать, свой знания в линуксе? Если, с программированием понятно, можно ссылку на github предоставить. То с линуксом, приходит на ум, только принести ноут, с установленным, и настроенным линуксом... Я правильно, понимаю?
510 1976231
>>1976227

> Как доказать, свой знания в линуксе


А их будут проверять? Скорее всего зададут вопросы какие-нибудь. Или ты думаешь тебе скажут "ВОТ ТЕБЕ КОНСОЛЬ - УДИВИ НАС ЗА 5 МИНУТ"?
511 1976256
>>1975473
Вот я как раз о том же, на простом коде без цикла я задание выполнил, но вот с перебором массивов мозг вырубается, спасибо за подсказку большое, буду копать дальше, уже что-то получается)
512 1976271
>>1976231
Спасибо, учту это
513 1976306
>>1976227
Если сумеешь на vds задеплоить свой проект - этого достаточно
514 1976395
>>1966155

> https://github.com/deadj/testhub/blob/master/database/migrations/2020_11_12_161859_create_tests_table.php


> $table->json('tags');


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

Связи между таблицами (userId) надо делать не как колонку типа integer, а как внешние ключи: https://laravel.com/docs/8.x/migrations#foreign-key-constraints

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

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

Не хватает комментариев к полям БД. Например, непонятно, что значит поле done в тесте и в answers.

В questions поле type логично было бы сделать типом enum, а не string.

> https://github.com/deadj/testhub/blob/master/database/factories/QuestionFactory.php


Здесь странно, что ты задаешь id явно. Это не позволит создать более одного вопроса.

Что касается внешних связей (вроде поля testId), как я понял из документации, их обычно явно задают в коде теста. То есть ты в коде теста создаешь тест с вопросами с помощью has(): https://laravel.com/docs/8.x/database-testing#factory-relationships

> https://github.com/deadj/testhub/blob/master/routes/web.php


Здесь URL выглядят довольно хаотично. Обычно URL формируют по принципу "ресурс/идентификатор" или "ресурс/действие". Например, можно было бы сделать так:

/new -> /tests/new (или /admin/tests/new, если хочется выделить для админки отдельный URL)
/getTags -> /tags
/publish/{id} -> /tests/{id}/publish
/{id}/preface -> /tests/{id}/preface (хотя тут можно оставить /{id}/preface, если хочется более короткий URL для теста)
/addTest -> /tests/add
/addQuestion -> /tests/{id}/questions/add

То есть у нас /tests/ как бы представляет "все тесты", /tests/{id}/ - один конкретный тест.

> https://github.com/deadj/testhub/blob/master/app/Http/Controllers/TestsController.php


> private function getRealPage


Здесь можно сократить код за счет функции min().

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

$tests = Test::listPublished($search);

Вместо того, чтобы вручную каждый раз указывать условие WHERE done = 1 , ты мог бы создать скоуп "published", и писать Tests::published(), как описано тут: https://laravel.com/docs/8.x/eloquent#local-scopes

Скоуп также позволит упростить это условие:

> if (Test::where('id', $id)->doesntExist() || Test::find($id)->done == 0) {



Расчет пагинации можно было бы вынести в какую-нибудь утилиту (а может, уже есть что-то готовое). Чтобы можно было написать что-нибудь вроде

[$tests, $testsCount] = paginate($tests, $page, $perPage);

или:

$pager = new Pager($tests, $page, $perPage);
echo $pager->getTotalPages();

Наверняка что-то стандартное для пагинации есть.

Эту строчку тоже скорее всего стоило бы заменить на вызов метода Question::countMaxBalls(Test $t):

> $maxBalls = Question::where('testId', $id)->sum('balls');



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

> if (!$request->cookie('userId')) {


> $user = new User();


> $user->save();


>


> $this->addTestTime($user->id, $id);


Опять, этот код, отвечающий за старт теста, описан прямо в контроллере. Неправильно. Правильнее в модели или сервисе сделать метод startTest(). Куки из сервиса проставлять нельзя, но это не беда. Аналогично метод checkTestTime тоже стоило бы вынести из контроллера в сервис. Сохранение вопроса вынести в метод saveAnswer(), и так далее.

Также, ты очень странно работаешь с отношениями между сущностями:

> $answer->userId = $request->cookie('userId');



Это должно быть реализовано через отношения ( https://laravel.com/docs/8.x/eloquent-relationships#introduction ) и ты должен сохранять в answer не циферку, а объект User. В твоем коде вообще нет проверки, что такой юзер существует, а ведь в куке может прийти любое число.

> if (!$request->cookie('userId') ||


> Result::where([


> ['userId', $request->cookie('userId')],


> ['testId', $id]


> ])->count() == 0) {



Это скопипастено много раз, надо вынести в метод.

> public function setUserName(Request $request): void


>{


> User::find($request->cookie('userId'))->update(['name' => $request->userName]);


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

Для авторизации в Laravel, кстати, есть что-то готовое, стоило бы изучить и использовать.

> if ($type == "oneAnswer" || $type == "multipleAnswers" || $type == "textAnswer") {


Здесь надо использовать константы из класса Question.

> $minNum = $trueAnswer[0] - $trueAnswer[1];


Оказывается, trueAnswer может быть и строкой, и массивом. Неожиданно, такие вещи надо комментировать в коде. А метод checkAnswer логичнее бы разместить в модели Question.

Сейчас код, который разбирает или формирует поле trueAnswer, размазан по контроллерам. Завтра добавится новый тип ответа, и ты будешь бегать по всему коду и искать нужные места? Правильнее поместить его в модели, сделав в ней методы checkAnswer(), setSingleAnswer (для единого ответа), setAnswerRange (для числа с погрешностью) итд.

Ты вручную декодируешь/кодируешь JSON при добавлении или извлечении из модели. Это как-то неправильно. Надо либо сделать геттеры/сеттеры, которые будут это делать, либо посмотреть в сторону https://laravel.com/docs/8.x/eloquent-mutators#introduction

> https://github.com/deadj/testhub/blob/f5683a8ef37b446f136870cf5cefa1af49bb28cb/app/Http/Controllers/NewTestController.php#L104


> $balls = Question::where('testId', 15)->get()->sum('balls')


Что здесь за магическое число 15?

> public function changeOrderOfQuestionNumbers(Request $request)


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

> https://github.com/deadj/testhub/blob/master/tests/Feature/NewTestControllerTest.php


> public function testGetTags()


> ->assertJson(['this', 'is', 'tag']);


Здесь ты полагаешься на определенный порядок тегов в ответе, а они не обязаны вернуться в таком порядке. Лучше использовать сравнение массивов, игнорируя порядок: https://stackoverflow.com/questions/3838288/phpunit-assert-two-arrays-are-equal-but-order-of-elements-not-important

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

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

В общем, что надо доработать:

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

> https://github.com/deadj/testhub/blob/master/database/migrations/2020_11_12_161859_create_tests_table.php


> $table->json('tags');


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

Связи между таблицами (userId) надо делать не как колонку типа integer, а как внешние ключи: https://laravel.com/docs/8.x/migrations#foreign-key-constraints

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

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

Не хватает комментариев к полям БД. Например, непонятно, что значит поле done в тесте и в answers.

В questions поле type логично было бы сделать типом enum, а не string.

> https://github.com/deadj/testhub/blob/master/database/factories/QuestionFactory.php


Здесь странно, что ты задаешь id явно. Это не позволит создать более одного вопроса.

Что касается внешних связей (вроде поля testId), как я понял из документации, их обычно явно задают в коде теста. То есть ты в коде теста создаешь тест с вопросами с помощью has(): https://laravel.com/docs/8.x/database-testing#factory-relationships

> https://github.com/deadj/testhub/blob/master/routes/web.php


Здесь URL выглядят довольно хаотично. Обычно URL формируют по принципу "ресурс/идентификатор" или "ресурс/действие". Например, можно было бы сделать так:

/new -> /tests/new (или /admin/tests/new, если хочется выделить для админки отдельный URL)
/getTags -> /tags
/publish/{id} -> /tests/{id}/publish
/{id}/preface -> /tests/{id}/preface (хотя тут можно оставить /{id}/preface, если хочется более короткий URL для теста)
/addTest -> /tests/add
/addQuestion -> /tests/{id}/questions/add

То есть у нас /tests/ как бы представляет "все тесты", /tests/{id}/ - один конкретный тест.

> https://github.com/deadj/testhub/blob/master/app/Http/Controllers/TestsController.php


> private function getRealPage


Здесь можно сократить код за счет функции min().

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

$tests = Test::listPublished($search);

Вместо того, чтобы вручную каждый раз указывать условие WHERE done = 1 , ты мог бы создать скоуп "published", и писать Tests::published(), как описано тут: https://laravel.com/docs/8.x/eloquent#local-scopes

Скоуп также позволит упростить это условие:

> if (Test::where('id', $id)->doesntExist() || Test::find($id)->done == 0) {



Расчет пагинации можно было бы вынести в какую-нибудь утилиту (а может, уже есть что-то готовое). Чтобы можно было написать что-нибудь вроде

[$tests, $testsCount] = paginate($tests, $page, $perPage);

или:

$pager = new Pager($tests, $page, $perPage);
echo $pager->getTotalPages();

Наверняка что-то стандартное для пагинации есть.

Эту строчку тоже скорее всего стоило бы заменить на вызов метода Question::countMaxBalls(Test $t):

> $maxBalls = Question::where('testId', $id)->sum('balls');



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

> if (!$request->cookie('userId')) {


> $user = new User();


> $user->save();


>


> $this->addTestTime($user->id, $id);


Опять, этот код, отвечающий за старт теста, описан прямо в контроллере. Неправильно. Правильнее в модели или сервисе сделать метод startTest(). Куки из сервиса проставлять нельзя, но это не беда. Аналогично метод checkTestTime тоже стоило бы вынести из контроллера в сервис. Сохранение вопроса вынести в метод saveAnswer(), и так далее.

Также, ты очень странно работаешь с отношениями между сущностями:

> $answer->userId = $request->cookie('userId');



Это должно быть реализовано через отношения ( https://laravel.com/docs/8.x/eloquent-relationships#introduction ) и ты должен сохранять в answer не циферку, а объект User. В твоем коде вообще нет проверки, что такой юзер существует, а ведь в куке может прийти любое число.

> if (!$request->cookie('userId') ||


> Result::where([


> ['userId', $request->cookie('userId')],


> ['testId', $id]


> ])->count() == 0) {



Это скопипастено много раз, надо вынести в метод.

> public function setUserName(Request $request): void


>{


> User::find($request->cookie('userId'))->update(['name' => $request->userName]);


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

Для авторизации в Laravel, кстати, есть что-то готовое, стоило бы изучить и использовать.

> if ($type == "oneAnswer" || $type == "multipleAnswers" || $type == "textAnswer") {


Здесь надо использовать константы из класса Question.

> $minNum = $trueAnswer[0] - $trueAnswer[1];


Оказывается, trueAnswer может быть и строкой, и массивом. Неожиданно, такие вещи надо комментировать в коде. А метод checkAnswer логичнее бы разместить в модели Question.

Сейчас код, который разбирает или формирует поле trueAnswer, размазан по контроллерам. Завтра добавится новый тип ответа, и ты будешь бегать по всему коду и искать нужные места? Правильнее поместить его в модели, сделав в ней методы checkAnswer(), setSingleAnswer (для единого ответа), setAnswerRange (для числа с погрешностью) итд.

Ты вручную декодируешь/кодируешь JSON при добавлении или извлечении из модели. Это как-то неправильно. Надо либо сделать геттеры/сеттеры, которые будут это делать, либо посмотреть в сторону https://laravel.com/docs/8.x/eloquent-mutators#introduction

> https://github.com/deadj/testhub/blob/f5683a8ef37b446f136870cf5cefa1af49bb28cb/app/Http/Controllers/NewTestController.php#L104


> $balls = Question::where('testId', 15)->get()->sum('balls')


Что здесь за магическое число 15?

> public function changeOrderOfQuestionNumbers(Request $request)


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

> https://github.com/deadj/testhub/blob/master/tests/Feature/NewTestControllerTest.php


> public function testGetTags()


> ->assertJson(['this', 'is', 'tag']);


Здесь ты полагаешься на определенный порядок тегов в ответе, а они не обязаны вернуться в таком порядке. Лучше использовать сравнение массивов, игнорируя порядок: https://stackoverflow.com/questions/3838288/phpunit-assert-two-arrays-are-equal-but-order-of-elements-not-important

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

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

В общем, что надо доработать:

- сделать везде безопасную и надежную авторизацию
- получше изучить предоставляемые Laravel возможности и использовать их
- научиться не писать бизнес-логику стеной в контроллере, а писать его в моделях и сервисах. Это не значит, что контроллеры должны быть пустыми, просто надо научиться понимать, что куда относится.
- более тщательно покрыть тестами
515 1976543
>>1975462
Спасибо, буду пробовать.
Что можно написать новичку? 516 1976884
Изучаю пхп не так давно, но не знаю что написать можно, для тренировки. Можно идеи и проекты из вашего опыта?
517 1976989
>>1976884
напиши борду простенькую. чтоб можно было треды создавать и отвечать в них.
518 1977032
Аноны, как называется шаблон/паттерн когда ты в допустим модель , которая уже с БД работает передаешь данные из $post не как массив, а данные из массива в специальный объект засовываешь, и этот объект уже в модель отправляешь.
На меня снизошло откровение, и я до этого сом дошел.
519 1977034
>>1977032
Entity используется в симфони
520 1977038
>>1977032
Ты говоришь про DTO (data transfer object). Вообще эта история довольно широкая и неоднозначная. Все зависит от используемого стека, иногда DTO - это зло.
521 1977511
>>1976884

В первом посте есть задача про список студентов. Она хороша тем, что к ней идет большое пояснение, что и как лучше делать, чтобы не наступить на грабли.
522 1977561
>>1977038
Это когда, например?
523 1977613
>>1977038

С чего сразу DTO ? Если мы туда пихаем данные из формы, то это сразу DTO что ли? Может у чела обычный VO (Value Object) и модель просто агрегирует этой структурой
524 1977617
>>1977561
Ну примерный случай - это очень маленькие приложения, либо приложения с большим количеством маленьких сабмодулей, в таких случаях прибегают к использованию доменных объектов в обход посредников, если архитектура вцелом такое позволяет конечно, например не используется active record.

>>1977613

>сразу DTO


>обычный VO (Value Object)


Тебе нужно внимательнее почитать про эти паттерны, няш.
525 1977809
>>1977617
Любой DTO == data class, но не любой data class == DTO, няш.
$data = new PostData($_POST);
$post = new Post($data)

Что скажешь, это тоже DTO?
526 1977901
>>1974498
во-первых прокачивай общую адекватность и бизнес-этику
на собеседовании постарайся быть (а не казаться) адекватным воспитанным челом

из фреймворков -- успеешь попробовать лёгкий Laravel или Yii, от сложной Симфони можно сразу ёбнуться
527 1977962
>>1977901
Чего сложного в Симфони относительно Ларавеля? В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.
528 1977963
>>1977962

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



А о какой собсна магии речь идет? Я постоянно слышу про магию в ларавеле, я знаю что там есть свои приколы с Eloquent и магическими геттерами и сетерами, всё настолько тут запущено что даже плагина нормального нет который бы парсил это говно в автодополнение. А кроме ормки что еще то?
529 1978028
>>1977962

>Чего сложного в Симфони относительно Ларавеля?


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

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


Это чтобы нормально написать. Вот только нормально на ларавеле никто не пишет, не для этого он создан.
>>1977963

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


Есть платный плагин от Аделя Файзрахманова
530 1978030
>>1978028
Хотя, может этот плагин такого и не умеет. Адель же вроде писал в своей книжке, что он докблоки для каждого свойства расставляет.
531 1978080
>>1978028

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



На Симфони тоже можно говнякать как хочется, ну лазай в контроллере сырыми запросами с инъекциями, кто тебе помешает. И данные принимай как json_decode() от raw body.
Что можно написать новичку на PHP? 532 1978201
Я вообще из полезного и легкого ничего не писал. Хочу попробовать написать что-то классное. В интернете не нашел идей
533 1978218
>>1978201
Чтобы написать что-то классное нужен опыт, погружение в предметную область и знание хотелок юзеров. Всего этого нет у новичка, поэтому бери и пиши что-то простое и известное борду/галерею/файлопомойку
534 1978222
>>1978218

Что такое борда? И под файлопомойкой ты файлообменник подразумеваешь?
535 1978233
>>1978222

>Что такое борда?


Мы с тобой щас на ней сидим

>И под файлопомойкой ты файлообменник подразумеваешь?


Да, типа меги или ргоста
537 1979585
Где именно в энтерпрайзе используется пхп? Используется ли?
Я слышал, что симфони - это примерно то же самое, что джавовский спринг. Составляет ли симфони в таком случае реальную конкуренцию джаве?
И еще, пхп ругают за всё, за что только можно, порой пхпшников за программистов не считают, но почему в таком случае есть банки, чьи сайты написаны на битриксе?! И это не единичные случаи. Уж битрикс-то ругают вообще просто 99 человек из 100. Но ведь банки - это как раз и есть самый что ни на есть энтерпрайз! Выходит, битрикс не так плох, как все говорят? Или плох? Банки ведь не дураки, и не стали бы использовать что-то плохое и дырявое для своих сайтов.
538 1979626
>>1979585

> пхп ругают за всё, за что только можно


Любой популярный ЯП ругают

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


Если это по сути сайт-визитка, его можно и на вордпрессе сделать. Весь финансовый функционал в банках уж точно не на ПХП крутится.
539 1979691
Возникнут ли у ларавелиста средней руки затруднения при пересаживании на симфони?
540 1979699
>>1979626
Ругают любой, но одно дело, ругать популярную джаву или сишарп, которые являются столпами рпомышленной разработки, другое дело - выслушивать такие же упреки в адрес пхп. Отсуда у меня и возникает вопрос, есть ли место в промышленной разработке для пхп.
541 1979701
>>1979699
Отсюда*
542 1979764

>Я слышал, что симфони - это примерно то же самое, что джавовский спринг.


Я такое тоже слышал. Может кто-то расскажет, зачем тогда нужна симфони? Просто чтобы в два раза меньше разработчикам платить, чем на спринге?
543 1979883
>>1958281 (OP)
Аноны, какой сложности алгоритмы вам приходилось использовать?
Как хорошо нужно знать алгоритмы? Я просто помню когда решал задачу про банкомат в ОП мануале чуть не офигел (не помню сколько недель я потратил на ее решение). А это задачи для новичков, что дальше будет я боюсь представить.
Ну и с матаном аналогично?
544 1979953
Сап двач!
Планирую вкатываться в бэк на пыхе. Но для начала, хочу освойть фронт стек. Какому фреймворку уделить внимание? Vuejs? Или также нужен react?
545 1979955
>>1979764
имхо, думаю это решающий фактор...
546 1979997
>>1979955
Блять, ну почему пыха как Таджикистан в мире программирования?
547 1980159
>>1979997
бизнес, ничего личного...
548 1980210
>>1980159
Нужно основать профсоюз пыхарей и бороться с этой хуйней.
Если взлетит, то язык наконец-то умрет, так как пропадет его последнее преимущество
549 1980252
>>1980210
Последнее преимущество это низкий порог вхождения, но разработчики пыха решили пофиксить это досадное недоразумение
550 1980264
Вопрос к опытным разработчикам, которые пишут тесты на Laravel.
Какую БД используете для тестов?
MySQLi и гоняете тесты в памяти?
Или же создаете отдельную тестовую БД и там тестируете?
551 1980265
>>1980264
Мне интересно узнать предпочтения. Если ещё поясните свой выбор, то было бы вообще замечательно.
552 1980314
>>1980252
И в каком месте он сложнее стал по сравнению с каким-то 5.6? По моему всё легче и легче: тайпхинты, всяческий синтаксический сахар и прочие вкусности.
553 1980376
Если контора, публикует вакансии вот уже который месяц. Это говно-вакансия (позиция джуна, трейни)?
554 1980388
>>1980376
Может у них автопубликация стоит, и они уже и забыли про нее
555 1980391
>>1980388
они постоянно публикуют вакансию
https://hh.ru/vacancy/42520361
556 1980401
>>1979691
Если сможет скинуть с себя оковы фасадов и актив рекорда, то нет
557 1980402
https://www.bleepingcomputer.com/news/security/phps-git-server-hacked-to-add-backdoors-to-php-source-code/?utm_source=telegram.me&utm_medium=social&utm_campaign=ataka-na-git-server-php-zloumyshlenniki

Лол, мейнтейнеры PHP обосрались со своим репозиторием, поэтому переезжают на житхаб как на основную площадку.
558 1980405
>>1980391
Возможно они таким образом держат у себя стек недорогих стажеров-разнорабочих, которых выпиннывают через месяц и нанимают новых. 15к в ДС это пиздец вообще, наверное на проезд только хватит.
559 1980410
>>1979699

>ругать популярную джаву или сишарп


А пхп непопулярный?

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


Открой вакансии, да посмотри, где пхп используют
инб4: там, где не захотели переплачивать сишарп/джава-пидорам
560 1980419
>>1980405
Тоже так думаю, бизнес по-русски...
И какой вариант тогда, как вкатиться в пых? Может напрямую компаниям писать? Сорян, за глупый вопрос. В отчаянии немного...
561 1980420
>>1979953
Зачем тебе и фронт и бек? Выбери что-то одно, доработай до мидла и тогда уже думай о фулстеке
562 1980423
>>1980419

>как вкатиться в пых?


Как и в любой другой макако-стек: выучить платину вопросов на собесы, сделать спиздить пет, нарисовать опыта в резюме, апплаиться на удаленку на вакансии мидла
563 1980442
>>1980423
сложна блядь... надо быть мастером пиздобольства видимо, как пыня
564 1980445
>>1980420
фронт бэку тоже требуют ведь
565 1980452
>>1980442
А хуле ты хотел? В айти без софт скиллов путь заказан
566 1980453
>>1980445
Ищи нефулстек ваки
567 1980456
>>1980452
наёб называется софт-скиллами?
568 1980458
>>1980453
спс, учту
569 1980469
>>1980456
В том числе
570 1980494
>>1980469
буду работать над этим...
571 1980601
>>1978222

>что такое борда


Охуенно!
572 1980994
>>1980376
>>1980391

>Опыт работы с 1С-Битрикс / Wordpress / Laravel / Symfony.


>Это говно-вакансия?


Хмм, ну даже не знаю....
>>1980405

>15к в ДС это пиздец вообще, наверное на проезд только хватит.


Неделю назад на dou висела эта же вакансия на удаленку, описание один в один. Для интереса только что нашел в архиве - пишет 350-600$. Джуны из украинских деревень стоят дороже, лол?
573 1981069
Сап двач. Уже полтора года работаю на дно работе, стек жиквери вордпресс. Пошел туда по финансовым причинам, но у меня сильная тревога от этой работы.
После работы прихожу, и с настроеним "Фух, ну можно и отдохнуть" начинаю пилить что-то на ларавеле и вью.
Может прозвучит самоуверенно, но я знаю кодить, и знаю как вникнуть во что-то относительно непростое за пару дней(наверное у меня такое ощущение просто на фоне тех, кто со мной работает, и ничего не понимает в принципе), и начать что-то делать.
Проблема в том, что у меня 0 релевантного опыта. Полтора года назад я себе накинул год опыта ларавела в выдуманной студии, но на собесах сразу понял что это всё хуйня, все понимают кто я есть на самом деле буквально за пару минут. И дело даже не в этом, я сам понял что в случае с опытом никакие углы не срезать, это реально просто нужно иметь, и это мне нужно.
Я даже свой текущий опыт не могу назвать коммерческим, потому что мой код никто никогда не проверял, никто не говорил как можно сделать по-другому.
У меня уже просто была мысль никому не врать, сказать как есть и надеяться что кто-то в меня поверит. Я даже не знаю как себя охарактеризовать, наверное я джун, с потенциалом в мидла спустя месяца 3-4 в нормальной фирме. Ну и проблема еще в технологиях, вроде имею опыт со многим, но на каких-то вообще минимальных уровнях. Редис? ну как kv хранилище использовал, всё, больше юзкейсов не было. Эластиксерч? Ну как-то настраивал индексацию с заумными фильтрами по доке, ну и всё на этом, больше не трогал никогда. В последнее время вообще очень много фронтом занимался, хоть там меня не ограничивают в стеке особо, понял как относительно правильно писать на вью, попробовал даже новые хуки, очень понравилось. Короче вроде уже и проработал, и денег заработал, и даже апнул софтскиллы некоторые, но сейчас как будто снова вкат как в первый раз будет. Еще постоянная тревога, что я не стою тех денег, которые мне платят. Мне даже как-то неловко штуку просить, хотя понимаю что это обычная зарплата и всем ок.
573 1981069
Сап двач. Уже полтора года работаю на дно работе, стек жиквери вордпресс. Пошел туда по финансовым причинам, но у меня сильная тревога от этой работы.
После работы прихожу, и с настроеним "Фух, ну можно и отдохнуть" начинаю пилить что-то на ларавеле и вью.
Может прозвучит самоуверенно, но я знаю кодить, и знаю как вникнуть во что-то относительно непростое за пару дней(наверное у меня такое ощущение просто на фоне тех, кто со мной работает, и ничего не понимает в принципе), и начать что-то делать.
Проблема в том, что у меня 0 релевантного опыта. Полтора года назад я себе накинул год опыта ларавела в выдуманной студии, но на собесах сразу понял что это всё хуйня, все понимают кто я есть на самом деле буквально за пару минут. И дело даже не в этом, я сам понял что в случае с опытом никакие углы не срезать, это реально просто нужно иметь, и это мне нужно.
Я даже свой текущий опыт не могу назвать коммерческим, потому что мой код никто никогда не проверял, никто не говорил как можно сделать по-другому.
У меня уже просто была мысль никому не врать, сказать как есть и надеяться что кто-то в меня поверит. Я даже не знаю как себя охарактеризовать, наверное я джун, с потенциалом в мидла спустя месяца 3-4 в нормальной фирме. Ну и проблема еще в технологиях, вроде имею опыт со многим, но на каких-то вообще минимальных уровнях. Редис? ну как kv хранилище использовал, всё, больше юзкейсов не было. Эластиксерч? Ну как-то настраивал индексацию с заумными фильтрами по доке, ну и всё на этом, больше не трогал никогда. В последнее время вообще очень много фронтом занимался, хоть там меня не ограничивают в стеке особо, понял как относительно правильно писать на вью, попробовал даже новые хуки, очень понравилось. Короче вроде уже и проработал, и денег заработал, и даже апнул софтскиллы некоторые, но сейчас как будто снова вкат как в первый раз будет. Еще постоянная тревога, что я не стою тех денег, которые мне платят. Мне даже как-то неловко штуку просить, хотя понимаю что это обычная зарплата и всем ок.
574 1981188
>>1981069

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


Ну так нужен хоть какой-то опыт работы с ларой. Молодец, что пет на ней пишешь.

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


Коммерческий код - который крутится на продакшене и приносит прибыль. Это может быть и вылизанный на код ревью и залитый по фтп код.

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


С текущими реалиями рынка маловероятно. Вкатунов толпы.
Апай скилы, пили пет на ларе, штурмуй собесы
575 1981190
>>1981069

>Еще постоянная тревога, что я не стою тех денег, которые мне платят


Тебе наверняка еще и недоплачивают.

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


Это зп джуна
8wAPE0N8HlI.jpg62 Кб, 550x531
576 1981226
Аноны, кто как вкатился? Прокомментируйте мой роадмап.
1. Дрочу по верстку по хтмлакадемии - интерактивный курс за 600р на месяц + пиздженные курсы (м.б. барбик сверстаю).
2. Пижжу курсы Кудлая по пхп, смотрю их, дрочу книгу Скляра по пхп.
3. Наворчиваю Кантора по жсу.
4. Решаю задачки ОПа вплоть до списка студентов.
5. Пижжу курсы Кудлая по ларе и MySql, ларакасты, пишу борду/магазин/блог/рсс-читалку
6. Хожу по собесам, принимаю струи мочи на лицо
7. Вкатываюсь
8. Работаю год, дописываю пет из пункта 5, монетизирую, вывожу на IPO, становлюсь миллиардером
Думаю все займет месяцев 8-9 фултайм учебы. Что скажете, что язабыл? Надо ли вью.жс задрачивать для первой работы? На чем чаще джуны срезаются? Что по советуете?
577 1981245
>>1981226
ну проблема в том, тчо ты задаешь эти вопросы аа не делаешь, я сам вот вкатываюсь, но блять тебе отвечаю, чем трачу свое время, так что пищи код молча и работай
578 1981247
>>1981226
План говно.
В первую очередь нужен кодинг пета с подсматриванием в гугл и доку.
579 1981416
>>1979883

> Я просто помню когда решал задачу про банкомат в ОП мануале чуть не офигел


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

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

почему так? и если ли варианты как это переделать?

сама страница корзини не обрабатывает заказ, это делает другой файл на бекенде, но корзина обрабатывает товар, чтобы правильно показать конфигурацию, допустим когда собираешь себе комп
581 1981424
>>1981247
Двачую этого. Курсы по айти - клеймо дэбила. Неважно, оплаченные или пизженные.
582 1981475
>>1981422

> зачем нужна перезагрузка страниц


Сейчас есть возможность вообще сделать весь твой сервис без единой перезагрузки (SPA), например, посмотри как работает ВК.

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

> если ли варианты как это переделать?


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

Если кратко, ты вместо дефолтного экшена формы делаешь этот экшен аяксом. Через JS сериализуется форма, отправляется запрос и принимается ответ. Потом уже исходя из ответа ты совершаешь какие-то действия, показываешь уведомление что все ок, либо ошибку. На бэкенде соответственно должен быть обработчик, который будет возвращать респонс, например в JSON формате.
583 1981483
>>1981247
А разве комааниям, не позуй на пет проекты?
584 1981487
>>1981416
Не опускай руки, отдохни, и вернись к задаче. Можешь на мелкие куски разбить задачу, как вариант.
585 1981493
>>1981069
У тебя хоть какой-то опыт есть. Попробуй по собесам походить. Не зацикливайся на себе, от этого хуже только. И удачи тебе анон.
586 1981494
>>1981245
двачую анона
587 1981502
>>1981475
привет, спасибо

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

дальше стандартная форма пхп на "куда доставить и что написать".

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

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

ну вот и вроде сама корзина ничего не делает, а перезагрузка страницы очень напрягает. а как сделать я хз. опыта не хватает чтобы понять в чем суть.
588 1981514
>>1981502

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


Чего? Т.е. ты выборку не по ID делаешь, а по названию товара?

> при этом отнят товар можна без перезагрузки


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

Короче, смотри куда ведет форма добавления товара и по аналогии с удалением сделай добавления. Т.к. у тебя там вью, я хз как правильно это сделать, к сожалению с вью не работал почти.
589 1981523
>>1981483
Похуй-не похуй.
Разрабу нужна практика, чтобы на собесе было о чем поговорить.
Спросят так: Сыч, а как бы ты сделал хуйню_нейм? А ты её уже делал и рассказываешь.
590 1981525
>>1981523

> Сыч, а как бы ты сделал хуйню_нейм? А ты её уже делал и рассказываешь.


В идеале ты должен рассказать несколько способов как можно сделать хуйню_нейм и пояснить достоинства и недостатки каждого способа. Тогда к тебе точно вопросов не будет.
591 1981551
>>1981525
Альтернативные способы так же придут по мере работы с петом
Screenshot3.png23 Кб, 882x633
592 1981570
>>1975462

>1) сделать по принципу работы счетчика за электричество. Как он работает? Изначально все цифры на нем равны 0, например 0000. Затем увеличивается последняя цифра, когда она доходит до 9, она сбрасывается в 0 и увеличивается предыдущая (получается 0010). И так далее, до комбинации вроде 9999.


Ты можешь точно так же увеличивать число купюр.Сначала увеличивать самую младшую, потом сбросить ее в ноль и увеличить следующую, итд. Только разница в том, что максимальное число купюр будет не 9, а какое-то другое число, и для каждой купюры свое. То есть, начать с комбинации 0 0 0 0 и идти до максимально возможной.

Вот кто-нибудь вообще внятно может объяснить как это сделать и в чем тут прикол?
Увеличил последнюю, занулил, дальше следующую, также зануляется, в итоге приходим к числу 1 0 0 0, и что дальше с этим делать? Как-то не доходит до меня уже который день, вот в моем случае решением является комбинация 0 3 0 3, как мне ее получить если решать "счетчиком"?

Ну да я тупой и что...
593 1982002
>>1981188
Спасибо за поддержку, для меня это важно
594 1982245
>>1981514
да, по названию, как-то так работает вся система, но там специфика такая.

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

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

только льзя ли так? вроде все просто? но каженться, что это очень дырявая система получаеться, или нет?
595 1982325
Немножко оффтоп, но спрошу тут. Появилась задача написать ТЗ для некоего сервиса, где будут регаться пользователи с разными ролями и совершать различные действия. Я пока пишу все текстом, но возможно есть какой-то инструментарий для визуального проектирования? Типа тут у нас вот такие сущности, тут другие, это все вот так то связано. Как вообще принято проектировать и описывать сложные системы? Я сам ни разу не занимался таким, что-то даже непонятно с какого бока подойти. Текстом то вроде получается описать все, но целостной картины как все должно работать из текста не возникает. Либо, может я тупой такой.
596 1982385
Аноны, начал для себя путь изучения этого вашего пхп, прошел книгу опа до регулярок и решил установить себе на комп апачи и пхп, смотрю сейчас мануалы и как начал понимать как эти ваши серверы работают, такого свинячего удовольствия не испытывал уже с детства, дай бог здоровья каждому анону в этом треде за подсказки и поддержку, всех обнял
597 1982390
>>1981570

Допустим, у нас такой набор купюр:

5x500
2x200
13x100

Мы начинаем с комбинации 0 0 0. Проверяем, подходит ли она нам. Затем увеличиваем кол-во последней купюры, получается 0 0 1 (0x500 + 0x200 + 1x100). Проверяем ее, затем переходим к 0 0 2. Затем 0 0 3 и так до 0 0 13.

Так как купюр по 100 у нас всего 13 штук, то комбинации 0 0 14 быть не может. Поэтому мы сбрасываем последнюю цифру в 0 и увеличиваем предпоследнюю. Получается 0 1 0. Затем берем 0 1 1, 0 1 2, 0 1 3 и так до 0 1 13. Затем снова сбрасываем последнюю цифру и берем 0 2 0. Затем 0 2 1, 0 2 2 ... и до 0 2 13. Здесь мы достигли предела по последней и предпоследней купюре. Увеличивать их дальше некуда. Потому мы сбрасываем их и переходим к комбинации 1 0 0. После этого мы перебираем такие комбинации:

1 0 1
1 0 2
...
1 0 13
1 1 0
1 1 1
1 1 2
...
1 1 13
1 2 0
1 2 1
...
1 2 13

Тут мы переходим к комбинации 2 0 0 и по такому же принципу проверяем все остальные комбинации (2 0 1, 2 0 2 ... 2 2 13, 3 0 0...)

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

Твоя ошибка в том, что ты пропустил часть комбинаций. Когда ты увеличиваешь вторую с конца цифру, ты снова должен перебрать все значения последней цифры.
597 1982390
>>1981570

Допустим, у нас такой набор купюр:

5x500
2x200
13x100

Мы начинаем с комбинации 0 0 0. Проверяем, подходит ли она нам. Затем увеличиваем кол-во последней купюры, получается 0 0 1 (0x500 + 0x200 + 1x100). Проверяем ее, затем переходим к 0 0 2. Затем 0 0 3 и так до 0 0 13.

Так как купюр по 100 у нас всего 13 штук, то комбинации 0 0 14 быть не может. Поэтому мы сбрасываем последнюю цифру в 0 и увеличиваем предпоследнюю. Получается 0 1 0. Затем берем 0 1 1, 0 1 2, 0 1 3 и так до 0 1 13. Затем снова сбрасываем последнюю цифру и берем 0 2 0. Затем 0 2 1, 0 2 2 ... и до 0 2 13. Здесь мы достигли предела по последней и предпоследней купюре. Увеличивать их дальше некуда. Потому мы сбрасываем их и переходим к комбинации 1 0 0. После этого мы перебираем такие комбинации:

1 0 1
1 0 2
...
1 0 13
1 1 0
1 1 1
1 1 2
...
1 1 13
1 2 0
1 2 1
...
1 2 13

Тут мы переходим к комбинации 2 0 0 и по такому же принципу проверяем все остальные комбинации (2 0 1, 2 0 2 ... 2 2 13, 3 0 0...)

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

Твоя ошибка в том, что ты пропустил часть комбинаций. Когда ты увеличиваешь вторую с конца цифру, ты снова должен перебрать все значения последней цифры.
598 1982392
>>1980264

Не знаю, можно ли это сделать в Laravel, но один из вариантов такой:

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

Вообще, по моим ощущениям, все нужные записи в БД лучше всего создавать в самом тесте. Есть вариант, когда перед тестами БД заполянется (например, с помощью seeders), но это плохо тем, что ты не можешь определить, для чего добавлена та или иная запись в БД, каким тестам она нужна. То есть получается свалка из непонятно к какому тесту относящихся данных. А когда ты нужные записи создаешь в тесте, такой проблемы нету.
599 1982404
>>1979764

В яве не все идеально. Вот простые примеры:

- в PHP можно сравнить строки как $a == $b, в яве нельзя
- в PHP легко вернуть из функции 4 значения разных типов через массив: [$a, $b, $c, $d]= some_func(), а как это сделать в яве? Почему туда до сих пор не завезли возврат нескольких значений?

Ява более многословная и код, решающий одну задачу, в ней может получиться больше по объему, чем в PHP. Хотя у нее и немало плюсов, например, богаче синтаксис, быстрее скорость работы. Недаром в Андроиде много кода написано на яве.
600 1982406
>>1982404

>в PHP легко вернуть из функции 4 значения разных типов через массив: [$a, $b, $c, $d]= some_func()


Часто такое на проде видел?
Выглядит как попытка заменить объект массивом
К слову в го возврат нескольких значений - та еще залупа
image.png47 Кб, 501x290
601 1982418
Подскажите в чем именно я не прав, по ситаксису все нормально, нигде не обосрался, а при запуске мне дает вот такую ошибку
602 1982421
>>1982418
Лол, ну ты бы хоть ошибку показал, а не эту хуйню. Ты нахуй апач как службу то поставил? Не еби мозг поставь openserver, laragon или denwer какой-нибудь. А в идеале вообще лучше в виртуалке это все делать, чтобы свою систему не засирать.
603 1982423
>>1982406

В Го как раз сделано удобно, на уровне языка. А число 4 я указал, чтобы умники не лезли с готовыми классами Pair и Triple.

>>1982418

Можно попробовать поискать подробности в журнале (он находится где-то в настройки ->администрирование -> журнал событий).

Скорее всего, не хватает какой-то библиотеки, которая нужна Апачу для работы. Например, Microsoft VC Runtime. Там, откуда ты скачал Апач, может быть точное название библиотеки.

Проверить, что какой-то DLL не хватает можно с помощью программы вроде Dependency Walker, загрузив в нее exe-файл Апача и посмотрев, что она покажет.
604 1982427
>>1982418

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

httpd.exe -t

(если Апач не прописан в PATH, тебе может понадобиться указать полный путь к httpd)
605 1982446
>>1982423

>В Го как раз сделано удобно, на уровне языка


Это неудобно, когда тебе нужен 1 из этих параметров, а другие нужно куда-то деть. Получается простыня кода, либо куча _, что снижает читабельность
606 1982450
>>1982418

>ставить апач на винду


Ты не туда воюешь.
Большинство серверов - линух. Соотв либо бери линь, либо линь в виртуалке, либо как посоветовали xamp/openserver
607 1982503
>>1982450
Удвою этого господина, добавлю что есть еще вариант с Docker. По ценности навыка - будет наверное лучшим вариантом. Почти любой относительно серьезный бэкендер сегодня должен уметь в докер.
608 1982504
>>1982421
>>1982423
понимаю, но журнал пустой, туда я заходил, буду использовать тогда openserver и не буду ебать мозг
609 1982523
А какие сейчас шаблонизаторы для верстки в 2к21 году популярны в РНР фреймворках? Blade и Twig?
610 1982559
>>1982523
В 2к21 по сути стандарт - отдельный фронт-фрэймворк. Шаблонизаторы в более менее серьезных проектах используют обычно максимум для почтовых рассылок и всякой админской мелочевки. А вцелом, есди надо быстро и на коленке - тот что во фрэймворке есть и используют, разница не существенная.
611 1982567
>>1982392
В Laravel можно заполнять нужными данными во время теста и тестировать. Можно сделать также, чтобы после каждого тестирования база очищалась.
Тестирование в памяти кажется как будто бы удобнее, но наверно лучше и правда на нормальной БД проводить тесты, так как это ближе к реальным процессам.
612 1982568
>>1982559

>В 2к21 по сути стандарт - отдельный фронт-фрэймворк.


Я читал, что 95% сайтов - это шаблоны на пиэйчпи CMS-ках или на крайний случай на пиэйчпи фреймворках. А весьма маленький процент - это веб-приложения с отдельным фронт-фреймворком.

Я не прав?
613 1982570
>>1982559

> разница не существенная.


Ни понил. Между чем? Между шаблонизаторами разница не существенная? Они работают очень похожим образом?
614 1982621
>>1982568
Абсолютно прав. 95% либо сделано на коленке, либо легаси. Поэтому я и написал:

>в более менее серьезных проектах


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

>>1982570
Они оба решают одинаковые задачи, для которых нужны, не более. Это больше вопрос привычки и привязки к фрэймворку, а не популярности.
615 1982640
>>1982504

Что ж ты так быстро сдаешься. Мог бы проверить версию с ошибкой в конфиге и с отсутствием нужной Dll.
616 1982647
>>1982559

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

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

Потому, если у тебя типичный сайт фирмы по продаже гвоздей оптом, лучше использовать традиционный подход и формировать страницы на сервере. Не думаю, что SPA сегодня это "стандарт". Разве что там, где разработчики плохо разбираются в разработке и не думают своей головой.
617 1982660
>>1982647
Непонимаю к чему ты эту простыню написал. Просто открываешь браузер и любой портал, более-меннее крупной компании, там js-фрэймворк. Про гвозди оптом я писал. Если потолок писать такое - ну ок наверное, выбор каждого. Стандартом, как мне кажется все же лучше считать best-practices, а не сайты для ашота за 5к.
И с чего бы вдруг js-фрэймворк == спа я вообще не понял, у тебя траблы с матчастью.
618 1982661
>>1982660

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


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

А если им нужен личный кабинет для большого количества пользователей с кучей всякого разного функционала. То тогда, да, там будет фреймворк.
619 1982689
>>1982661
Зависит от статуса я бы сказал. А статус почти всегда имеет прямую финансовую зависимость. Бизнес уже давно прекрасно ориентируется в интеренете и хочет как минимум не хуже, чем у конкурентов. И если бизнес устраивает вордпресс - либо это вышеупомянутые ромашки, которые платят копейки и работают с васян-студиями, либо конторе повезло наткнутся на лоха. Но я за 4 года лохов не встречал чот.
620 1982700
>>1982689
За 4 года всегда приходилось на vue, react, angular фронт пилить?
621 1982725
>>1982700
Не приходилось ни разу пилить ничего, сложнее верстки шаблонов документов для печати или формочки письма. Для фронта есть фронтендеры, если контора не веники вяжет.
622 1982769
>>1982660

> И с чего бы вдруг js-фрэймворк == спа я вообще не понял, у тебя траблы с матчастью.



Это что-то новое.

Если это не SPA, тогда зачем вообще нужен рендеринг на клиенте? Это никому не нужное усложнение на ровном месте. Какая выгода при загрузке страницы грузить тяжелый многомегабайтный JS-код (спасибо вебпаку) и ждать, пока он будет делать какие-то аякс-запросы? Если можно просто отдать HTML со всеми данными, который рендерится с помощью Twig? Это и грузится быстрее, и поисковым машинам больше нравится.

Зачем ориентироваться на то, кто как делает и какие-то мифические best-practices, неизвестно кем написанные? Среди разработчиков, особенно фронтендщиков, куча неучей, вкатышей, просто глупцов. Даже именитые разработчики могут защищать глупую идею просто потому, что они ее сами придумали. Давай объективно искать плюсы и минусы, а не ссылаться на то, что кто-то где-то так делает.
623 1982820
>>1982769
Ну если банальный реакт с сервер-рендерингом для тебя что то новое, я вообще хз в какой дыре ты инфу черпаешь.
Про многомегабайтный код - вообще пушка, чекай свой storage, там и реакт и все его друзья давно загружены.

Ориентироваться я буду на то, за что платят хорошо. А хорошо платить люди готовы за чистый бэкенд и нормально распределенный код, а не за фуллстак макакенов, которые всех, не согласных со старперскими фантазиями считают неучами и советуют клепать бложики из 2000х.
624 1982832
>>1982647

> SPA тормозные и глючные, долго грузятся


Вот пример новостного сайта на реакте https://meduza.io/ он летает и грузиться первый раз моментально.
А теперь открой свое говно на каком-нибудь битриксе или жумле
625 1982834
Вечер в хату, арестанты.

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

https://docs.google.com/document/d/1fELTk3jdpieIDKlTe-xQF8wd62MwaGffjMDf0rNOcYk/edit?usp=sharing

Я бы хотел, чтобы это было в виде каких-то модулей на веб-сайте. Ну типа загружаешь туда файлик еxcel или csv, нажимаешь кнопку, и комплект документов генерируется, либо отправляется рассылка по номерам из примера 2.
626 1982839
>>1982832

>он летает и грузиться первый раз моментально


Просто там бэк не на пыхе написан)))
627 1982843
>>1982832

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

Это же просто новостной сайт, который отдает почти статические странички (изредка обновляющиеся). Зачем тут вообще фронтенд-фреймворки? Просто с сервера отдай список статей, либо страницу статьи и все. А они зачем-то наворотили там навороченный фронтенд. Я не вижу, какие плюсы дает тут сложный фронтенд и считаю, что сайт переусложнен на ровном месте.

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

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

Ну и SPA, по моему опыту, долго грузятся. Сбербанк - там есть заставка и надо ждать. Киви - тоже торможение заметно.

Не надо ссылаться, что кто-то где-то использует реакт. Это ничего не значит. Давай объективно рассуждать, какие есть плюсы и минусы от такого решения.
628 1982847
>>1982834

Твой документ не открывается анонимно. Сделай его доступным.
629 1982850
>>1982820

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

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

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

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



Вообще, localstorage презназначен для хранения данных, а не использования как кеш. Это уже само по себе неправильно и негативно говорит о том, кто так делает. Далее, кеш этот принесет мало пользы, так как код постоянно релизится, а значит, его надо загружать с сервера заново.
630 1982853
>>1982850

>которые верстать сайт для IE не способны


Я другой анон. А реакт библиотека - это типа новый жиквери? Такая библиотека для кроссбраузерности и библиотека чтобы она сама под капотом считала виртуальный ДОМ - как оптимальное отрендерить настоящий ДОМ.
631 1982859
>>1982832
Я тут вмешаюсь в ваш диалог. Значится это мой звездный час. Потому что вы же все богатые 300к наносеки. И у вас компы ахуенные с интернетом быстрым.

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

Далее я нашел топ 50 сайтов на вордпрессе, на первый сайт перешел. Тоже примерно столько же грузится, пару секунд. Тоже не сразу все отобразилось.
632 1982861
>>1982847
пофиксил, спасибо
633 1982862
>>1982850

> верстать сайт для IE


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

> тащить эту технологию на каждый сайт просто потому что на Хабре много статей про реакт - глупо


Согласен, шутка про домашнюю страничку с миллиардом файлов зависимостей уже давно перестала быть шуткой.
634 1982869
>>1982853

Реакт это не jQuery. Это библиотека для рендеринга шаблонов на клиенте с поддержкой data binding ("реактивность").

То есть, у тебя в JS коде будет шаблон, ты его рендеришь, передавая в него данные. Если данные изменились, то ты снова вызываешь рендеринг и данные на странице обновляются.
635 1982870
>>1982843
А если нужно дополнительно пилить апишку для агрегатора, мобильного приложения и прочей хуеты, тогда как? На мой взгляд все просто и лаконично этот бек можно использовать и в других местах, а фронт что в шаблонах верстай, что компоненты для реакта разницы особой нет, остаётся только роутинг прикрутить и ещё пару мелочей. Плюс на бек можно взять более легковесный фреймворк и не париться о роутах и вьюхах, тут больше не усложнение, а перенос части кода и логики на клиентскую часть.
А Сбербанк и прочие банки это совершенно другая история, там есть помимо рюшек-менюшек много логики и всякой специфичной хуйни для безопасности, можно даже понаблюдать как оно работает в консоли и на вкладке network.
636 1982872
>>1982839
На руби если мне память не изменяет
637 1982874
>>1982862

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

А современные фронтендщики умудряются верстать так, что во встроенных браузерах несколько летней давности сайт не работает. Так-то.

Это надо постараться, чтобы сломать сайт в Хроме нескольколетней давности. Я когда-то в IE6 скругленные инпуты делал, вот там пришлось заморачиваться. А эти неучи под хром сверстать не способны.
638 1982879
>>1982874
Это надо быть совсем уже долбоебами чтобы при наличии полифилов и бабелей что-то не работало в старом хроме. Что-то из CSS криво, вполне возможно, но вот все остальное должно прекрасно работать даже на ие 11
639 1982883
>>1958281 (OP)
MVC использую в фреймворках по типу Laravel или там своя система?
640 1982887
>>1982874

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


Не думаю, что это то, чем стоит гордиться.
641 1982892
>>1982870

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

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

Это только для сайтов уровня туду-листа можно обойтись одним общим API.

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



В классической схеме тебе нужно вывести на странице данные A, B, C . В SPA тебе нужно отдать через API эти же A, B и C. и хорошо еще, если одним запросом, а не несколькими (это будет медленней). По моему, затраты тут примерно одинаковые.

Конечно, если у тебя какой-то тормозной шаблонизатор, может быть разница, но тот же Twig компилирует шаблоны в PHP код и работает быстро. И мощному серверному процессору наверно проще отрендерить страницу, чем дохлому сяомишному ARM (если конечно заказчик не сэкономил на хостинге).

По моему, скорость отдачи ответа будет примерно одинаковая. Только в одном случае ты отдаешь готовую страницу, а в другом - всего лишь ответ на аякс запрос, к которому надо прибавить время загрузки JS бандла, и может быть время отправки других запросов. Есть конечно варианты встраивать JSON прямо в страницу, но тут возникает вопрос, почему бы не встраивать сразу HTML-код.

> остаётся только роутинг прикрутить и ещё пару мелочей



Да нифига не пару мелочей. Надо сделать, чтобы кнопка назад работала как хочет заказчик, надо разбивать JS на бандлы, надо заморачиваться с SSR, подставлять ранее введенный емейл в формы, обрабатывать авторизацию и так далее. Тут именно что гора работы возникает на ровном месте.

Кстати, по поводу производительности. Я как-то букинг открывал со смартфона, он чуть ли не минуту грузился и все тормозило. Может, конечно тут еще виновато медленное соединение, но мне кажется, сайт на HTML и с минимумом JS работал бы куда быстрее на дохлом телефонном процессоре.
641 1982892
>>1982870

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

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

Это только для сайтов уровня туду-листа можно обойтись одним общим API.

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



В классической схеме тебе нужно вывести на странице данные A, B, C . В SPA тебе нужно отдать через API эти же A, B и C. и хорошо еще, если одним запросом, а не несколькими (это будет медленней). По моему, затраты тут примерно одинаковые.

Конечно, если у тебя какой-то тормозной шаблонизатор, может быть разница, но тот же Twig компилирует шаблоны в PHP код и работает быстро. И мощному серверному процессору наверно проще отрендерить страницу, чем дохлому сяомишному ARM (если конечно заказчик не сэкономил на хостинге).

По моему, скорость отдачи ответа будет примерно одинаковая. Только в одном случае ты отдаешь готовую страницу, а в другом - всего лишь ответ на аякс запрос, к которому надо прибавить время загрузки JS бандла, и может быть время отправки других запросов. Есть конечно варианты встраивать JSON прямо в страницу, но тут возникает вопрос, почему бы не встраивать сразу HTML-код.

> остаётся только роутинг прикрутить и ещё пару мелочей



Да нифига не пару мелочей. Надо сделать, чтобы кнопка назад работала как хочет заказчик, надо разбивать JS на бандлы, надо заморачиваться с SSR, подставлять ранее введенный емейл в формы, обрабатывать авторизацию и так далее. Тут именно что гора работы возникает на ровном месте.

Кстати, по поводу производительности. Я как-то букинг открывал со смартфона, он чуть ли не минуту грузился и все тормозило. Может, конечно тут еще виновато медленное соединение, но мне кажется, сайт на HTML и с минимумом JS работал бы куда быстрее на дохлом телефонном процессоре.
642 1982899
>>1982874

> Я когда-то в IE6 скругленные инпуты делал, вот там пришлось заморачиваться


Без border-radius заморачиваться приходилось во всех браузерах. Инпуты еще ничего, а вот попапы это да.

А для телефонов один хуй показывается адаптивный вариант верстки, более упрощенный. Те же флексы работают даже в бородатых андроидах.
643 1982901
>>1982887
Ну как: раньше еблись с кроссбраузерностью, теперь ебутся с адаптивом. С одной стороны стало легче (то что делается за три секунды при помощи флексов и гридов раньше приходилось городить костылями и кучей оберток, иногда даже при помощи js), с другой стороны появились новые проблемы в виде мобил и экранов с высоким ppi.
644 1982904
Сап. Как фиксить это: Failed to connect MySQL: Access denied for user 'root'@'localhost' (using password: YES) ?
645 1982907
>>1982904
Прописать корректный пассворд в конфиге с настройками коннекта к БД.
Платиновый вопрос: а какой у меня пароль для root@localhost?
646 1982952
>>1982892

>Есть конечно варианты встраивать JSON прямо в страницу, но тут возникает вопрос, почему бы не встраивать сразу HTML-код.



Вставлю свои пять копеек, в последнее время так сложилось что 90% времени пилил на вью а не на пхп. Реакт или вью(чуть в меньшей степени) это прежде всего тулинг. Разбиение на микрокомпоненты(даже на кнопки и инпуты) дает чувство как бы так сказать cohesion(?). Те же CSS-in-js пакеты(не фанат), или цсс модули. Каждая магическая строка превращается в определенную сущность, без которой твоя сборка не соберется. Это добавляет строгости не на уровне согласованности, а на уровне конфигурации. Если ты делаешь проект один, то ты можешь вспомнить при рефакторинге удалить из фронта какой-то класс и т.д. Но на потоке это 100% не выйдет. Со временем всё начнет разбухать. Не зря говорят что тот же CSS unmaintainable в обычном виде. В том же вью, обычно принято писать цсс под шаблоном и логикой компонента. Если ты не используешь компонент в проекте, то ты одновременно не используешь и его логику, и его стили. А потом у тебя получается ситуация, что часть написана на пхп, а часть на вью. Ты начинаешь задумываться, копировать весь компонент на пхп, или просто вставить жсон и использовать уже готовое. Тебе начинает нравится вся эта строгость, ты можешь крутить свой проект как хочешь, и тебе ничего не сделают, ведь ты в другом городе. Абсолютно согласен, что клиент на жсе добавляет хороший такой оверхед при разработке.

По поводу медузы, у них вообще своя история и свой путь. Всё сделано на реакте, потому что так тупо удобнее. Не знаю что у них там за редактор статей, свой какой-то написали, но как я понял там можно буквально для каждого параграфа задавать разные стили и отступы, это всё передается в виде жсона, который потом хавает реакт или флаттер и превращает в компоненты, для мобильного приложения такая же история. Основной аргумент главного по ит из медузы был в том что они так сделали, чтобы в случае чего не обновлять каждый раз приложение, это ведь не веб всё таки. Я с этим согласен, когда у тебя есть какой-то блочный редактор, в котором есть различные компоненты так сказать кастомные, то это всё дело банально удобнее делать на каком-то клиентском фреймворке, потому что часто компонент это не только разметка, а еще и стили и поведение. Как я уже писал выше, отсутствие вот этой связности(? русский язык сложно) приводит к беспорядку спустя время
646 1982952
>>1982892

>Есть конечно варианты встраивать JSON прямо в страницу, но тут возникает вопрос, почему бы не встраивать сразу HTML-код.



Вставлю свои пять копеек, в последнее время так сложилось что 90% времени пилил на вью а не на пхп. Реакт или вью(чуть в меньшей степени) это прежде всего тулинг. Разбиение на микрокомпоненты(даже на кнопки и инпуты) дает чувство как бы так сказать cohesion(?). Те же CSS-in-js пакеты(не фанат), или цсс модули. Каждая магическая строка превращается в определенную сущность, без которой твоя сборка не соберется. Это добавляет строгости не на уровне согласованности, а на уровне конфигурации. Если ты делаешь проект один, то ты можешь вспомнить при рефакторинге удалить из фронта какой-то класс и т.д. Но на потоке это 100% не выйдет. Со временем всё начнет разбухать. Не зря говорят что тот же CSS unmaintainable в обычном виде. В том же вью, обычно принято писать цсс под шаблоном и логикой компонента. Если ты не используешь компонент в проекте, то ты одновременно не используешь и его логику, и его стили. А потом у тебя получается ситуация, что часть написана на пхп, а часть на вью. Ты начинаешь задумываться, копировать весь компонент на пхп, или просто вставить жсон и использовать уже готовое. Тебе начинает нравится вся эта строгость, ты можешь крутить свой проект как хочешь, и тебе ничего не сделают, ведь ты в другом городе. Абсолютно согласен, что клиент на жсе добавляет хороший такой оверхед при разработке.

По поводу медузы, у них вообще своя история и свой путь. Всё сделано на реакте, потому что так тупо удобнее. Не знаю что у них там за редактор статей, свой какой-то написали, но как я понял там можно буквально для каждого параграфа задавать разные стили и отступы, это всё передается в виде жсона, который потом хавает реакт или флаттер и превращает в компоненты, для мобильного приложения такая же история. Основной аргумент главного по ит из медузы был в том что они так сделали, чтобы в случае чего не обновлять каждый раз приложение, это ведь не веб всё таки. Я с этим согласен, когда у тебя есть какой-то блочный редактор, в котором есть различные компоненты так сказать кастомные, то это всё дело банально удобнее делать на каком-то клиентском фреймворке, потому что часто компонент это не только разметка, а еще и стили и поведение. Как я уже писал выше, отсутствие вот этой связности(? русский язык сложно) приводит к беспорядку спустя время
647 1983033
>>1982952

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


Я другой анон. И мне кажется, что реакт может быть удобен тем, что если писателей у медузы много, то можно каждому из них на комп загрузить SPA-редактор на реакте. Они там напишут статью, красиво все отступы и прочую красоту расставят. И отправят все на публикацию.
648 1983038
>>1982640
проверил DLL все в здании, все ровно, да и в целом не хочу тратить время на копание, если это все решается гораздо проще, но спасибо за поодержку)
649 1983062
Объясните, пожалуйста, что мне делать? Я изучаю вордпресс. И решил углубиться в РНР. И я читал в шапке РНР-треда, что надо уметь работать с сервером Apache и с операционной системой GNU/linux.

Далее я натянул верстку на вордпресс. И пришло время закинуть мою тренировочное говно на сервер. Я завел на таймвеб новый акк. Там дают 10 бесплатных дней поиграться с хостингом.

И короче, я нихуя не понял, а где там Apache и GNU/linux? Там в таймвеб просто интерфейс предоставлен, что вот сюда файлы загружай.

Я нихуя не понял, а че куда там и где требуется применять познания в Apache и GNU/linux?
650 1983088
>>1983062
З.Ы. Извините, пожалуйста, я погорячился. Вопрос снят. Не надо отвечать на него.
651 1983098
>>1983062
В общем случае подключиться по ssh к консоли сервера и делать там свои дела.
Можно через sftp менеджер файлы закинуть по старинке, либо через гит (хаб/лаб/си/хуяй)
652 1983107
>>1983098
Ок. Понял, принял, спасибо большое
653 1983110
>>1982869
Ну, я читал про все эти стэйты и просы, что данные изменились, реакт считает виртуальный ДОМ, а потом оптимальным образом рендерит настоящий ДОМ.

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

> реакт - это новый жиквери


Мне кажется это вообще про разное.

> это модная библиотека которую теперь будут везде пихать


Ровно до появления новой модной технологии
655 1983209
>>1958281 (OP)
Статьи ОПа про MVC, шаблоны и автозагрузку еще актуальны?
656 1984059
Аноны, привет всем. Годные учебники по PHP 8 появились уже? Неважно какой язык, русский или английский.
657 1984146
Начал пилить приложение на симфони, офк нужен был вебпак. Установил Symfony Encore, сразу вопрос: что за stimulus и нахуй он мне нужен вообще? Какие-то контроллеры, они издеваются? Это кто-то юзает вообще?
658 1984532
>>1982834
поднятие
659 1984625
Сап, анон.
Делал тестовое задание для одной конторы, отправил вовремя, по итогу просто молча отказали, позже аргументировав тем, что все сделано через жопу.
Если есть свободное время и желание - можешь посмотреть и дать совет, что не так?
git: https://tinyurl _ com/2y7xnv3t
test: https://tinyurl _ com/axw27xpa
660 1984721
>>1984625
Я бы тоже тебя нахуй за такие ссылки послал
661 1984735
>>1984721
Ты совсем еблан?
662 1984748
>>1984625
Бамп вопросу
663 1984883
Вопрос по Ларавелу 8.
Я пытаюсь словить ModelNotFoundException, который выдаёт Model::findOrFail. Исключение выдаётся, но игнорируется обработчиком и потом превращается в другое исключение. Почему?
664 1984925
>>1984883
Всё, догадался заглянуть в родителя хандлера, вопрос снят
665 1985125
>>1984735
Сам ты еблан. Эти ссылки могут содержать что угодно, они не просто так в спам-листе, блять. Конечно нормальным людям на линуксе похуй на всякие вирусы, но тем не менее.
Еще и заставляешь уважаемых господ копировать мышкой это дерьмо, вставлять в строку и заменять символы.
Нахуя тебе это вообще? Боишься что твой никнейм будет в поисковиках индексироваться? Да на здоровье.

https://github.com/rscugh/ - Неуравновешенный человек, сидит на сайтах для анонимных анимешников-педофилов, называет незнакомых людей ебланами. Да и код такой себе пишет.
666 1985134
Товарищи помогите, на пашет авторизация у веб проекта, выводит ошибки.
667 1985151
>>1985125
Вопрос снят, все всё поняли.
668 1985533
Есть вопрос с возвратом html вместо json, error пишет Ошибка AJAX: parsererror | SyntaxError: Unexpected end of JSON input. Если изменить dataType на html то в консоль выводит дату как пустой объект. Собственно что я делаю не так?
669 1985824
Аноны, вчера почитал про работу с файлами и загорелся сделать себе для своего сайта костыль в 1 файл скрипта, который просто будет встроен в страницу например с товаром и будет записывать в текстовый файл с новой строки какие товары пользователи сегодня смотрели, а затем на специальной странице выводить эти товары типа как "сегодня смотрели", и у меня встал вопрос, сильно ли это плохо использовать для этого текстовый файл? Подключать майскьэль не хочется, но есть уже встроенный лайтскьэль, я немного встрял с логикой скрипта, подскажите правильное движение

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

Смущает что если страницу откроют одновременно 2 пользователя или больше, то актуальная версия файлика будет только та которая после прокрутки скрипта будет записана последней, то есть просмотренный товар 1 пользователем будет просто затёрт, ведь они были загружены одновременно, я же правильно понимаю логику? И насколько вообще быстро исполняется такой скрипт с чтением файла, парсингом в массив, поиск наличия текущего товара, добавление его в массив, запись обратно в файл построчно, например в 100 строк, или для этих целей лучше ебаться с лайтскьэль?

Или вообще записывать всё это не в текстовый файл, а в json файл где каждый товар будет в виде ассоциативного массива и просто парсить этот json файл, искать в нём текущий посещённый товар, если найден удалять, если нету до добавлять и обратно всё это сохранять в json файл? А на странице вывода просмотренных сегодня товаров просто парсить этот файл и выводить через цикл на странице, я в правильнмо направлении?
669 1985824
Аноны, вчера почитал про работу с файлами и загорелся сделать себе для своего сайта костыль в 1 файл скрипта, который просто будет встроен в страницу например с товаром и будет записывать в текстовый файл с новой строки какие товары пользователи сегодня смотрели, а затем на специальной странице выводить эти товары типа как "сегодня смотрели", и у меня встал вопрос, сильно ли это плохо использовать для этого текстовый файл? Подключать майскьэль не хочется, но есть уже встроенный лайтскьэль, я немного встрял с логикой скрипта, подскажите правильное движение

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

Смущает что если страницу откроют одновременно 2 пользователя или больше, то актуальная версия файлика будет только та которая после прокрутки скрипта будет записана последней, то есть просмотренный товар 1 пользователем будет просто затёрт, ведь они были загружены одновременно, я же правильно понимаю логику? И насколько вообще быстро исполняется такой скрипт с чтением файла, парсингом в массив, поиск наличия текущего товара, добавление его в массив, запись обратно в файл построчно, например в 100 строк, или для этих целей лучше ебаться с лайтскьэль?

Или вообще записывать всё это не в текстовый файл, а в json файл где каждый товар будет в виде ассоциативного массива и просто парсить этот json файл, искать в нём текущий посещённый товар, если найден удалять, если нету до добавлять и обратно всё это сохранять в json файл? А на странице вывода просмотренных сегодня товаров просто парсить этот файл и выводить через цикл на странице, я в правильнмо направлении?
670 1985910
>>1985134

Скорее всего у тебя в начале файла невидимый символ BOM (что такое BOM: https://ru.wikipedia.org/wiki/Маркер_последовательности_байтов ). То есть, твой файл выглядит так:

BOM <?php ....

Соответственно, PHP выводит этот BOM, а после вывода чего-либо нельзя отправлять заголовки, о чем тебе и написано в ошибке.

Проверить, есть ли BOM в начале, можно, открыв PHP-файл с помощью hex-редактора вроде HxD или с помощью онлайн-hex-редактора (работает в браузере, до чего дошел прогресс): https://hexed.it/

Советую проверить, заодно узнаешь, как твой файл устроен и из каких байтов состоит.

Чтобы убрать BOM, пересохрани файл в кодировке utf-8 без BOM.

---

По коду:

- вместо ручного экранирования используй плейсхолдеры и подготовленные запросы: https://www.php.net/manual/ru/mysqli.quickstart.prepared-statements.php
- вместо хранения простого хеша пароля храни соленый хеш: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md
- $home_url явно формируется некорректно
- при работе с БД надо либо 1) включить в mysqli режим выброса исключений при ошибках (как тут: https://www.php.net/manual/en/mysqli.quickstart.statements.php) либо 2) проверять наличие ошибок с помощью if после вызова каждой функции, как тут: https://www.php.net/manual/ru/mysqli.quickstart.statements.php
671 1985918
>>1985533

Ты в функции $.ajax указал dataType = json. Если с сервера приходит не JSON, а HTML, то естественно, функция ajax() выдает ошибку.

По моему, все работает корректно.

Что ты хочешь получить?
672 1985925
>>1985824

Что касается вопроса "какой вариант быстрее": надо тестировать. Сделай несколько функций (для каждого способа сохранения) и замерь, за сколько времени в них обработается, допустим 100 000 товаров.

Я могу предложить еще один вариант для сравнения: использовать redis. Redis хранит данные в памяти, не сохраняя их на диск, и поддерживает работу со списками (добавление, обрезание). За счет того, что все происходит в памяти, производительность должна быть очень хорошей.

Также, если тебе не хочется использовать redis, есть еще один вариант: shared memory. Это кусок памяти, который выделяется и не очищается между запусками скрипта. Можно в нем хранить список товаров. Это тоже должно быть быстро. Работать с shared memory можно как напрямую, так и через расширение вроде apcu.

Надо понимать, что БД вроде sqlite - это по сути и есть работа с файлами, только они имеют более сложную структуру (отдельно лежат строки таблицы, отдельно индексы). Иногда это дает плюсы, иногда минусы.

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

> Смущает что если страницу откроют одновременно 2 пользователя или больше, то актуальная версия файлика будет только та которая после прокрутки скрипта будет записана последней, то есть просмотренный товар 1 пользователем будет просто затёрт, ведь они были загружены одновременно, я же правильно понимаю логику?



Да. Ты можешь решить эту проблему, используя обязательные блокировки, но тогда все станет работать медленнее (второму скрипту придется ждать, пока первый завершит работу с файлом. То есть работа с файлом будет последовательной, а не параллельной). БД, кстати, тоже используют блокировки, но более эффективно.
673 1985937
>>1985925
Получается анон концепцию я правильную придумал? Доступа к Redis и shared memory у меня нет, хостинг очень кастрированный в этом плане, по этому хочу просто костыль в 1 файл, про ботов не подумал кстати, но пока просто потестировать хочу посмотреть как будет работать, но раз ты советуешь на 100к тестировать, то думаю с 100 записями php справится как нехуй делать, в мгновение, тогда затестирую и файловый метод, и джсон, я так кстати понимаю они будут одинаково работать по скорости, ну и дальше затестирую с скьэльлайт

Тогда пишу такую логику, смотрю есть файл json, если нет - создаю и записываю в него массив с айди товара, названием и ссылкой, если есть, то паршу json в масссив, проверяю есть ли в нём материал с таким айди, если есть - то удаляю его и записываю заново в начало массива, потом обрезаю массив до 100 переменных, паршу обратно в json и записываю всё это дело в файл, на странице со списком промотренных сегодня товаров просто паршу этот json с помощью js и рисую его на странице, надеюсь я правильно нафантазировал
674 1985946
>>1985918
что бы с сервера приходил json
675 1985947
>>1985937

Я имел в виду, не заполнять файл 100 000 товаров, а, например, 100 000 раз сымитировать "заход на страницу товара". И померять, сколько это займет для каждого способа.
676 1986077
Посоны, открываю json с помощью fopen(), декодирую его с помощью json_decode() в массив, работаю с массивом, кодирую его с помощью json_encode() в строку, записываю в файл json с помощью fwrite() и закрываю файл с помощью fclose(), всё правильно?
677 1986089
А или можно даже использовать file_get_contents() для открытия json и file_put_contents() для его записи в обновлённом виде?
678 1986614
Сап овощянский. А есть ещё подобные планы, как у ОПа? С таким же подробным роадмэпом.
679 1986692
Где новичку можно начать изучать php 8? Ну, кроме того что в шапке.
680 1986695
>>1986692

> Где новичку можно начать изучать php 8?


Зачем именно 8? Там что-то революционно новое ввели?
Заходишь на официальный сайт и изучаешь.
681 1986732
>>1986695

>Зачем именно 8? Там что-то революционно новое ввели?


Ну лучше сразу последнюю версию начинать изучать, в идеале же.

>Заходишь на официальный сайт и изучаешь.


Я сейчас это делаю, тамошний мануал это нихуя не учебник для новичка. Это вообще не учебник, а справочник какой-то. У меня небольшой опыт в джаваскрипте есть, есть у PHP что-нибудь подобное вот этому https://learn.javascript.ru/ учебнику?? Я по нему жс учил, после него оффициальный мануал пхп это херня от которой голова болит.
682 1986749
>>1986732
Погляди phptherightway

мимоНачинающий
683 1986759
>>1986692
Не учи подумой. Меня тоже здесь предупреждали, я не послушал, теперь жалею. Пыха болото ебаное. Потом времени, потраченного на нее, слишком жалко чтобы учить что-то другое.
684 1986785
>>1986749
Спасибо. Оглядел быстренько, че-то как-то это тоже не для вкатуна материал. Похоже на полировку для того, кто уже выучил синтаксис.

>>1986759
Я не для вката в IT (на галеру) учу. У меня планы замутить свои проекты, и самому их полностью поддерживать. Большинство самых популярных CMS на пхп (WordPress итд), плюс даже если сам с нуля пишешь бэк для небольшого проекта, то пхп как понял наилучший выбор. Так что буду учить по-любому.
685 1986790
>>1986785
Тогда laracast посмотри.
686 1986791
>>1986759
Что тогда посоветуешь?
687 1986819
>>1986785
А, ну тогда пых самый лучший вариант
>>1986791
Если в нормальном городе живешь или рассматриваешь переезд в ближайшее время то что угодно, к чему душа лежать будет. В обратном случае вакансии нужно смотреть, чтобы борщи не хлебать в будущем.
Что бы ты не выбрал, если это тебе нравится и это не пыха, то выбор правильный.
688 1986825
>>1986819
Например. Мне питон нравится. Но по-нему, нет вакух для вкатунов.
689 1986833
>>1986819
>>1986825
Еще не стоит пытаться вкатиться во фронтенд и серьезно изучать жс с фреймворками, там вкатунов как грязи и на собесе требования очень серьезные.
690 1986840
>>1986833
Фронт не рассматриваю, ибо то ещё болото. С жесточайшей конкуренцией.
691 1986850
https://hh.ru/vacancy/42520361?query=php

Контора постоянно вакансии публикует. Это наёб? Подскажите пожалуйста.
692 1986880
>>1986833
Да эти вкатуны и сами по качеству как грязь. Уважающий себя человек во фронт-энд не пойдет.
>>1986825
Где как. В крупных городах бывают, но как я понимаю, долго не задерживаются. Это топ 1 язык для вката всё же, все инфоцыгане в первую очередь его рекламируют.
Алсо, довольно часто такие вакансии никуда не выкладывают, охуеешь в говне копаться. Меньшие компании по знакомым ищут, большие выращивают с курсов.
А так, основные языки бэкэнда: нода, питон, джава, сишарп, голанг ( для джуна сомнительно ), ну и php конечно.
Если ты еще студент или просто РННщик, то большие компании проводят бесплатные курсы по всем языкам из списка кроме пыхи. Конечно нужно знать основы.
Просят уделять обучению по 8 часов в день. Если ты в итоге выжил, через несколько месяцев после курсов часто зовут трудоустраиваться. Да даже если не позовут, опыт бесценный.
>>1986850
Ты бот чишо? Тебе уже пояснили всё сверху.
693 1986971
Нубский вопрос - почему вместо последовательных id в бд не используют uuid?
694 1987024
>>1986971
Очень даже используют, если это вписывается в архитектуру. Иногда комбинируют даже оба типа. Но чаще это оверкилл, особенно при наличии больших данных.
695 1987034
>>1986880

>Уважающий себя человек во фронт-энд не пойдет.


Ты просто кукаректнуть или есть манядоводы?

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


Ну зачем ты пиздишь на анонимном форуме? Из яндекс практикума например попадают на оффер меньше процента прошедших весь курс и те по-большей части отлетают на испытательном.
696 1987106
>>1987034

>Ты просто кукаректнуть или есть манядоводы?


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

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


Говорю просто по опыту знакомых. В компании по типу яндекса конечно кого-попало не берут, я вообще-то имел в виду большие аутсорсные галеры.
697 1987181
>>1987106
Фронтенд это не обязательно верстка. Есть галеры, где версткой занимаются спецом обученные версталы, а жс-ники к ней уже прикручивают свой функционал.
698 1987194
>>1987181
Вкатун во фронт, полюбому верстать будет.
699 1987195
>>1987106
Какого хуя яндекс практикум такой дорогой?!
700 1987196
Я так понимаю, что вкат через стажировки лучше всего проводить.
701 1987197
>>1987195
Бизнес, на войтишниках делают.
702 1987203
>>1987195
Там дохуя всякого общения с наставниками и живых онлайн уроков. Товарищ сейчас проходит курс на питон-бэкендера.
703 1987205
Для того чтобы запилить сайт на вордпрессе, навесить на него плагинов, и потом быть в состоянии решить любой с ним вопрос по
704 1987206
>>1987205
по кодерской части, для этого дохуя знаний PHP нужно?
705 1987209
>>1987195
Ну некоторые их курсы действительно дают весьма полезные, даже иногда уникальные по меркам СНГ навыки, в сравнении с откровенным наебаловом, которого 95% рекламируемого. Но я рассматриваю курсы лишь как возможность для повышения квалификации или расширения кругозора,чтобы не тратить время на поиск инфы, когда у тебя есть достаточно денег и база. Опять же далеко не все их курсы хороши, всякие пистон-джс-околоайти откровенное наебалово, как и везде, только дороже и пафоснее.
Имхо, если тебе нужны курсы, чтобы вкатится - нахуй тебе не надо вкатываться, раз с гуглом на старте справиться не можешь.
706 1987211
А в треде вообще есть те кто в конторе уже давно работает на пхп? У вас зп от ваших коллег на других языках как отличается?
707 1987221
>>1987181
У нас тут пол треда занимается и тем, и другим, еще и бек на пыхе клепает. И получает как кассир в пятерочке
708 1987230
>>1987196
На других языках - почему бы и нет, если есть возможность. На пыхе - однозначно нет.
Если контора ищет PHP Trainee, то это 99% чтобы вырастить битриксоида/вордпресовщика, или в самом лучшем случае поддерживальщика легаси на CodeIgniter/CakePHP/Zend/Нэйтив пхп в процедурном стиле.
709 1987232
>>1987211
Работаю в галере на пыхе, симфони/люмен, частично go и ts. Зп процентов на 50-70 ниже для чисто пыхарей, как я вижу, в отличии от джавистов(но их итак полтора человека на всю контору) и тайпскриптизеров. Но это отчасти из-за того что большая часть пыхарей сидит на поддержке легаси 10 летней свежести и никуда не рыпается, да и дохуя их просто в конторе.
710 1987235
>>1987230
Питон в вебе ведь особо не популярен, и также с руби, его популярность спадает. Если я не прав, поправь меня анон. Так мне питон нравится очень. Ну похоже это, вспомогательная технология.
711 1987237
>>1987232
В целом, по твоему, пых помирает, или есть смысл?
712 1987239
>>1987232
Новой разработки на пыхе почти нет у вас что-ли?((
713 1987241
>>1987237
на нем написано большинство цмс-ок самых популярных, битриксы, вротпрессы, шопифай и иже с ним. Он всегда будет нужен как средство поддержики этих платформ. Но денег таким образом не заработаешь.
714 1987245
>>1987235
Питон в вебе нормально популярен, особенно в штатах/европе. Инста как популярный пример.
Рубисты - до сих пор топ по зарплате, на днях рейтинг всплывал на хабре.
Как первый язык - питон неоч, но это мое мнение. Я придерживаюсь мнения, что учиться нужно на статической типизации все таки, чтобы снизить шансы стать макакой в перспективе.
715 1987248

>Зп процентов на 50-70 ниже для чисто пыхарей


Но ты со своим "частичным go и ts" к ним не относишься, верно? Если так, то по-моему довольно справедливо, если те пыхари не хотят даже частично освоить другую технологию.
716 1987252
>>1987237
Никуда он не помирает, как клепали средний и лоу ценовой сегмент, так и будут, ибо дешево и бьыстро, плюс он развивается хорошо.
>>1987239
Есть, но чаще это переписывание легаси в ооп код под симфони и иногда новые сервисы, но на ts нового конечно побольше, хотя это наверное больше из-за специфики основного направления.
717 1987253
>>1987245
Хорошо, как мне опыт получить, на руби или питоне? Вкатуну. Удаленно ведь джунов, или трайни не бывает. Насколько я понимаю.
718 1987254
>>1987252
Карьерный рост, если можно так сказать, у пыхеров есть? Т.е топовый разраб может сравниться, например с джавистом, по деньгам, или интересным задачам.
719 1987257
>>1987252

>Никуда он не помирает, как клепали средний и лоу ценовой сегмент, так и будут



This. На чем делать средненький сайт для средненькой конторы, не на Джаве же.
720 1987278
Насчет руби, расскажу хохму. Недавно вижу от лица softserve, одной из топовых аутсорсинговых айти галер Украины, объявление по поиску Senior PHP Developer. Думаю ну нихуя себе, компании такого уровня уже лет 15 php же не используют.
Открываю, а там оказалось что они ищут php-разрабов с опытом 5 лет и больше, чтобы переучить их на руби. Опыт с самим руби не требуется, вот вам и перспективы роста.
721 1987282
>>1987248
На самом деле не отношусь буквально месяц как, подняли зп после того как сдали микросервис на ts, который писали три месяца почти и даже сильно провалили дедлайны, но видимо старания оценили, лул. А так у меня тоже есть свой кусок легаси, на который попал, придя два года назад в контору и с ним приходися ебаться изрядно, как камень на шее.

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

>>1987254
Я бы сказал, что есть движение. Среди активных мидл+ разрабов есть текучка, одни уходят, другие приходят, свапаются между проектами, ктото техлидом становится, ктото в джаву или ts уходит, кто то сеньорит на симфони. Но вцелом все это все равно происходит вокруг пыхи.
То есть вырастают именно энтерпрайзные такие типичные кодеры.
722 1987351
>>1987257
На ноде!
723 1987793
Аноны, что лучше использовать для ебли одного .json файла? Конструкцию fopen() fwrite() fclose() или file_get_contents() file_put_contents()?

И использовать параметр LOCK_EX для очереди или лучше забить, учитывая что начать ебать этот .json могут сразу в несколько потоков? Данные не критичные, так что похуй если следующий поток затрёт данные с предыдущего из-за того что они начали обработку одновременно
724 1987823
>>1987793

Ты бы сравнил плюсы и минусы каждого подхода.

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

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

Блокировка защищает от этого, но с ней процессы, которые хотят читать или записать файл перестают работать параллельно и встают в очередь.

Кстати, в случае использования БД эти проблемы решает сама БД.

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

И еще. Если у тебя данные некритичные, может тебе не заморачиваться и просто генератором случайных чисел нагенерировать id товаров?
725 1987862
Тут пошел тред каких-то вредных советов. Как не надо писать код.

В чем плюсы написания бекенда на Руби или TS? В TS все асинхронное, а бизнес-логика обычно синхронная. То есть, требуется сначала сделать A, потом B, а в TS придется возиться с промисами и async/await. Вам это нужно?

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

В TS нету библиотек вроде Доктрины. В JS можно поделить на ноль, можно опечататься в имени свойства объекта и исключение выброшено не будет.

Так как JS не умирает после запроса, в нем возникают утечки памяти. Так как отладчиков и профайлеров для их поиска я не знаю, то обычно просто по крону перезапускают процесс JS, вместо того, чтобы найти источник проблемы.

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

То есть, PHP разработчик давно бы исправил проблему, а разработчик микросервисов все еще занят изучением фреймворка на Го, на котором написали соседний микросервис.

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

Тут пошли какие-то вредные советы. Как усложнить разработку в убыток бизнесу.

Почему же используют Руби и TS, микросервисы, реакт и вью? Не знаю, наверно старшим программистам стало скучно и они от скуки решили поменять язык разработки. При этом нанося ущерб бизнесу.

Нет ничего лучше и проще монолита на PHP, с шаблонизатором Твиг. Получил запрос, обратился к БД, отрендерил шаблон - все это просто пишется и просто отлаживается. И программистов на PHP больше, проще их найти.
725 1987862
Тут пошел тред каких-то вредных советов. Как не надо писать код.

В чем плюсы написания бекенда на Руби или TS? В TS все асинхронное, а бизнес-логика обычно синхронная. То есть, требуется сначала сделать A, потом B, а в TS придется возиться с промисами и async/await. Вам это нужно?

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

В TS нету библиотек вроде Доктрины. В JS можно поделить на ноль, можно опечататься в имени свойства объекта и исключение выброшено не будет.

Так как JS не умирает после запроса, в нем возникают утечки памяти. Так как отладчиков и профайлеров для их поиска я не знаю, то обычно просто по крону перезапускают процесс JS, вместо того, чтобы найти источник проблемы.

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

То есть, PHP разработчик давно бы исправил проблему, а разработчик микросервисов все еще занят изучением фреймворка на Го, на котором написали соседний микросервис.

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

Тут пошли какие-то вредные советы. Как усложнить разработку в убыток бизнесу.

Почему же используют Руби и TS, микросервисы, реакт и вью? Не знаю, наверно старшим программистам стало скучно и они от скуки решили поменять язык разработки. При этом нанося ущерб бизнесу.

Нет ничего лучше и проще монолита на PHP, с шаблонизатором Твиг. Получил запрос, обратился к БД, отрендерил шаблон - все это просто пишется и просто отлаживается. И программистов на PHP больше, проще их найти.
726 1987874
>>1987862
Толсто же, попробуй еще раз.
727 1987888
>>1987823
Вот блин не знал

Страшно чёто стало какая там очередь может образоваться с LOCK_EX, сейчас сделал просто file_put_contents с FILE_APPEND чтобы вообще посмотреть сколько там запросов сыпит, и уже за 2 часа насыпало 5 тысяч строк, интересно до сколько там время ожидания может дойти, надеюсь по секунд 20 не будет очереди лол, а то хотер сразу заноет

Мне просто нужно не только айди хранить, но и название, урл и прочую хуйню, потом всё это парсить, удалять повторы и выводить уникальные
728 1987890
>>1987888

По моему, проще хранить только id, а при выводе брать оставшиеся данные из БД.

>>1987874

Сильная аргументация.
729 1987894
Аноны, есть сервер на php 5.2, создаю массив $info = ["Абу" => "Хуй"] а он в ответ тишину, это значит что он просто не поддерживат такой способ создания массивов ввиду своей древности? С $info = array() работает
730 1987897
>>1987890

>оставшиеся данные из БД


Вот здесь самый прикол, доступа к БД нет, по этому хочу сохранять всё, а не только id и хранить в json
731 1987898
>>1987894

>есть сервер на php 5.2


Выкинь каку и поставь php 8 7.4
732 1987899
>>1987898
Я бы и рад, но нельзя, так почему не работает? Из-за старого php?
733 1987901
>>1987894

Квадратные скобки появились в PHP 5.4. Также, PHP должен был выдать ошибку и записать ее в лог ошибок. Стоит смотреть лог ошибок, а не пытаться угадать, в чем может быть проблема.
734 1987902
>>1987901
Спасибо анон, я бы посмотрел, да кастрат на хостинге не даёт
735 1987908
>>1987899
Клуб археологии двумя блоками ниже
736 1987911
Что за привычка работать на хуевом окружении?
У одного доступа к бд нет, у другого к логам, еще и древние версии пыха
737 1987913
>>1987823

>Ты бы сравнил плюсы и минусы каждого подхода.


Имеется ввиду время выполения каждого из способов? Короче мне надо написать 2 скрипта и тестировать сегодня один, завтра другой, засекать время выполнения и выбирать что быстрее?
738 1987915
>>1987911
Анон, какой сервер дали с тем и приходится работать, ради тебя никто не будет обновлять сервер рискуя что всё сломается
739 1987922
>>1987915
Да, гораздо лучше работать на сервере, где у разраба нет нужных доступов, старый пых и рядом еще куча говна крутится. Багов не будет, атвичаю.
По ftp код заливаете?
740 1987928
>>1987922
Сейчас прибежит вот этот >>1987862
зеленый и расскажет нам, что фтп надежнее и быстрее, а гит - это от лукавого и вообще придумки для геев.
741 1987941
>>1987913

Нет, я имел в виду вообще, какие есть преимущества и недостатки. В случае с fopen, по моему просто больше кода придется писать, чем в случае с file_get_contents(). fopen/fwrite нужен, когда ты открываешь файл и потом пишешь по частям.
742 1987942
>>1987928
Этот >>1987862 шиз еще и не знает, для чего микросервисы используют, описывая случай неправильного применения микросервисов (микросервисный монолит) и почему-то у него один чел отвечает за несколько микросервисов
743 1987944
>>1987942
Да это вкатун тралирует прост, мне кажется.
744 1987984
>>1987922

>По ftp код заливаете?


Как ты узнал? Да, а чем сейчас модно заливать?
745 1987995
>>1987941
Да на количество кода пофигу, лишь бы не было километровых очередей на чтение/запись, короче надо постестировать оба варианта, хотя я наверно и не узнаю что очередь на пределе, так как сервер после какого-то там таймаута просто дропает выполнение скрипта лол

Кстати, а очереди на чтение и запись - это 2 разные очереди или одна и та же? Пизде столько нового узнаю для себя, раньше только с js приходилось ебаться, там такой хуйни и близко не предвещало
746 1987999
>>1987941
Кстати анон ты писал нужно будет дропать запросы от ботов, а их с помщью юзер агента вычислять? По сути получается будем дропать только яндекс и гугл, а боты от васянов и дальше будут наполнять json мёртвыми запросами маскируясь под обычный юзер агент?
747 1988035
Привет анончеки. Пишет вам воннаби крутой арбитражник.
Хочу попробовать лить креативы через апи, на бирже мне дали ссылку на такое вот https://github.com/kadam-official/php-sdk
Как мне запускать это вот все и допустим лить тизеры/баннеры?
Что такое композер и почему питон с джавой настолько проще?
748 1988059
Ананы, захотел залогировать всех посетителей на сайте чтобы посмотреть их юрезагенты и что вообще за живность такая водится, нашёл вот такие варианты https://forum.antichat.ru/threads/68692/ и http://usefulscript.ru/log_info.php это нормальные варианты сделать такую приблуду для себя? Может есть что-то ещё гениальнее? Или всё это так и делается?
749 1988061
>>1987984

>Как ты узнал?


В начале карьеры тоже этим занимался. Попался проект без гита

>Да, а чем сейчас модно заливать?


Гит + ci/cd, опционально докер/кубер
750 1988063
>>1988059
Загугли fingerprint
751 1988065
>>1988063
Точнее browser fingerprint
Эта же техника используется здесь
752 1988104
>>1988063
А зачем мне опечаток браузера? Я просто хочу собрать список юзерагентов и посмотреть что посещает сайт, варианты с записью в файл которые я кинул выше и используются для таких целей?
image.png14 Кб, 524x216
753 1988110
>>1988104
Совсем уже гуглить разучились?
754 1988161
>>1988110
Аноны мы походу друг-друга не понимаем, я знаю что юзерагент можно выдернуть с помощью $_SERVER['HTTP_USER_AGENT'], я просто хотел узнать как аноны собрали бы список юзерагентов, судя по ссылкам что я дал все это делают просто записью результата кода $_SERVER['HTTP_USER_AGENT'] с новой строки в обычный текстовый файл, как-то слишком просто получается, может кто-то что-то хитрее и лучше подскажет
755 1988170
>>1988161
Ты серьезно или прикалываешься?
Тебе нужно собрать юзер агенты, пусть в текстовый файл.
На каждый запрос ловишь юзер агента из суперглобального массива HTTP, добавил в файл строчку с ним.
Всё.
Да, это делается в несколько строк.
Пока мы тут беседуем, ты бы уже мог всё это дело написать и протестить.
756 1988175
>>1988161
Я бы помимо юзер агента собирал полный фингерпринт и запихнул в
всё бд, если понадобится какая-то дальнейшая обработка этой статистики.
Потом можно будет графики строить или еще какую аналитику производить
757 1988214
>>1987995

"Очереди" в явном виде нет, она получается сама собой. Если ты берешь эксклюзивную (полную) блокировку на файл, ты как бы ограничиваешь доступ к этому файлу. Если другой скрипт попытается взять блокировку, он остановится до того момента, пока блокировка не будет снята. То есть доступ к файлу идет по очереди, а не одновременно.

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

Эксклюзивная блокировка берется для записи в файл. Это защищает от ситуации, когда другой процесс попытается прочитать не до конца записанный файл и получит некорректные данные. А с блокировкой он получит доступ к файлу только после того, как тот полностью записан.

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

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

Блокировки важны при параллельной работе множества скриптов с одним и тем же файлом. Иначе можно при чтении получить мусор или записать в файл мусор.

----

Важный момент: блокировки в PHP не принудительные, а добровольные. То есть, они действуют только на тех, кто их явно использует. Если ты не используешь блокировку и читаешь файл через file_get_contents, то все блокировки игнорируются. Зато эти блокировки работают на любой ОС.

На уровне отдельной ОС, например, Линукс, есть и принудительные блокировки, которые ставятся на уровне ОС и которые действуют на все программы.
757 1988214
>>1987995

"Очереди" в явном виде нет, она получается сама собой. Если ты берешь эксклюзивную (полную) блокировку на файл, ты как бы ограничиваешь доступ к этому файлу. Если другой скрипт попытается взять блокировку, он остановится до того момента, пока блокировка не будет снята. То есть доступ к файлу идет по очереди, а не одновременно.

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

Эксклюзивная блокировка берется для записи в файл. Это защищает от ситуации, когда другой процесс попытается прочитать не до конца записанный файл и получит некорректные данные. А с блокировкой он получит доступ к файлу только после того, как тот полностью записан.

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

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

Блокировки важны при параллельной работе множества скриптов с одним и тем же файлом. Иначе можно при чтении получить мусор или записать в файл мусор.

----

Важный момент: блокировки в PHP не принудительные, а добровольные. То есть, они действуют только на тех, кто их явно использует. Если ты не используешь блокировку и читаешь файл через file_get_contents, то все блокировки игнорируются. Зато эти блокировки работают на любой ОС.

На уровне отдельной ОС, например, Линукс, есть и принудительные блокировки, которые ставятся на уровне ОС и которые действуют на все программы.
758 1988241
>>1987995

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

Что значит целостность чтения:

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

Что значит целостность записи:

- что 2 процесса не будут писать в один файл одновременно, перемешивая данные друг друга.

Способ такой:

- при чтении просто читаем файл, например, goods.json
- при записи создаем новый файл со случайным именем, например, goods.json.12846464. Пишем в него данные, когда закончим, переименовываем его в goods.json.

Как это работает?

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

- если кто-то читает файл goods.json, а другой скрипт вызывает операцию переименования, то происходит следующее: старый файл goods.json теряет свое имя, но не удаляется и первый скрипт (который его открыл) продолжает читать старый файл. Он будет удален только когда первый скрипт закончит с ним работать и закроет файл. Таким образом, целостность чтения не нарушается. А скрипты, которые откроют файл после переименования, получат доступ к новому файлу.

То есть, операция переименования атомарна. Она отбирает имя goods.json у старого файла, делая его безымянным и невидимым (но все еще существующим), и присваивает это имя новому файлу.

Получается, что в goods.json всегда будут полностью записанные данные и чтение из него будет всегда давать корректный результат.

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

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

Что значит целостность чтения:

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

Что значит целостность записи:

- что 2 процесса не будут писать в один файл одновременно, перемешивая данные друг друга.

Способ такой:

- при чтении просто читаем файл, например, goods.json
- при записи создаем новый файл со случайным именем, например, goods.json.12846464. Пишем в него данные, когда закончим, переименовываем его в goods.json.

Как это работает?

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

- если кто-то читает файл goods.json, а другой скрипт вызывает операцию переименования, то происходит следующее: старый файл goods.json теряет свое имя, но не удаляется и первый скрипт (который его открыл) продолжает читать старый файл. Он будет удален только когда первый скрипт закончит с ним работать и закроет файл. Таким образом, целостность чтения не нарушается. А скрипты, которые откроют файл после переименования, получат доступ к новому файлу.

То есть, операция переименования атомарна. Она отбирает имя goods.json у старого файла, делая его безымянным и невидимым (но все еще существующим), и присваивает это имя новому файлу.

Получается, что в goods.json всегда будут полностью записанные данные и чтение из него будет всегда давать корректный результат.

(получается, с помощью переименования файла можно создавать невидимые файлы? можно, но они удалятся, как только их закроет программа, которая их открыла).
759 1988244
>>1988214
Спасибо анон за пояснение, с 1 файлом у меня работает один и тот же скрипт, просто его могут запустить сразу 10 раз в один момент разные хосты, в общем я вот так на всякий случай сделал чтобы не было такого что при добавлении строки другой поток дропнул запись и начал свою file_put_contents('order.txt', $order, FILE_APPEND | LOCK_EX)

Кстати для быстрого парсинга этот текстового файла в массив можно сразу file() использовать и потом искать наличие текущего товара в этом массиве с помощью in_array()? А сколько вообще можно строк загрузить в массив? На сколько памяти хватит? Или лучше резать количество строк допустим до 10 000? А то я чёто смотрю и понимаю что у меня там могут и 100 000 товаров за сутки назаписывать в этот текстовый файл, это если дубликаты не удалять, или 100 000 строк в массиве для php это раз плюнуть?
760 1988248
>>1988241
Вот уж воистину костыли, ещё раз спасибо, учту это
761 1988253
>>1988244

А ты померяй, сколько это времени займет. Но читать и писать по 100 000 строк на каждый запрос не очень хорошая идея, так как это создает большой трафик на диске (нужно постоянно перемещать данные с диска в память и обратно на диск, а его скорость работы ограничена).

> А сколько вообще можно строк загрузить в массив? На сколько памяти хватит?



Да, на сколько хватит. Используй функцию memory_get_usage(), чтобы узнать, сколько памяти съел текущий скрипт, и померяй.
762 1988261
Аноны, все данные что мы получаем через $_POST обязательно пропускаем через strip_tags? А этого достаточно? Или ещё что-то нужно использовать?
image.png2 Кб, 155x69
763 1988308
>>1988253

>Используй функцию memory_get_usage()


1 строка памяти до создания массива, 2 строка памяти после создания массива из 20 000 строк, 3 строка время выполения скрипта, как думаешь нормальные показатели? И насколько плохо обстоят дела с памятью? Я так понимаю по умолчанию занято 200 мегабайт, после создания такого массива все 400 мегабайт? Или это килобайт?
764 1988318
Походу всё таки килобайт, ну неплохо вроде, всего 400кб
Снимок экрана в 2021-04-06 19-26-40.png82 Кб, 686x512
765 1988328
Почему так
766 1988335
>>1988328
Что так?
Зачем шорт теги используешь?
767 1988346
>>1988328
скорее всего в настройках интерпритатора отключены короткие теги.

призываю опытных анонов в тред. полтора года греб в мелкой галере фулстаком на всяких битриксах, вордпрессах и тп шлаке. и так вышло что каждый из тимы (нас было всего 4 разраба) зачастую работал только с одним проектом и был сам себе и бэком, и фронтом, и тестером, и девопсом. сейчас свалил в другое место уже на ларавель. и тут всплыли проблемы уже. то девопс почему то снихуя выебывается и посылает меня нахуй отказываясь выполнять команду в контейнере по специфике таски ее надо было запустить один раз, то теперь выясняется что гендир дс2 офиса какой то ебанутый наглухо неадекват который требует фиксов нашей внутренней CRM над которой я собсно щас и работаю при этом давая 0 нахуй инфы, и при попытках спросить и уточнить он полыхает и чуть ли нахуй тебя прямым текстом послать может коллеги вообще на полном серьезе рассказали что у него там сидит тима фронтов которых он натурально любит попиздить иногда палкой, из за чего и остальные разрабы/девопсы/менеджеры перед ним ходят на задних лапках. и вот интересует вопрос: это вообще норм ситуация в конторах или я попал в какое то исключительное место и надо все таки бежать оттуда ?
768 1988348
Пиздец аноны, на сервере php 5.2, когда кодирую кириллицу в json у меня выдаёт кракозябры, а параметр JSON_UNESCAPED_UNICODE не работает потому что php древний, как ещё можно обойти эту хуйню?
769 1988350
>>1988348
а варик обновить версию пыхи не канает?
770 1988356
>>1988261

Это неправильный подход. Зачем так делать? Можно подумать, пропустив данные через strip_tags, они волшебным образом станут "безопасными" и все уязвимости исчезнут?

Нет. Например, от SQL-инъекции это не защитит.

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

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

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

Вот пара статей про то, как избежать уязвимостей и правильно экранировать данные:

https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
https://github.com/codedokode/pasta/blob/master/security/xss.md

Конечно, данные из POST можно "очищать", если для них есть какие-то ограничения. Например, если параметр это целое число, можно принудительно преобразовать строку в число через intval().

А вот лепить функции наугад не надо. нет волшебного способа сделать данные безопасными.
771 1988357
>>1988308

Память меряется в байтах. И там не 400 000, а 4 миллиона.

5 мс ради того, чтобы просто записать id товара - многовато. Хотя, если у тебя сайт тормозной, это мало заметно.

>>1988328

Надо использовать <?php, а не <?

Также, неправильно, что ты запускаешь редактор кода от рута.

>>1988348

Это не кракозябры, а допустимый для JSON синтаксис (вроде \u0234). Если ты декодируешь корректно этот JSON, то кириллица никуда не исчезнет.
772 1988364
>>1988346
ну же анон, подскажи
773 1988382
>>1988350
Не имею доступа, закрыто хостингом

>>1988357

>Это не кракозябры, а допустимый для JSON синтаксис


Просто хотел по красоте чтобы всё было если смотреть JSON файл глазами, а там это

>\u0234

774 1988409
>>1988357

>там не 400 000, а 4 миллиона


Всё уже в глаза ебусь, там не id пишется, а строка массив где хранится название, айди, урл и т.д. и таких строк было 20 000, да получается 4 мегабайта всё это дело занимает, а если одновременно запустит 10 человек то уже все 40 наверно будет

Кстати анон, я данные в этот файл передаю с помощью post и думаю хранить в json же, а мне надо эти данные в виде айди, названия, урл и т.д. как-то фильтровать прежде чем записывать в новую переменную в массиве или в новую строку в файле? Ведь я потом всё это буду на другой странице парсить и выводить на странице с помощью js, не сможет ли какой-нибудь хуй передать туда например html и при отрисовке страницы с результатами хранящимися в json или файле вывести свой произвольный код который выполнит его js скрипт или прочую хуйню?
775 1988460
>>1987862

>Тут пошли какие-то вредные советы. Как усложнить разработку в убыток бизнесу.


>И программистов на PHP больше, проще их найти.


Лол, так в этом и вся суть. Малому и среднему бизнесу пыха выгодна, но только из-за того, что к разрабам на ней можно относится как к рабам и платить миску риса в день. Для большого бизнеса это не приоритет.
И даже не пытайся это отрицать, ведь ни одна большая контора php не использует. Совсем ни одна. Фейсбук и вк используют свои модификации, у которых путь кардинально отличается от пути современного php.

>Наверно старшим программистам стало скучно и они от скуки решили поменять язык разработки. При этом нанося ущерб бизнесу.


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

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


>Нет ничего лучше и проще монолита на PHP, с шаблонизатором Твиг. Получил запрос, обратился к БД, отрендерил шаблон - все это просто пишется и просто отлаживается.


Не, ну это уже святая толстота. Написать конечно может и проще, вот только поддерживать красивый структурированный код на Vue и какой-то пиздец на jQuery или нативном js - это уже принципиально разные вещи.
Про удобство разделения команд фронтовиков и бэкэндеров при этих подходах я совсем молчу.
776 1988461
>>1987944
Ты чего, ОПа не узнал?
777 1988566
Аноны, помогите пожалуйста! Почему не записываются данные в тхтшник?
778 1988751
>>1988357

>Также, неправильно, что ты запускаешь редактор кода от рута.



Ну по другому он не сохраняет
779 1988766
>>1988566
пчел я сам учусь но у тебя пиздец дичь а не код, ты же не принимаешь данные посланные формой, у тебя персон и меседж даже не созданы, они пустые
780 1988768
>>1988566
и что за phtml, у тебя даже названия файлов кривые как и весь код
781 1988780
>>1988364
>>1988346
Очевидно, что попал в говноконтору. Ищи другой офер и сваливай. Нервы поберечь стоит.
782 1988782
>>1988566
Для начала научись бек от фронта отделять
783 1988784
>>1988768
Чот в голосину, ты хотябы загугли сначала чтоли...
784 1988786
>>1988784
Какая-то древняя хуита, на проде не встречал ни разу
785 1988798
>>1988784
я не спорю что возможно ещё до прихода иисуса php файлы так обзывали, но не в 2021 же году
786 1988812
пчелы а где перекат, треда даже на главной же нет, как вы собираетесь поднимать этот язык с колен
787 1988838
>>1988786
>>1988798
Чо блять? Вы хотябы свою неграмотность не выставляйте как чтото хорошее. Это обычный семантический формат для html с микровставками php, который работает везде по-дефолту. Использовать или нет - ну дело каждого. Но к чему тут кукареканье про древность я вообще хз.
image.png11 Кб, 731x114
788 1988898
>>1988838
Ок, покажи современный проект на пхп, где этот формат используется.
Я прошел через пару десятков проектов, нигде этого не встретил.
Либо используется .php, либо шаблоны twig, blade

>Но к чему тут кукареканье про древность я вообще хз.


Пикрил
789 1988900
>>1988812

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


А зачем? Жс расхайпили - подняли требования для вката.
В пхп пока ситуация получше
790 1988915
Аноны, подскажите насчёт многомерных массивов, в JS если добавлять в массив другой массив со своим цифровым ключём то эти массивы в массиве сортируются по порядку ключа, то есть если я добавлю массив с ключём 5, потом другой с ключём 3, то массив с ключём 3 переместится вверх, хоть я его и добавил позже, в PHP так же или порядок добавления сохранятся? Хочу сделать поиск по массиву с массивами по цифровому ключу массива чтобы быстрее делать поиск, но мне нужно чтобы новые добавляемые элементы добавлялись в конец массива и не сортировались автоматически по номеру ключа, надеюсь вы поняли о чём я, в PHP есть такой косяк?
791 1988920
>>1988915
Почему сам не попробуешь запустить пару примеров?
792 1989007
>>1988920
С вами походу придётся просто это долго, это не JS который прямо в браузере можно проверить
793 1989010
>>1989007

>это не JS который прямо в браузере можно проверить


Онлайн интерпретаторы для кого?
Консольный режим пхп для кого?
794 1989045
>>1989007
php -a
795 1989050
>>1989045
В интерактивном режиме неудобно код набирать.
Как и в онлайн интерпретаторе
796 1989064
В мою поехавшую голову пришла такая идея, ведь многие сайты наверняка филтьруют ботов, тем самым не отслеживая такие хосты или не учитывают их в статистике и т.п., они же это делают с помощью анализа юер агента, так? А что если замаскировать свой браузер под бота выдавая их юзер агент, считайте минус процент тотального анального контроля и ебли с рекламой, нет?
797 1989068
знающие Fedex api тут есть?
798 1989147
Блять говно короче, если в массиве массивы с рандомными цифровыми ключами, то чтобы добавить новый массив в начало нужно использовать array_unshift(), а это говно стирает все рандомные ключи и сортирует массив с 0 до количества массивов, можно это как-то обойти?

То есть у меня массив примерно такого вида
[
5 => ["id" => 26, "title" => "Название 1"],
10 => ["id" => 64, "title" => "Название 2"],
1 => ["id" => 43, "title" => "Название 3"],
]

И мне надо добавить новый массив
14 => ["id" => 82, "title" => "Название 4"]
В начало, как это сделать чтобы ключи не стирались и не сортировались с нуля?
799 1989154
>>1989147
Походу нашёл, нужно просто не array_unshift делать, а тупо плюсовать 2 массива
800 1989192
>>1958281 (OP)
В вакансии написано

>Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)


Я глянул краткий курс по Laravel, думаю сейчас написать задачу про студентов. Как думаете - этого хватит, если вакансия на Джуна или под опытом подразумевается что-то большее?
Вообще не понятно если честно как использовать документацию Laravel. Вот откуда мне узнать есть ли нужная функция в Laravel...
801 1989202
>>1988898
Рендеринг страничек на пыхе - это вообще охуеть как современно.
А раз тебе не нравится, что ФОРМАТ ФАЙЛА добавлен не вчера, так не используй его, я так и написал, можешь вообще не юзать ничего, что придумано не в этой версии языка, древнее говно же. В спецификации он есть, не deprecated.
Выше вы до чела доебались за то что у него 'кривой' формат файла, хотя он использовал его как раз по назначению, а то что тебе некоторые вещи незнакомы - ну бывает, лул.
802 1989205
>>1989192

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


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

>Вообще не понятно если честно как использовать документацию Laravel. Вот откуда мне узнать есть ли нужная функция в Laravel...


Гуглить laravel feature_name
803 1989214
>>1989202

>Рендеринг страничек на пыхе - это вообще охуеть как современно.


Не везде нужны реакты с твигами

>А раз тебе не нравится, что ФОРМАТ ФАЙЛА добавлен не вчера, так не используй его, я так и написал, можешь вообще не юзать ничего, что придумано не в этой версии языка, древнее говно же. В спецификации он есть, не deprecated.


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

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


Если бы он использовался чаще чем никогда, то претензий не было б

Повторяю реквест: доставь актуальную пхп либу или проект, где такой формат используется
804 1989218
>>1989205
Блиин, осталось всего 2 дня, не успееееваю...
Вот в таком случае что можешь посоветовать?
805 1989223
>>1989218
На что не успеваешь?
806 1989229
>>1988766
Спасибо.
807 1989234
>>1989192
У меня смежный вопрос: если в вакансии джуна есть вот такое требование:

>Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)


Понятное дело что везде по разному, но, скорее всего, как будут обстоять дела в конторе?
Придется по ходу работы учить все фреймы и понемногу пилить на них разные проекты, или же меня будут садить на проекты на выбранном фрейме?
А то не очень хочется лишний раз тратить свое время на Ларавел или, упаси Б-же, Yii.
808 1989242
>>1989214
С мыслью WTF будут смотреть только вчерашние вкатуны, но они много на что так смотрят. А свой манямирок про ненужность стандартных опций языка можешь в psr направлять, там твое мнение очень важно.
Вообщем когда формат объявят deprecated - тогда и приходи со своими претензиями.
Про либу с версткой - ну вообще пушка, я с cmsками не работаю, сам ковыряйся в этом.
809 1989243
>>1989223
Ну вакансия через 2 дня должна закрыться.
А я много чего не знаю. Я просто хочу попытаться пойти на собес, но ссыкотно, вдруг я ничего не отвечу
810 1989344
>>1988566

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

Также, у тебя код странный. Ты используешь переменные $message, $person, а где задаются их значения? Они автоматически из POST-запроса в переменные не подставляются.

Вот урок про работу с формами: https://www.php.net/manual/ru/tutorial.forms.php

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

Также, прочитай про уязвимость XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md - она у тебя тоже есть.
811 1989349
>>1988751

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

>>1988768

Это нормальное расширение для HTML-шаблонов с включением PHP.

>>1988566

Кстати, у тебя еще одна проблема. Ты не делаешь redirect-after-POST и если после добавления сообщения обновить страницу, то запрос отправится снова и добавится еще одно сообщение. Надо делать редирект после обработки запроса. Можешь почитать это: https://github.com/codedokode/pasta/blob/master/forms.md
812 1989359
>>1988812

Рано перекатывать. В тред легко попасть, нажав кнопку PHP в закрепленном треде.

>>1988915

Массивы в JS и PHP разные. В JS массив всегда упорядочен по возрастанию ключей, не важно в каком порядке ты вставляешь значения. И в JS в массиве ключи (почти) всегда идут по возрастанию разрывов: 0, 1, 2, 3 ... и так далее.

Есть, конечно, исключения. В JS можно создать массив с разрывами так:

let a = [1, 2, 3];
delete a[1]; // сделали разрыв
console.log(0 in a); // true
console.log(1 in a); // false

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

Массив в PHP больше похож на словарь из JS (ассоциативный массив), но в JS словари неупорядоченные, а массивы PHP упорядоченные.

В PHP массив "помнит" порядок, в котором вставляли значения. В PHP ключи не обязаны идти по возрастанию и могут идти в произвольном порядке, например:

$a = [10 => 'a', 3 => 'b', 99999 => 'x'];

И этот порядок следования элементов запоминается.
813 1989364
>>1989064

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

>>1989214

> А то, что выпал из употребления минимум намекает на то, что новые разрабы на проекте будут смотреть на это с мыслью WTF



Ты путаешь большие реальные проекты (где используют twig/blade) и учебный проект на 10 строчек (где оправданно использовать нативный шаблонизатор).

Так, по твоей логике, ему надо эту форму на Симфони что ли переписать, с dependency injection и доктриной?

Я кстати, встречал большой проект с использованием нативного шаблонизатора. Во времена Zend Framework так делали.
814 1989365
Каким образом добавляют на сайт первого юзера-админа? В ларавеле есть seeders, а в симфони, например?
Голыми SQL-запросами, с захешированным вручную через консоль паролем и его же ручным экранированием?
Топорно как-то. На ум приходят фикстуры, но они же для тестирования предназначены.
815 1989370
>>1989365

Можно сделать миграцию и в ней добавить через SQL-запрос. Можно сделать CLI-команду и запустить ее руками.
816 1989464
Сап, стоит ли сразу всё в докере разрабатывать? Дают ли это какое-то преимущество? И вообще стоит ли с этим заморачиваться?

МимоВкатунНачинающий
817 1989472
>>1989464
Если планируешь на норм работу устроиться - однозначно да. Докер для бэкендера сейчас - дефолтный навык, такой же, как гит например.
818 1989475
>>1989344
>>1989349
Вау, мне так ещё никогда развёрнуто не отвечали, спасибо тебе огромное.
819 1989477
>>1989472
Спасибо буду освайвать. Из linux, нужно уметь настрайвать файрвол, политики безопасности? Вообще на каком уровне linux нужно знать?
820 1989644
На днях начал штудировать php вместе взятыми его symfony фреймворками. Но задаюсь вопросом. Почему много аннотаций нужно писать? Я честно начинаю заёбываться этим фактом. Такое ощущение я не код пишу. А только аннотации/комментарии. Я конечно понимаю, что эти аннотации преобразовывается как-то потом в при компиляции. Но зачем так много аннотации нужно писать ебать? Вообще ахуеваю от этого. Почти вся логика контролеров пишется в аннотациях. Что за хуйня вообще? Мимо вкатыш из питона/js.
821 1989686
Аноны, в js можно сократить условие до 1 строки с помощью ? :, а как это сделать в php?
Попробовал if (5 > 10) echo "Да" : echo "Нет" выдаёт ошибку

И как присваивать результат if в переменную? Без прописывания её в фигурных в скобках?
Типа $res = if (5 > 10) {"Да"} else {"Нет"}; echo $res крашится
822 1989696
>>1989686
В тернарном операторе просто нужно убрать if и он заработает
823 1989697
>>1989686
Тернарный оператор работает примерно так же, как и в js.
'Yes' ?: 'No';
'Yes' ? 'if true' : 'if false';
824 1989701
>>1989477
Ну не прям задрачивать, но вцелом ориентироваться будет не лишним, уметь wpsку настроить, nginx поднять, права и порты раскидать. Вообще для этого девопс есть, но пугаться при виде терминала тоже не солидно.
>>1989644
Ну это путь симфони, какой уж есть, более того весь php в 8+ версии к этому идет, там аннотации по типу симфони на уровне языка прикрутили уже. Вообще в симфони часто можно их избегать, например мапить доктрину мне удобнее через xml, особенно сложные структуры.
826 1989705
Сап, это прям обязательно джуну вкатывать именно в офис?
827 1989711
>>1989644
А почему симфони, а не ларавел? Объясни, свой выбор пожалуйста.
828 1989725
Аноны, а как в основном пчелы воводят результаты работы своих API, как в деревянные HTML типа

$id = "1";
$title = "Тест";
echo "{";
echo '"id":"' . $id . '","title":"' . $title . '";'
echo "}";

Или парсят данные в массив, кодируют его в JSON и выводят типа

$array = ["id" => 1, "title" => "Тест"];
$array = json_encode($array);
echo $array;

Или есть ещё какие-то способы о которых я даже не догадался, кроме фреймворков, хочу понять основу
829 1989734
>>1989725
Причем тут API и способы вывода?
830 1989800
>>1989734
Наверно непонятно объяснил, как они формируют ответ, выводят его построчно или кодируют массив и выводят это через echo

Вот например паблик API https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY как они сгенерировали весь этот текст, выдернули из базы, собрали в массив, обработали, кодировали в json формат и тупо echo? Как вообще в основном это делают, ведь способов нарисовать этот текст много, но мне кажется 2 вариант что я описал нормальный и им можно пользоваться
831 1989801
>>1989734
Не хранят же они всё это в файлах, ни же это генерируют когда ты запрашиваешь ответ с этого API, вот мне интересно как они его собираюь в кучу и отрисовывают на странице которую ты запрашиваешь
832 1989811
>>1989711
Не знаю просто взял симфони. По ларавелу мне показалось слишком много мусора. Мусор как мусор, куча прям. Надеюсь ты понимаешь что я имею ввиду.
833 1989815
>>1989800
Ну точно не построчно. Они все возвращают данные в json формате.
834 1989819
Сап, аноны. Какие обычно задачи выполняет junior на работе? А middle? И еще: мидл проводит код ревью джуну, а сеньер мидлу?
835 1989825
>>1989819

> Какие обычно задачи выполняет junior на работе?


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

> И еще: мидл проводит код ревью джуну, а сеньер мидлу?


Везде по разному.
836 1989834
>>1989819
Вообще это сильно зависит от конторы.
Вцелом джун обычно пишет круды, делает мелкие фиксы, либо пилит какие то новые модули под контролем куратора, если контора может себе такое позволить.
Мидлы и сеньоры уже самостоятельно решают задачи в командах или поодиночке и вцелом могут делать вообще все что угодно. Грань между middle и senior не жесткая, то есть например "сеньор" Вася из рандом студии по клепанию сайтецов будет middle- в крупной энтерпрайзной конторе.
Но вцелом сеньоры чаше разрабатывают какуюто сложную логику, планируют общую архитектуру итд. В крупных конторах есть отдельные сеньорские должности для техлида, архитектора, тимлида и всякое такое.

Ревью устроено везде по-разному. Я чаще встречал перекрестное. Когда реквест не заливается, пока не будет заапрувлен хотябы двумя разработчиками. Бывает, что этим занимается техлид или тимлид. Ну а за джуном обычно все равно крепят куратора и он уже смотрит за ним.
Еще есть такая фича как отдельный Q&A для кодовой базы. Но это больше за бугром распространено, у бохатых.
837 1989853
Посоны, хочу вернуться к своим баранам с товарами за сутки, таки как лучше их хранить?

Тупо в текстовом файле в формате
65|Телефон|100$
567|Телевизор|200$
58|Компьютер|500$
И каждый раз разбивать его на массив по \n, а далее на подмассивы по | и отрисовывать

Или в json формате в json файле
{{"id":65,"order":"Телефон","buy":"100$"},{"id":567,"order":"Телевизор","buy":"200$"},{"id":58,"order":"Компьютер","buy":"500$"}}
И каждый раз расспаршивать его в массив и отрисовывать

Или вообще в базе данных? Или тут по сути без разницы и выбирать то что нравится или то что занимает меньше времени на отрисовку, меньше оперативной памяти и меньше места на диске?
838 1989886
>>1989853
Вообще в базе данных конечно. Можно кэш накатить, если данные большие.
839 1989962
>>1958281 (OP)
Аноны, нужно ли мне писать, что у меня базовые знания всего, чего они требуют? Если да, то как?
840 1989981
>>1989962
Или не делать акцент на то, что у меня базовые знания?
841 1989986
>>1989242
Пруфов не будет, значит
842 1989993
>>1989364

>Ты путаешь большие реальные проекты (где используют twig/blade) и учебный проект на 10 строчек (где оправданно использовать нативный шаблонизатор).


Вот, на большом проекте будет шаблонизатор. На учебном .php
Зачем брать неиспользуемое расширение?

>Так, по твоей логике, ему надо эту форму на Симфони что ли переписать, с dependency injection и доктриной?


Где я такое писал?

>Я кстати, встречал большой проект с использованием нативного шаблонизатора. Во времена Zend Framework так делали.


+ к тому, что это устаревший формат. Неоффициально, но из бестпрактис он выпал
843 1989996
>>1989986
А официальные спецификации языка тебе не пруф? Наркоман штоли?
844 1990000
>>1989644
Вдохновлено джавой, как и все остальное в Симфони. Причем названия аннотаций и параметры зачастую те же. Джависты вон уже давно шутят про Annotation Oriented Programming.
А вообще, так просто удобнее. Когда есть выбор между php кодом и конфигом, аннотации часто вбирают в себя все плюсы этих двух вариантов.

>>1989701

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


Больной ублюдок. XML же вообще не ориентирован на удобство записи и чтения человеком, это ж язык разметки для машин по большей части?
845 1990001
>>1989705
Желательно.
Можно будет заебывать старших вопросами.
На удаленке с этим труднее
846 1990010
>>1989725

>$id = "1";


>$title = "Тест";


>echo "{";


>echo '"id":"' . $id . '","title":"' . $title . '";'


>echo "}";


Сам то как думаешь, удобно так рендерить?
847 1990012
>>1989996
Одно дело - наличие фичи в спеке, другое - частота употребления фичи на проде
848 1990016
>>1990000
Ну это само както пришло, сперва был проект на симфони, который дописывал на аутсорсе - там было много сложных связей, большие таблицы и ебейшая вложенность сущностей, в аннотациях все по самые гланды, разбираться было невозможно, потому что банально десяток файлов листать и искать поля в объекте - та еще ебля. Вот и пришлось все в xml переписывать. Потом на мэйн работке, когда стали симфони использовать тоже приняли xml как дефолт.
849 1990020
>>1990010
Значит все используют массивы которые перед выводом кодируют с помощью json_encode? Просто не хочу потом всё переписывать
850 1990022
>>1990012
Ну так не юзай, раз в твоем проде это не используют, тебе так и сказали с самого начала. Зачем ты доебываешься до людей в треде со своими фантазиями?
851 1990029
>>1990020
Ты неправильно понял.
Получать данные можно в разном виде: набор переменных, массивы, объекты, коллекции и т.д.
Отдавать тоже можно по разному: json, xml, html, просто текст, csv, бинарные данные и т.д.
852 1990030
>>1990022

>Используют какой-то малоизвестный формат


>Называют фантазером

853 1990031
>>1990016
А ямлы всякие разве не удобнее будут?
854 1990032
>>1990030

>нечего сказать, пукни гринтекстом

855 1990038
>>1990032

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

856 1990046
>>1990038
Съеби пожалуйста обратно в свой /b, зеленый.
857 1990050
>>1990029
Не, меня интересует именно json, получается все json API достают данные из базы данных, помещают их в массив и в конечном итоге кодируют в json и выводят его через echo, буду тогда по такому принципу делать
858 1990053
>>1990030

В туториале ZF1, например, PHP-шаблоны используются с расширением phtml. Логично, что для шаблонов используется другое расширение. Так что это не малоизвестный формат, просто ты с таким не сталкивался и не знаешь.
859 1990055
>>1989725

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

Для вывода логично использовать json_encode. Не забудь только отдавать правильный HTTP-заголовок content-type.
860 1990056
>>1990053
Не корми его пожалуйста, еще поселится тут. Его уже дважды тыкали носом в доки.
861 1990064
>>1990050

>все json API достают данные из базы данных


Помимо бд есть другие хранилища

>помещают их в массив


Об этом уже писал. Не только массивы
862 1990066
>>1990053
Наконец-то адекватный ответ, спасибо.

Не то, что этот шиз
>>1990046
>>1990056
863 1990077
Не опасно ли начинать учить php сейчас и как первый ЯП?
Постоянно натыкаюсь, что пишут, что через 5 лет он уже будет вообще неактуален. И ещё если его брать как первый ЯП, то всё по пизде пойдёт, потом никуда не свитчнешься.

анон, 25лвл
864 1990084
>>1990077
Его уже хоронят 10 лет
865 1990095
>>1990077

>что через 5 лет он уже будет вообще неактуален


Скорее через 5 лет реакт будет неактуален.
На пхп на наш век работы хватит
866 1990161
>>1990077
Неактуален - это слишком расплывчатое понятие. Работа на пыхе еще долго будет, если ты об этом.
Как первый язык, зависит от того, какую цель ты преследуешь в изучении языка. Если цель именно стать программистом и тебе интересно само программирование - то это один из худших вариантов например, слишком велик риск нахвататься фатальных привычек. Если быстро вкатиться и начать что то зарабатывать этим - отличный вариант, лучше только js наверное и то спорно.
867 1990216
Аноны я чёто ВСТАЛ

Хочу сделать товары популярные за 24 часа, всё что я придумал это делать проверку есть текущий товар в массиве или нет, если есть - увеличивает ему количество просмотров на 1, если нету - то добавляем товар, плюс сохраняем дату, и обновляем её каждый раз когда этот товар посмотрели снова, и если дата последнего просмотра уже больше 24 часов - то удаляем этот товар из массива

Но сука меня ждал подвох, а как быть с просмотрами, как посчитать столько их было за 24 часа, ведь товары которые могут посмотреть сегодня 1000 раз могут ещё неделю висеть в топе просмотров, хоть их уже и не смотрят вовсе, но они там потому что когда-то у них набило большое количество просмотров, можно обнулять количество просмотров в 12 ночи, но это же не вариант, в 1 ночи там уже будет количество просмотров за 1 час, а не за 24 часа

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

Коротко: Как сохранять количество просмотров за 24 часа? Чтобы просмотры которые добавлись 25 часов назад удалялись из общего числа просмотров в текущем товаре
868 1990222
>>1990216

> Хочу сделать товары популярные за 24 часа


Очевидно что товары из блока "популярные" будут иметь больше просмотров чем другие. Я бы не выебывался и просто раз в неделю вручную чекал топ просмотров и вручную же обновлял товары в популярном (алсо, туда же можно пихнуть не популярные товары, а те которые ты хочешь продвинуть). Если у тебя там конечно не овер сто позиций в популярном.
869 1990246
>>1990222
Я хотел не блок, а отдельную страницу и там постранично выводить то что больше всего посмотрели за 24 часа, и чтобы самые популярные были имеено вверху, и вот мне интересно а как остальные считают количество просмотров за 24 часа, я пока придумал только записывать количество просмотрво за каждый час и складывать их чтобы узнать общее количество при сортировке товаров, а через 24 часа тупо удалять 1 значение и писать новое, то есть удалять значение которому уже 25 часов, надеюсь понятно изъесняю лол, просто я думаю наверняка есть способ проще ведь наверняка многие с этим уже сталкивались и придумали то до чего я не догадался, а составлять топ самому лень, хочу чтобы юзеры сами его составляли своими просмотрами
870 1990252
Аноны, распишите, плиз, ваши впечталения от обновления с 7.4 до 8. Что стало лучше? Что хуже? Что нужно было сделать, но не было сделано? Поделитесь своими мнениями.
871 1990253
>>1990246
Подозреваю что у остальных "популярное" это далеко не то что смотрят пользователи, а скорее то что хочет продать маркетолух.

> хочу чтобы юзеры сами его составляли своими просмотрами


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

> можно обнулять количество просмотров в 12 ночи, но это же не вариант, в 1 ночи там уже будет количество просмотров за 1 час, а не за 24 часа


Не вижу проблемы, ты в 0:00 смотришь количество просмотров за прошедшие сутки (а не за час) и составляешь топ, просмотры же обнуляешь. Через сутки делаешь тоже самое.
872 1990273
>>1990216

Если тебе нужно именно строго за последние 24 часа, то нужно в лог или таблицу БД писать и id товара, и точное время просмотра. То есть, на каждый просмотр создается новая запись, и удаляются записи старше 24 часов.

Так в таблице или файле быстро наберется куча записей. В принципе, БД не умрет от этого, а вот вручную возиться с файлом на 10 000 записей будет довольно неэффективно.

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

товар1,10,2021-01-01 12:00:00

Так мы получим чуть меньшую точность (будет браться число просмотров примерно за последние 23-24 часа, а не точно за 24), но зато надо будет меньше записей.
873 1990285
>>1990216
А зачем тебе явно хранить кол-во просмотров?
Логай куда-нибудь просмотры товаров с датой и временем просмотра.
Потом по логам сможешь посчитать кол-во просмотров за нужный промежуток времени. И пересчитывать топ раз в N времени
874 1990301
>>1990253

>а скорее то что хочет продать маркетолух


Мне нужно именно по количеству промотров, товары я привёл для примера

>Через сутки делаешь тоже самое


Тоже самое, хочу чтобы список обновлялся в лайве, а не раз в 24 часа, по этому и нужно придумать или узнать как делают другие чтобы считать количество просмотров за последние 24 часа в любое время суток, а не только в 12 ночи

>>1990273
Вот по этому я и ВСТАЛ, всё занимает много места и будет много крутиться за зря увеличивая очереди на запись, так как храниться всё будет в json файле

Я придумал немного компактнее твоего, хотя может и нет, в общем в ключе просмотре писать массив с 24 массивами где хранится час от 1 до 24 и рядом дата, когда дата равна 24 часам значит эти данные в этом часу уже старые и их нужно затереть и выставить свежую дату и начать запись просмотров с 1, то есть у нас есть предыдущие 23 часа и текущий час обнулился и начал записываться заново, походу так и придётся ебаться, просто много циклов получается пиздец, зато самый компатный вариант на выходе, интересно сколько по времени это будет обрабатываться и занимать оперативки
875 1990315
>>1990301
Можешь посмотреть в сторону хранения связок событий и uuid товаров в оперативке с ограниченным сроком жизни. Ну это если есть возможность redis или memcache накатить. Работать быстро будет. Всякие озоны похожий подход используют для некритичных данных.
876 1990373
>>1988780
окей, тогда очевидный вопрос: стоит ли в резюме указывать что вот 3 месяца работал там то там то на таком то стеке? с одной стороны это для меня плюс тк люди видят что есть коммерческий опыт в ларе, а не только на пэт проектах, но с другой стороны минус в том что в новую будет тяжело залететь тк будут думать мол что это я какой то ебанутый/джампер и тд и тп
877 1990393
>>1988898
магенто2 его использует. так что где он -там и этот формат. съебался с галеры как раз когда к ним прилетел проект на этом говне, спустя месяц связался с бывшими коллегами и они говорят что это кал и боль лютая
так что да, говно, старо - тут ты прав, но то что нигде не юзается - тут ты не прав
878 1990449
>>1990393
И каким образом формат файла доставляет боль ты сможешь придумать? Он во всех интерпритаторах php работает. Может кал и боль это сама ебучая цмс?
879 1990454
>>1990315
Походу придётся не выёбываться и просто выводить собранные данные за вчера, а то что соберу сегодня показывать завтра

Аноны, а такой вопрос, вот я хочу в 12 часов ночи обнулять все просмотры в масиве, как по быстрому это сделать? Только через цикл? Типа крутить в цикле $order[key]["view"] = 1;? Или есть какая-то специальная функция для таких задач? Поиска нужного ключа в ключе и его сброс на нужное значение?
880 1990472
>>1990449
это фреймворк , а не цмс я тоже с этого прогорел лол
сам не работал, но по словам бывших коллег проблема в том что там часть вьюх в phtml, а часть в xml. на мой вопрос почему нельзя гонять просто json и посадить на фронт нормальный js фреймворк был такой ответ: структура и ядро слабо под это подготовлены, сами разрабы вот вот только начали пилить такие фичи туда + у заказчика куплен готовый модуль для этой платформы который является краеугольным камнем во всей системе последнее также звучало объяснением для того почему они проект с симфы переписывают на магенто2 лол
881 1990473
>>1990454
Подожди минутку, я пропустил важный момент в твоем посте, а зачем ты вместо бд json файл используешь?
882 1990474
>>1990472
Ну значит у них точно такие же проблемы с .php. Я не вижу корреляции с конкретно .phtml.
А переписывать с симфони на магенто - это новости из параллельной вселенной просто.
883 1990475
Рассматриваю фриланс, как вариант получения опыта (бэкенд, пых). Но, не совсем понимаю. Какой тип заказов нужно выполнять? Я правильно понимаю, это сайты под ключ?
884 1990477
>>1990473
Мне не дают доступ к БД, да и там будет максимум 1000 товаров, можно и в файлике похранить
885 1990478
>>1990473
Это просто костыль в виде расширения
886 1990482
>>1990477
>>1990478
Тогда просто забей болт и сделай цикл. Но это мрачный пиздец конечно.
887 1990538
Аноны не могу разобраться, вывожу дату в таком виде date("dmY"), она выводит мне 08042021, что мне сюда дописать чтобы оно вывело вчерашнее число 07042021? Попробовал date("d-1mY") но сразу же соснул, как и с date("dmY") - strtotime('yesterday')
888 1990541
>>1990538
Снова сам отвечаю на свой вопрос date("dmY", strtotime('yesterday'))
889 1990568
>>1990474

>А переписывать с симфони на магенто - это новости из параллельной вселенной просто.


трустори, я не троль. как мне сказали проще было взять магенту с готовым модулем и перекинуть старый функционал туда, чем на симфонии пилить новый функционал тот что в том модуле есть
890 1990850
Аноны, не могу вдуплить как сортировать массивы по значению в многомерном массиве?

$array = array(
'0' => array(
'id' => '5',
'name' => 'Нариман',
),
'1' => array(
'id' => '10',
'name' => 'Виталик',
),
'2' => array(
'id' => '15',
'name' => 'Павлик',
)
);

Вот например как тут отсортировать массив по имени? sort() мне просто выдаёт true
891 1990851
>>1990850
Читай офф документацию, для функций, которые используешь. Вероятно тебе лучше подойдет array_multisort();
892 1990863
>>1990850
Лол по традиции отвечаю сам себе

function abu($a, $b){
return ($a['name'] < $b['name']);
}
usort($array, 'abu');
893 1990867
>>1990863
Аноны, а почему помещение функции во внутрь сортировки вызывает ошибку?

usort($array, function ($a, $b){
return ($a['name'] < $b['name']);
});

Это может быть из-за старой версии PHP? 5.2
894 1990907
>>1990472
А почему тогда везде в интернете написано, что магенто - это цмс?
895 1990999
>>1990907
Может потому что используют все ее как цмс, вообще фрэймворком назвать можно даже wordpress, если очень захотеть, а лара со всеми модулями и обмазками - почти готовая цмс сейчас. Вот только если называть говно шоколадом, вкуснее оно от этого не станет.
896 1991061
>>1990373
Много мест по паре месяцев не очень выглядит в глазах херки. То ли ты мешкаешься, то ли тебя выгоняют. Лучше это объединить в одну фирму, пусть и приврав
897 1991064
>>1990472

> гонять просто json и посадить на фронт нормальный js фреймворк



Я не понимаю, чем JSON и "нормальный фреймворк" лучше, чем рендерить шаблоны на сервере.

На сервере ты имеешь объекты вроде Product, Order, Category, ты можешь посмотреть, какие у них есть свойства и методы. К ним есть комментарии и документация.

На фронтенде ты имеешь никак не типизированный и не документированный JSON - просто помойка, свалка из случайных данных. Причем вполне возможно, что, например, одно API отдает одни данные о товаре, а другое - немного другие. Это же JSON-помойка без типизации.

По моему, первое лучше второго.
898 1991067
>>1990475
Соснешь хуйцов на фрилансе без опыта.
Будешь в лютом говне ковыряться типа цмсок и самописов. Нормального опыта не получишь
899 1991069
>>1990863

Неправильно. В документации написано, что функция сравнения должна вернуть -1, 0 или 1. У тебя она возвращает true либо false. Почитай про оператор <=> (spaceship) и переделай.
900 1991070
>>1991064

>Я не понимаю, чем JSON и "нормальный фреймворк" лучше, чем рендерить шаблоны на сервере.


Вчера ебался с багом как раз с рендером шаблонов на сервере.
Проблема была в том, что сервер не знает текущего состояния на фронте и тупа шлет новую верстку, жс и стили, которая ломает текущий жс функционал.
Был бы фронтенд фрейм - такой хуйни не было б
901 1991071
>>1990863

Хотя, если у тебя PHP 5.2, то оператора <=> там нету. Ну, тогда руками делай сравнения или используй функцию вроде strcmp.
902 1991075
>>1990867

>Это может быть из-за старой версии PHP? 5.2


Эту версию перестали поддерживать 10 лет назад. Задумайся, 10 лет. За эти 10 лет фронтенд перевернулся с ног на голову
903 1991091
>>1991064
Для тебя наверное лучше, если ты вкатыш или клепаешь магазины для ашотов. Если попадешь в нормальную продуктовую компанию - сам все поймешь довольно быстро.
Я боюсь представить, что с твоим мирком будет, когда c graphql или протобафом столкнешься.
904 1991092
>>1991075
Я понимаю, но админам похуй на это, я её поменять не могу, так почему ошибку выдаёт? Значит эта версия не поддерживает анонимные функции внутри системных функций?
905 1991094
>>1991069
>>1991071

>Неправильно


Но работает
906 1991095
>>1991094
Больше тесткейсов запусти и тогда сможешь утверждать, что работает
907 1991096
>>1991092

>я её поменять не могу


Зато можешь поменять работу
908 1991143
>>1958281 (OP)
аноны, учу laravel, возникла проблема скорее по js ну да и похуй - собираю через npm run dev в app.js весь жс. Проблема в том что все что я туда импортирую вне скрипта недоступно, а я хочу в onclick в html повесить медтод импортируемого класса. Как фиксить?
909 1991148
Vue используют, в связке с Laravel. А какой front end фреймворк используют в связке с
Symfony? Angular?
910 1991149
>>1991148

>Vue используют, в связке с Laravel


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

>А какой front end фреймворк используют в связке с


Symfony? Angular?
Любой
911 1991159
>>1991149
Понял спасибо
912 1991163
>>1991148
Vue чем то схож по назначению с ларой. Простой, дружелюбный, идеален для среднемелкого софта. Плюс легкий и приятный вкат, в отличии от того же ангуляра.
Ну и анон выше написал еще.
изображение.png35 Кб, 250x250
913 1991202
Пока сделал простую форму регистрации прошел через 100500 ошибок. У меня в плюсах столько ошибок не было.
914 1991258
>>1991163
А симфони пробывал? Если да. То как он тебе?
915 1991260
>>1991202
Изучение плюсов даёт преимущество... Долго, плюсы изучал кстати?
916 1991285
Посоны, проверяю наличие файла в каталоге функцией file_exists() и если его нет - то создаю его, у меня такая хуйня что когда размер файла доходит до 500кб или когда много запросов внезапно всё содержимое удаляется, это может быть из-за этой функции? Мои шерлокофантазии говорят мне что возможно в момент записи файла другим скриптом этот пытается проверить его наличие и получает отрицательный результат и в итоге создаёт новый затирая старый, может такое быть? Какую тогда функцию для проверки наличия файла использовать? Записываю файл с помощью file_put_contents("hui.json", $array, LOCK_EX)
917 1991302
>>1991285
Или это то о чём предупреждали выше? Что один поток перебивает другой, то есть пока 1 поток считывает содержимое файла, другой начинает запись и предыдущий получает данные не до конца? А как защить его во время считывания? В file_put_contents() есть метод LOCK_EX, а вот в file_get_contents() такого нет, или переписать всё на fopen() fwrite() fclose()?
918 1991323
>>1989050

>Как и в онлайн интерпретаторе


написать в обычном редактре кода и скопипастить туда?
919 1991359
>>1991258
Симфони - это про другое, больше про интерпртайз или чтото масштабное, мощный, гибкий, при этом сложный достаточно. Но на нем вцелом и зарплаты самые высокие в php. Doctrine - вообще отдельный каеф, очень похожа на Hibernate из java, при наличии прямых рук позволяет творить прям очень мощные штуки. Но как первый фрэймворк - имхо лара все таки лучше.
изображение.png7 Кб, 530x167
920 1991392
Как этот код работает? Почему отображаются все пользователи, а не только тот, что с индексом 0. It just works
921 1991434
Как можно предотвратить переполнение целых чисел? Если число больше чем PHP_INT_MAX или меньше чем PHP_INT_MIN оно преобразуется во float. Но если этот float преобразовать обратно в int через intval, то возвращается 0.
922 1991441
>>1991434
Есть ceil() для этого, если я правильно понял тебя. Кстати всместо intval() можешь использовать явное приведение (int)$val;
923 1991443
>>1991392
Ты при каждой итерации цикла перезаписываешь переменную $row и записываешь в нее результат из новой строки таблицы.
924 1991463
Добрый день, аноны. Что нужно, чтобы идти на мидла?
925 1991469
>>1991443
А строка меняется с какой стати?
926 1991510
>>1991285
>>1991302
Блин аноны происходит какая-то коллизия когда в массиве собирается от 1000 значений или много запросов одновременно, я не разобрался, в один момент файл в который всё сохраняется становится просто пустым, я так понимаю один из потоков просто не может записать файл или загрузить его до конца из-за прерывания другим потоком, интересно что это на самом деле и поможет ли замена file_get_contents file_put_contents на fopen fwrite fclose, сейчас уже просто нет сил всё переписать чтобы проверить, всё происходит рандомно через несколько минут или часов
927 1991654
Посоны, короче проблема повторяется раз за разом, я храню в файле массив из просмотренных товаров, каждый раз при вызове скрипта он подгружается, обрабатывается, изменяется или дополняется и снова записывается

Я правильно понимаю что из-за нескольких потоков происходит то что во время считывания один из потоков начинает запись обработанного файла и предыдущий поток не дочитав файл до конца теряет его часть и в иторе происходит ошибка и он сохраняет только тот товар при просмотре которого он был вызван и затирает собой старый файл с 1000 товаров записю с 1 текущим просмотренным товаром?

Выход из этого проверять перед загрузкой размер файла и проверять его после окончания загрузки? И если он меньше то скачивать его снова? А может быть что во время проверки размера файла он тоже попадёт на момент записи другим потоком и считает не тот размер что должен был быть?

Или я так понял ещё вариант это при записи сохранять файл под другим названием и в конце записи просто переименовывать его в то название что должно быть? И в таком случае другой поток во время считывания прочитает файл до конца хоть он уже и будет заменён путём смены имени? Верно?

Ну или какие ещё способы обхода этого есть? Могу только сохранять в файл, БД нету, размер его получается при 1000 товарах около 250кб, и походу этого размера хватает чтобы один из потоков не успел его скачать до конца как другой поток начинает его затирать записью в него

>>1991510-хуй
928 1991708
>>1991654
Или может файл открыть с помощью fopen, блокировать, читать, разблокировать, закрывать, потом обрабатывать, опять открывать fopen, блокировать, записывать, разблокиивать и закрывать? Так получится избежать коллизий с перезаписями друг-друга?

И что будет делать другой поток если ему встретится блокировка другим файлом? Он будет ждать или выдаст ошибку и прекратит работу?
929 1992112
>>1991143

По идее ты из своих скриптов должен ставить обработчик. Также, как костыль, можно сделать функцию публичной с помощью window.x = function(){}

>>1991148

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

>>1991285

Блокировки в PHP добровольные (я писал выше), то есть LOCK_EX действует только на операции, которые используют блокировку (через LOCK_EX или fcntl). Например, если ты читаешь заблокированный файл через file_get_contents без блокировки, то поставленная блокировка игнорируется и читается не записанный полностью файл.
930 1992122
>>1991285

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

Смотри мануал по функции flock(). Она как раз позволяет проверять наличие блокировки.

>>1991392

Потому что там цикл while, который выполняется много раз. Также, почитай мануал по mysqli_fetch_row, ты явно не понял, как она работает.

>>1991434

У int чисел есть ограничение на макс/мин. Ты не можешь преобразовать в int число, которое выходит за пределы допустимого диапазона. Потому что под int выделено ровно 4 (в 32-битных) или 8 байт (в 64-битных системах) и в них нельзя впихнуть произвольно большое число.

Если провести аналогии, представь, что у тебя на листке в клеточку выделено 4 клеточки, и в каждую можно запихнуть только одну цифру. Ты не сможешь так записать число больше, чем 9999.

Потому число преобразуется в float, возможно с потерей точности (то есть может немного отличаться от правильного числа).

Чтобы работать точно с произвольно большими числами, используй расширения bcmath или GMP. Они хранят число в виде строки.
931 1992128
>>1991443
Ну так я ее перезаписываю одним и тем же значением. Ты поясни нормально.
И почему в условии цикла присваивание блядь? Как это обрабатывается, истинность чего проверяется циклом? И вообще цикл должен быть бесконечным или вообще не выполнится, так как ни $row, ни значение функции не меняется в теле цикла.
932 1992145
>>1991654

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



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

> Или я так понял ещё вариант это при записи сохранять файл под другим названием и в конце записи просто переименовывать его в то название что должно быть?



Это работающий вариант.

> И в таком случае другой поток во время считывания прочитает файл до конца хоть он уже и будет заменён путём смены имени? Верно?



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

> Могу только сохранять в файл, БД нету



Вообще, есть встраиваемая БД SQlite, она работает с файлами и она умеет делать блокировки при чтении и записи. БД решает проблему блокировок за тебя.

>>1991708

> Или может файл открыть с помощью fopen, блокировать



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

Процесс 1 открывает файл на чтение
Процесс 2 открывает файл на запись и этим обнуляет его
Процесс 1 успешно берет блокировку LOCK_SH
Процесс 2 пытается взять блокировку LOCK_EX и ждет снятия блокировки первым процессом
Процесс 1 читает обнуленный файл

Хотя я на 100% не уверен. Возможно, открытие файла (fopen) на запись не обнуляет его содержимое, а файл обнуляется только при попытке что-то записать (fwrite). Тогда все будет работать как надо. Можешь проверить это экспериментально, сделай скрипт, который просто открывает файл на запись (fopen с 'w') и закрывает его и проверь: обнулится ли открытый файл или нет.

> И что будет делать другой поток если ему встретится блокировка другим файлом? Он будет ждать или выдаст ошибку и прекратит работу?



Если поток попытается взять блокировку на заблокированный файл, то он остановится и будет ждать снятия блокировки. А если он не пытается взять блокировку, а просто делает file_get_contents или fwrite, то операция выполняется, игнорируя блокировку. Так как блокировки в PHP добровольные, а не принудительные.
932 1992145
>>1991654

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



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

> Или я так понял ещё вариант это при записи сохранять файл под другим названием и в конце записи просто переименовывать его в то название что должно быть?



Это работающий вариант.

> И в таком случае другой поток во время считывания прочитает файл до конца хоть он уже и будет заменён путём смены имени? Верно?



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

> Могу только сохранять в файл, БД нету



Вообще, есть встраиваемая БД SQlite, она работает с файлами и она умеет делать блокировки при чтении и записи. БД решает проблему блокировок за тебя.

>>1991708

> Или может файл открыть с помощью fopen, блокировать



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

Процесс 1 открывает файл на чтение
Процесс 2 открывает файл на запись и этим обнуляет его
Процесс 1 успешно берет блокировку LOCK_SH
Процесс 2 пытается взять блокировку LOCK_EX и ждет снятия блокировки первым процессом
Процесс 1 читает обнуленный файл

Хотя я на 100% не уверен. Возможно, открытие файла (fopen) на запись не обнуляет его содержимое, а файл обнуляется только при попытке что-то записать (fwrite). Тогда все будет работать как надо. Можешь проверить это экспериментально, сделай скрипт, который просто открывает файл на запись (fopen с 'w') и закрывает его и проверь: обнулится ли открытый файл или нет.

> И что будет делать другой поток если ему встретится блокировка другим файлом? Он будет ждать или выдаст ошибку и прекратит работу?



Если поток попытается взять блокировку на заблокированный файл, то он остановится и будет ждать снятия блокировки. А если он не пытается взять блокировку, а просто делает file_get_contents или fwrite, то операция выполняется, игнорируя блокировку. Так как блокировки в PHP добровольные, а не принудительные.
933 1992150
>>1992128

Выражение вида while ($x = func()) работает так:

- выполняется $x = func()
- проверяется: если $x равен null, 0, "", "0", [] (лживенькие значения, false values) то условие считается не выполненным, иначе условие считается успешно выполненным и цикл продолжается.

Аналогично работает конструкция вроде while($x) или if ($x): если в $x лживенькое значение, то условие не выполнено, а если что-то другое (например: не пустой массив) то условие успешно выполнено.
934 1992152
>>1992128

Выражение $row = mysqli_fetch... выполняется перед каждой итерацией цикла.
935 1992155
>>1992128

То есть, присваивание выполняется перед каждым шагом цикла и результат этого присваивания преобразуется в boolean тип как описано в мануале: https://www.php.net/manual/ru/language.types.boolean.php#language.types.boolean.casting

Если после преобразования получилось false, то условие не выполнилось. Если true, то выполнилось.

Это то же самое, что я написал выше, только со ссылкой на официальный мануал.
936 1992161
>>1992150
>>1992152
Понятно
937 1992173

>Выбирает одну строку данных из результирующего набора и возвращает её в виде массива, в котором индексы элементов соответствуют номерам столбцов (начиная с 0). Каждый последующий вызов функции будет возвращать массив с данными следующей строки набора или null, если строки закончились.



Так уже яснее стало. Перечитывание документации помогает.
938 1992256
>>1982834
бамп
939 1992376
Ну что же вы аноны, вам в кои-то веки предлагают задачку не за бесплатно, а за деньги, решить.
940 1992422
>>1992145
Спасибо анон пока решил проблему с переименованием, вроде всё работает, хотя в временной папке появились пустые файлы которые не удаляются, сдаётся мне где-то проскакивает ошибка даже во время переименования которая ломает сам php что он оставляет нулевые файлы, завтра попробую их удалить ещё раз может какой-то кеш их защищает, а так да придётся склайт освоить, есть какой-то хороший русский гайд с простейшими примерами без ООП? Быстрый поиск выдал какие-то куски информации
941 1992441
>>1991143
добавить листенер в app.js который в ресурсах
942 1992809
Нормальная практика использовать Inheritance Mapping в Доктрине для хранения изображений для разных сущностей? Просто странно немного создавать пять пустых классов, которые просто будут наследовать Image.
943 1992825
>>1958281 (OP)

Простите за тупняк, но дайте, пожалуйста, годную книгу или онлайн-ресурс.
944 1992914
Посоветуйте, для какого сайта парсер написать можно, чтобы было полезно. Какой-нибудь контент собрать. Я уже написал себе один, но там домен .onion и незаконные вещи. Хочу для портфолио что-то в ГитХаб добавить (на Хекслете еще обучаюсь, оттуда проекты тоже есть там, но хочу еще своё что-то сделать).

Для Двача уже есть такое ? Допустим, чтобы можно было все картинки/видео с треда скачать или с раздела (единственное, я хз, как это к браузеру прикрутить в виде расширения, я во фронте не бум-бум, поэтому буду просто скрипт на Убунте пилить).

Еще думаю, мб классификатор написать, чтобы собранный контент по папкам сам распределялся. У Яндекса или Гугла же сервисы для этого должны быть ?* Правда эт уже сложновато будет, но можно попробовать.
image.png89 Кб, 1100x944
945 1992952
>>1982834
короче я заебался ждать от вас каких-либо контактов. с предложениями пишите в телегу @mrzpdr

Если коротко, то нужна йоба, которая построчно будет подставлять данные из таблицы (exсel, csv) в документы, готовые к печати (пдф). то есть на входе табличка с данными, на выходе - пак документов с подставленными данными количество документов соответствует количеству строк.

учтите пацаны, если я начну в итоге делать это сам, то я вас заебу вопросами. подумайте
Screenshot20210412122410.png72 Кб, 1787x714
946 1993589
Ебушки воробушки, миллион лет ждал эту хуйню! Теперь прям как в котлине. Пых прям последнее время активно развивается.

Если когда-нибудь добавят дженерики и алгоритмическую либу под них, пых станет ультра-имбой и начнет теснить даже яву и си шарп на их поле.
947 1993590
>>1992952
20 баксов на апворке
948 1993673
>>1993589

>Ебушки воробушки, миллион лет ждал эту хуйню!


Вот это двачую конечно, хотя восьмерка как мажорный релиз всё равно хуйня унылая.

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


А это к сожалению нет. Современный пых уже давно далеко не похож на тот, каким он был в нулевых. Вот только видишь ли ты изменение его репутации с того времени хоть чуточку в лучшую сторону? Я не вижу.
По-моему, единственной надеждой на спасение этого языка ну или последним гвоздем в крышку гроба, что не сильно хуже был P++, да только все интерналсы проголосовали против, включая автора RFC. Попахивает заговором
949 1993708
>>1992422

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

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

>>1993589

А мне не нравится. Это провоцирует написание кривого кода, где любая переменная может быть пустой из-за того, что корректно не проверяются ошибки. Вместо того, чтобы проверять ошибки, будут лепить эти null-safe операторы и в коде невозможно будет разобраться.
950 1993770
>>1992809
Зависит от контента.
Если у тебя они ничем не отличаются я бы их держал в одном классе, типа PublicImage.
951 1993836
>>1993708

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


Странная претензия чот. ТО есть if (!_is_null(huinya)) {} не провоцирует? По такой логике, все кроме простейших конструкций провоцирует.
Просто сахар для сокращения и удобочитаемости же.
952 1993890
>>1993770
Они отличаются только классом, с которым у них отношение, ну и видом отношений ( One-To-One или One-To-Many ).
И как ты предлагаешь это реализовать в одном классе с доктриной? Будет допустим таблица, в ней поля url и imageable_id. Ну допустим даже накостылил бы я поле "imageable_class" и буду вручную его задавать.
Доктрина ж никак не поймет что при обращении к $post->images нужно искать в таблице images записи, где imageable_class = App\Entity\Post. Лучше уж тогда просто inheritance mapping использовать.
953 1993975
>>1993890
У тебя есть класс Image, он замаплен на таблицу images, а в нужной сущности есть поле Image/Images и связь с таблицей images по айди, ну либо таблица связей. Зачем тебе разные классы тут я не понимаю.
954 1994035
>>1958281 (OP)
Пацы, у кого есть опыт собесов по скайпу? Меня прогоняли по тому, что было на прошлой работе, что знаю, что использовал и всё такое и назначили собес по скайпу. Как это происходит, будем мило болтать с тимлидом за чашечкой кофе, задачи через share-screen, гонять по теории или что? Как у вас было?
955 1994119
Анончики, вопрос.

Есть данные, сохранененные в сессию, стоит session.gc_maxlifetime ебовый и лайфтам сессионной куки ебовый, около недели. Данные из сессии выводятся на форму. Вижу, что PHPSESSID в куке остается тем же, но данные на форме через некоторое (рандомное) время исчезают. В какую сторону копать?
956 1994201
>>1993890

>Доктрина ж никак не поймет что при обращении к $post->images нужно искать в таблице images записи, где imageable_class = App\Entity\Post.


Нихуя не понял, что ты делаешь. У самого примерно такая же структура, все заебись ищет. Из сущности делаешь запрос ->getImage() и всё ок. Там же по id связь.
957 1994416
laravel
958 1994448
>>1993590
Вот и возьмись за 20 баксов.
Пиздеть - не мешки ворочать. Тут больше будет.
959 1994510
>>1994035
По опыту моих нескольких собесов:
- будут херочка и кто-то из менеджеров спрашивать базовые вещи и с чем работал, что писал, могут попросить примеры кода.
- будет тимлид или ЧСВшный синьор-помидор, будет спрашивать и качать головой типа какой ты убогий. Спрашивать будет примерно ту же хуйню что и верхние, пояснять почему ты убогий тоже не будет - он сам не знает и делает это чтоб продавить тебя по зарплате.
- будут левые пацаны, которые замутили бизнес на коленке и пока сами ещё не знают что спрашивать. Ждать можно что угодно - от нормальных вопросов, до в стиле "почему крышки люка круглые?"
960 1994511
>>1994035
И самое главное - собес не означает трудоустройство. Будь на похуе и даже не думай волноваться - это просто досужий пиздёжь, по большому счёту. Как пройдёшь с десяток таких, то сам поймёшь.
961 1994514
>>1994511
>>1994510
Спасибо большое, анон! У меня очень слабые нервы. После съёба со старого места работы всегда несколько месяцев отдыхаю чтоб нервы восстановить. Мне всё равно сейчас, попаду я на эту должность или нет, но страх обосраться никак не исчезает.
962 1994517
>>1994514

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


Скорее всего нет - первый собес почти всегда провальный. Посмотришь просто, что ничего особенного.
963 1994520
>>1994517
В том то и дело, что собес не первый, я до этого несколько раз обосрался ну и несколько раз прошёл, поработав по стеку год, а страх так никуда и не девается. Видимо, пора к психиатру.
964 1994528
>>1994520
Видимо недостаточно собесов было.
После пары десятков собесов в основном провальных уже на похуях прохожу или не прохожу.
Начал относится к собесам как к игре. Планирую, на что и как отвечать, какие вопросы задать, как себя повести.
965 1994535
>>1958338
хуервый
966 1994729
>>1993975

>ну либо таблица связей.


Точно, почитал доку, вспомнил что можно городить One-To-Many-Unidirectional связь через костыль как Many-To-Many с уникальными id изображений в промежуточной таблице.
Но как-то муторно это. С inheritance-mapping то же самое в два клика делается, еще и красиво это всё по-моему, в одной таблице концентрируется, а не по всей базе размазано.
Но я так понимаю, на практике все делается предложенным тобой способом.
967 1994737
Нужно перекатиться с Java + Spring на PHP + Laravel, какие подводные и насколько тяжело будет освоиться?
968 1994776
>>1994737
Лара это вообще почти как CMS считай. Можешь столкнуться с болью, пытаясь применять нормальные паттерны и практики в среде ебанутых антипаттернов ларки и таких же ебанутых кодеров на ней.
у меня такая детская травма присутствует
Если уж к тебе во сне пришел Иисус и сказал что нужно стать пыхарем или ты умрешь через год, то может все таки Симфони? Зайдешь как по маслу: те же концепции, те же аннотации с теми же названиями и параметрами, те же принципы и т.д.
Хотя, лучше всего выбей дурь из головы и уходи из треда. Если начальство вынуждает или еще кто-то, шли их нахуй.
969 1994805
>>1994776
Да, на РАБоте попросили поРАБотать в проекте на Ларе, потому что им типа разработчиков не хватает :(
970 1994871
>>1994805
Два чаю этому >>1994776 господину.
Если проект позволяет, можешь хотябы прикрутить на лару Doctrine, она больше похожа на Hibernate. Но от некоторых подходов лары, после спринга у тебя все равно шары на лоб полезут.
971 1994896
>>1994805
Лол, а говорят рынок перегрет, хуе мое, требования космические, специалистов имея в виду не вкатывальщиков с курсов, конечно, их то достаточно в тыщу раз больше чем вакансий и прочее.
Хуй там правда, джуна на лару найти не могут.
972 1994954
>>1994896
Это как раз нехороший знак, что спеца с норм стека пересаживают на стек похуже. Сначала ухудшаются условия работы, а следом пойдут снижения зп и сужение рынка вплоть до битриксов
973 1994965
>>1994954
Ну с битриксами ты конечно загнул. Уже даже в провинциях понемногу переходят на что то более вменяемое, это говно могло расти только в условиях тотальной безграмотности кабанчиков.
974 1995132
>>1994896

>джуна на лару найти не могут


Не "не могут", а "не хотят". У некоторых контор требования как к иному мидлу не прёдъявляют. Меня лично какой-то важный и опытный опущ спрашивал про опыт с высокими нагрузками, когда я к ним на джуна шёл. Порой пишут стек 100% твой, и даже предлагают типа "мы научим и покажем как и куда, только хотя бы азы знай и куда там эту sql-строку пихать", пишешь им - "сам знаю куда строку пихать, писал то-то и то-то, вот вам пример моей работы, вот исходники - смотрите, буду радостно развиваться и даже денег много просить не хочу" и тишина блядь. У других висит вакансия - нужен разработчик, пишите на мыло. Стек мой - пишу, что умею, пруфы даю и тоже, сука, мороз.
Со всей этой индустрией что-то сильно не так.
975 1995143
>>1995132
Уже мысли с лары на битрикс\вордпресс перекатываться т.к. там кабанчики в личку регулярно пишут с предложениями. Давно бы перекатился, да не нравится мне там код и подходы.
976 1995157
>>1995132
Что за "твой стек" такой, мне прям интересно стало. И какие пруфы того что умеешь ты отсылаешь, что тебя везде морозят?
977 1995168
>>1995157

>Что за "твой стек" такой


Лара\Октобер + Вью\Бутстрап.

>какие пруфы того что умеешь ты отсылаешь


Есть несколько рабочих сайтов, на гитхабе пара апишек на Люмен.
Что ещё им надо от джуна?
978 1995180
>>1995168
Ну вообще звучит норм, может быть код очень корявый? Гит, sql, сервера указано в резюме?
979 1995190
>>1995180

>Гит, sql, сервера


Я сперва написал всё, что пробовал и игрался, но писали не очень активно. Сократил до 10 именований где-то совет увидел - стали писать активнее, но всё какое-то левое.
А так конечно - гит даже на своих проектах юзаю гениальная штука, sql умею, но всё больше на ОРМ последнее время, сервера - апач, нжинкс. SSH, Ubuntu server норм знаю - на ноуте игрался полгода с ней ещё до вката в ПХП.
Хз что не им так. На собеседованиях не матерюсь и мамок не ебу. Может стоит начать?
980 1995203
>>1995190
Без понятия чесно говоря почему так. У нас приходили джуны, незнакомые с ООП практически даже, зато с миксом разной херни на гитхабе, брали на испытательный, один из двух выреб даже, второй по учебе слился. Единственное может скажу, не бойся писать в крупные галеры, даже если стек не совсем подходит а то вдруг стесняешься и пишешь откровенным васянам в студии онли. Ну и на гитхаб что нибудь по алгоритмам например залей для солидности, а не онли бложики на ларе.
981 1995210
>>1995203

>У нас приходили джуны, незнакомые с ООП практически даже


Вот и я в ахуе от ситуации. Может это из-за того, что на удалёнку лезу?
Попробую алгоритмов в гитхаб накидать - не проблема.
982 1995343
Такой вопрос ньюфажный. Так или иначе, сейчас почти весь современный веб на реактивных фреймворках. И хоть тут бывает начинаются холивары о том что они не нужны и twig с jQuery удобнее, но против тенденций не попрешь.
Так вот, изучаю тут Симфони, уже убедился что Symfony Forms воистину очень крутая и мощная вещь. Но... Как эти формы вообще комбинируют с фронтендом на каком-нибудь Vue?
Упустим простые примеры, рассмотрим более-менее сложную форму с CollectionType'ами, несколькими уровнями вложенности сущностей и т.д.
Вот я ее прописал на бэкенде, отправил в twig, в шаблоне написал {{ form(form) }} и все, у меня все готово.
Ладно, на самом деле нет, надо еще прототипы вывести и на jQuery с их помощью сделать кнопочки удаления и добавления элементов в коллекцию. Но всё равно работы на 5 минут.
А что люди делают если весь рендеринг на джаваскрипте? В доке этому, блин, ни слова не уделено.
Ввел в гугл "symfony forms vue", что-то мне увиденное не понравилось.
В основном советуют выводить по api на фронт уже отрендеренную на бэкэнде форму. Как-то не очень это, фронтовик получается никакой власти над этой формой не имеет, на каждый пук приходится в php лезть. А в таких случаях это ведь два разных проекта.
Еще и, получается, все вокруг на фронте реактивно и завязано на объектах, а добавление/удаление элементов в форме внезапно осуществляется старым дедовским способом через прямую работу с DOM-деревом, лол.
Еще прочитал статью от чела который тонну костылей на бэкэнде нагородил, чтобы отдавать эту форму в виде адекватного JSON, и еще тонну костылей на фронте, чтобы слепить с этого JSON форму во вью компоненте.
Похвально конечно, но я уверен что больше никто таким не занимается.
Пока что мне таки кажется, что самым нормальным решением в таком случае будет лепить такую форму на фронтенде с нуля. Хотя подводные камни есть, и времени это тоже много займет. Такого кстати совета я в интернете не встретил.

Так вот, мудрые аноны, у вас на реальных проектах были такие проблемы? Как решали?
982 1995343
Такой вопрос ньюфажный. Так или иначе, сейчас почти весь современный веб на реактивных фреймворках. И хоть тут бывает начинаются холивары о том что они не нужны и twig с jQuery удобнее, но против тенденций не попрешь.
Так вот, изучаю тут Симфони, уже убедился что Symfony Forms воистину очень крутая и мощная вещь. Но... Как эти формы вообще комбинируют с фронтендом на каком-нибудь Vue?
Упустим простые примеры, рассмотрим более-менее сложную форму с CollectionType'ами, несколькими уровнями вложенности сущностей и т.д.
Вот я ее прописал на бэкенде, отправил в twig, в шаблоне написал {{ form(form) }} и все, у меня все готово.
Ладно, на самом деле нет, надо еще прототипы вывести и на jQuery с их помощью сделать кнопочки удаления и добавления элементов в коллекцию. Но всё равно работы на 5 минут.
А что люди делают если весь рендеринг на джаваскрипте? В доке этому, блин, ни слова не уделено.
Ввел в гугл "symfony forms vue", что-то мне увиденное не понравилось.
В основном советуют выводить по api на фронт уже отрендеренную на бэкэнде форму. Как-то не очень это, фронтовик получается никакой власти над этой формой не имеет, на каждый пук приходится в php лезть. А в таких случаях это ведь два разных проекта.
Еще и, получается, все вокруг на фронте реактивно и завязано на объектах, а добавление/удаление элементов в форме внезапно осуществляется старым дедовским способом через прямую работу с DOM-деревом, лол.
Еще прочитал статью от чела который тонну костылей на бэкэнде нагородил, чтобы отдавать эту форму в виде адекватного JSON, и еще тонну костылей на фронте, чтобы слепить с этого JSON форму во вью компоненте.
Похвально конечно, но я уверен что больше никто таким не занимается.
Пока что мне таки кажется, что самым нормальным решением в таком случае будет лепить такую форму на фронтенде с нуля. Хотя подводные камни есть, и времени это тоже много займет. Такого кстати совета я в интернете не встретил.

Так вот, мудрые аноны, у вас на реальных проектах были такие проблемы? Как решали?
983 1995419
>>1995343

>twig с jQuery удобнее, но против тенденций не попрешь


Нет никаких тенденций - есть бюджеты и требования к проекту. Пилить полноценные микросервисы нет никакого смысла для простых сайтов без сложного взаимодействия на клиенте. Тот же двоч - без фронтенд-фреймворков работает, если ты не заметил, как и подавляющее большинство интернета.
По моим наблюдениям есть некоторый избыток фронтенд-разработчиков уже - общался с некоторыми начинающими студиями и вот там всегда есть фронтенд, а то и не один, уже со старта, при отстутсвии всех остальных.
984 1995503
>>1995419
Ок, бумер.
985 1995544
>>1995419

> По моим наблюдениям есть некоторый избыток фронтенд-разработчиков уже



Зарплатные вилки фронтендеров чот не согласны с твоми наблюдениями. На ангуляр уже мидлов на 150+ ищут. Джунов-вкатунов везде много, да.
986 1995595
>>1995190
Мб у тебя с софтами плохо? Не показываешь заинтересованности в проекте?
987 1995611
Как задачу Лиличку пофиксить? ЯННП.

https://ideone.com/R4h2tY
988 1995623
>>1995544

>Зарплатные вилки


Потому, что нужны только в больших конторах, а у тех деньги есть. А в мелких студиях больше мешают со своим Vue - мне предлагали микросайты за 5к на этом Вью пилить, в другом месте "фронтенд-разработчик" себе отдельно верстальщика требовал, потому, что не умел верстать - он дескать погроммист у мамы, и не для того его роза цвела. Кстати частое являние у макак.
Если же рассматривать фронтенд-разработчика как универсала, которому можно отдать клинетскую разработку в любом виде, то да - везде нужны и цены будут расти.
989 1995648
>>1995623

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


Ну это охуевший в край бездарь просто. Странно что держат вообще.
Везде, где я знаю фронта за такие заявления выкинули на мороз бы сразу.
sage 990 1995655
>>1995168
>>1995190
Довольно средний стек средненького кодера :) Извини, но чтобы доказать компаниям, что ты достоин рабочего места, нужно нечто большее, чем быть просто средненьким специалистом :)
HR-тян
991 1995664
Аноны, васяню приложуху за деньги лол, короче суть такова что архитектура у меня чет не получается.
Не очень пойму как по сервисам раскидывать нужно.
Если просто - есть у меня в контроллере ( понятно что бизнес-логика не в контроллере, а в каком нибудь классе который в общем описывает то что должно твориться по этому роуту ) нужно вызывать "сервис" генерации отчета exel.
Суть в том что этот сервис у меня из разных контролеров может вызываться.
Сам сервис в каталогк "сервисы" сидит.
Но чето у меня оч высокая и кривая связность всего этого.

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

хуй знает че я вообзе спросил, лол
992 1995668
>>1995343

>Как эти формы вообще комбинируют с фронтендом на каком-нибудь Vue?


Я с Symfony не знаком, но скорее всего никак. Разве что оставляют валидацию входящего запроса. UI отрисовывается полностью на фронте.

>В основном советуют выводить по api на фронт уже отрендеренную на бэкэнде форму


Мне приходилось быть по обе стороны баррикад, и я делал и бэк, и фронт, и с точки зрения фронтера могу сказать, что за такое надо по рукам бить.

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


Только вот какой вообще в этом смысл? Единственное применение этому, которое я вижу, это если у тебя какая-то охуенно сложная динамическая форма, состав полей которых фронтеру заранее неизвестен. Но такое редко случается.
993 1995681
>>1995419

>Нет никаких тенденций - есть бюджеты и требования к проекту.


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

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


Подавляющее большинство интернета - это магазины на CMSках. А я написал "почти весь современный веб".
>>1995668
И я о том же самом
994 1995792
>>1995648

>Странно что держат вообще.


А они по-корешам с организатором вроде как были. Когда он мне начал диктовать - на чём апишку и админку делать, то был послан в пешее. Но было забавно смотреть как он пытался завязать на себя разработку, ничего не умея по-сути и всё дико усложняя, только чтобы ему таски перепадали. У них так и не вышло ничего вроде как. Я, наверное, про таких и писал в посте - пиздос у меня тогда от него пригорело.
Но таких уебанов и потом ещё встречал и всегда были без работы.
995 1996193
>>1994729

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

>>1995210

В гитхабе не забудь про РИДМИ с картинками и поясняющим текстом. Рекрутеру шлют по 100 гитхабов в сутки, ему некогда там в твоем коде самому выискивать подробности.

>>1995343

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

Минус в том, что надо писать преобразователь формы в JSON (со всеми подробностями) + на клиенте надо писать построитель формы из JSON. Плюс в том, что если форм много, то тебе не надо будет их делать руками.

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

Есть и другие варианты. Отказаться от форм и использовать Symfony Validator, который может валидировать произвольный объект по правилам в аннотациях. Данные, пришедшие аяксом, с помощью какого-нибудь Serializer преобразовывать в объект, и валидировать его. Но я не уверен, что делать, если при валидации надо обратиться к какому-то сервису из контейнера.

Так или иначе, если форм много, то нужен будет какой-то построитель, либо на основе Symfony, либо на JS фреймворке. Иначе нарушится принцип DRY.

> Похвально конечно, но я уверен что больше никто таким не занимается.



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

Ну и по моему, "реактивный" фронтенд мало где реально нужен. В какой-нибудь админке (а где еще бывает куча форм?) он даром не нужен.
996 1996213
>>1995611

Если ты хочешь взять, например, букву номер 20, но в строке всего 10 букв, надо выводить пробел вместо нее. А ты ничего не выводишь, и от этого строки съезжают влево.

Также, не забудь убрать из кода магические числа вроде $i < 33.

>>1995664

В сервисы помещается бизнес-логика. То есть, действия, для выполнения которых написано твое приложение, но без взаимодействия с пользователем. То есть в сервис мы не передаем POST, GET (или их заменитель Request), не генерируем там HTML-страницу.

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

Сервис может использовать другие сервисы (обычно через dependency injection). Ну например, если для генерации отчета надо получить какие-то данные, он может обратиться к другому сервису.

> а в каком нибудь классе который в общем описывает то что должно твориться по этому роуту



Сервис ничего не должен знать о роутах, это забота контроллера.

> Но чето у меня оч высокая и кривая связность всего этого.



В чем это проявляется? Не очень понятно.
997 1996219
>>1995668

> Разве что оставляют валидацию входящего запроса. UI отрисовывается полностью на фронте.



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

> Только вот какой вообще в этом смысл?


Смысл в том, что ты описываешь форму один раз на сервере и не пишешь руками однотипный HTML для каждой новой формы.
998 1996240
>>1996219

>Это плохой подход, если форм много,


Это плохой подход для твоих микропроектов, которые полтора васяна-оркестра лепят, не проецируй его на всю индустрию плз.

>Смысл в том, что ты описываешь форму один раз на сервере и не пишешь руками однотипный HTML для каждой новой формы.


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

Я искренне непонимай, откуда вы блядь лезете постоянно такие пещерные? Из 2005го?
999 1996252
>>1996193
Спасибо за развернутый ответ)

>Не надо смотреть, кто чем занимается.


Не могу, у меня культ лучших практик головного мозга.
1000 1996261
>>1996240

>проецируй его на всю индустрию


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

>плз


Зумер, спок.
1001 1996272
>>1996252

>Не могу, у меня культ лучших практик головного мозга.


Тогда лучше закрой этот тред навсегда. Тут такие best practices советуют каждый день, что понять где жирнота, а где необучаемость тяжело.
>>1996261
Где ты видел фулстак-макакенов, кроме веб студий сейчас? Или вебстудии у нас на острие индустрии для тебя? Разделение фронтенда и бэкенда произошло еще в начале десятых, а ты неможешь этого принять и живешь в манямирке, еще и сюда свою шизофазию постишь. Не хочешь учиться и развиваться - смирись и оставайся на обочине, это айти 2020х, дедушка.
1002 1996274
Что скажете за использование Vue не для SPA?
Например, там, кнопку лайка на нем сделать, добавления в избранное, прогрузку комментариев и т.д.
Вью вроде как намного меньше весит чем тот же jQuery, легко интегрируется в проект на Симфони и Ларе. Прикольная концепция хранения скриптов и стилей в одном файле с компонентом.
Читать и расширять vue-компонент намного легче, чем лапшу на jQuery. Могу тут до бесконечности продолжать, но это всё лишь мои фантазии, а мне интересно ваше мнение послушать.
Покрывает ли Vue достаточное количество случаев, чтобы использовать его вместо jQuery? Видели ли где-то такое на проде?
1003 1996283
>>1993590
хуйня вопрос, оставляй контакты.

>>1994448

>больше


а больше это сколько, няша?
1004 1996290
>>1996219

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


Так это вообще можно сказать про любой запрос к API, лол. Добавилось/поменялось какое-то новое поле в ответе — надо лезть во фронт и менять его логику. Только плюсов реактивного SPA это не перекрывает. И тебя как бэкендера вообще не должно волновать, чо там на фронте, даёшь им документацию к API на каком-нибудь Swagger и пусть там ебутся как хотят :)
1005 1996293
>>1996274
Звучит как какой-то костыль. Если у тебя сложный фронт и тебе уже не хватает JQuery, то стоит задуматься, чтобы сделать полноценный фронт на SPA-фреймворке.
1006 1996297
>>1996240

Ты пишешь какую-то ерунду. Чтобы провалидировать форму, мы создаем ее описание на стороне сервера. Дальше, нам надо отобразить ее на клиенте. Это можно сделать двумя способами: а) получить с сервера описание формы (которое там уже есть) или б) повторно описать форму руками на стороне клиента. Вариант б) предполагает двойную работу, и требует обновлять обе версии формы (на сервере и на клиенте) при изменениях, в то время как вариант а) не требует что-то менять на клиенте.

При чем тут какие-то "мои" "микропроекты" и какие-то мифические "best practices", я не понял.
1007 1996313
>>1996274

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

Подгрузка комментариев с сервера на jQuery займет строк 20, и это с обработкой ошибок (а делают ли правильно обработку ошибок все, кто тут советует везде пихать SPA? Уверен, что нет, ведь в best practices об этом забыли написать).

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

>>1996290

Если где-то так делают, это не значит, что это правильно. Когда форм много, гораздо разумнее настроить автоматическое отображение форм на основе конфигурации с сервера (кстати, ее логично не запрашивать аяксом, а вшить в фронтенд-приложение).
1008 1996326
Пасаны, вот я хочу проверить если ли слово в строке с помощью strstr(), а как проверить несколько слов без запуска цикла? Есть функция в которую можно передать строку и проверить в ней наличие нескольких слов? Здесь подойдёт только preg_match()?
1009 1996360
>>1995132
у меня была обратная история: 3 месяца я не писал ничего, кроме дешевых парсеров с досок объявлений.

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

Я спросил - "А чего так, неужто я так хорош". Сказали, мидлы слишком дороги, я в самый раз. Полгода охуевал с симфони
1010 1996362
>>1996313

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


В этом параграфе написан полный бред.

>Вью нужен там, где есть сложный интерактивный фронтенд


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

>или там, где нужно сделать что-то похожее на приложение


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

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


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

>усложняет разработку


Усложняет разработку только на начальном этапе, потому что тебе придётся учить новую технологию. Как только освоишься, то ничего оно не усложняет, наоборот, поддерживать и разрабатывать SPA намного проще, чем лапшу на JQuery, потому что там есть устоявшаяся архитектура, паттерны и best practices.

>утяжеляет фронтенд, замедляет рендеринг сайта


Ты упускаешь охуенно важную деталь: это актуально только при первой загрузке приложения либо при выпуске обновления. Если у тебя на серваке нормально настроено кэширование или если ты используешь service worker, то при дальнейших загрузках приложение будет загружаться очень быстро. Также есть разбиение приложения на чанки и ленивая подгрузка модулей, а ещё есть SSR.
1010 1996362
>>1996313

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


В этом параграфе написан полный бред.

>Вью нужен там, где есть сложный интерактивный фронтенд


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

>или там, где нужно сделать что-то похожее на приложение


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

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


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

>усложняет разработку


Усложняет разработку только на начальном этапе, потому что тебе придётся учить новую технологию. Как только освоишься, то ничего оно не усложняет, наоборот, поддерживать и разрабатывать SPA намного проще, чем лапшу на JQuery, потому что там есть устоявшаяся архитектура, паттерны и best practices.

>утяжеляет фронтенд, замедляет рендеринг сайта


Ты упускаешь охуенно важную деталь: это актуально только при первой загрузке приложения либо при выпуске обновления. Если у тебя на серваке нормально настроено кэширование или если ты используешь service worker, то при дальнейших загрузках приложение будет загружаться очень быстро. Также есть разбиение приложения на чанки и ленивая подгрузка модулей, а ещё есть SSR.
1011 1996368
>>1996313

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


Бумер, ты реально в 2006м застрял? Сейчас фронт это отдельное приложение в отдельном репозитории, которое деплоится на отдельный сервак отдельным CI/CD пайплайном. Ну какое нахуй вшитие конфига с бэка на фронт? Уже давно в тренде полное разделение бэка и фронта. Мухи — отдельно, котлеты — отдельно.
1012 1996408
>>1995343

>Так или иначе, сейчас почти весь современный веб на реактивных фреймворках.


Развек что в твоем манямирке

Ты вопрос нормально задай. Как вью конфликтует с формами симфони?
1013 1996430
>>1996408
Ты на тролля похож, смысл тебе отдельно разжевывать? Хотя ладно:

>Развек что в твоем манямирке


Читай выше, магазины на CMSках к современному вебу я не отношу.

>Ты вопрос нормально задай. Как вью конфликтует с формами симфони?


Ну видишь, после моего вопроса тут у одного молодого человека с не очень молодым возникла дискуссия насчет разных подходов к решению этой проблемы.
А ты похоже самый умный, раз никакой проблемы не видишь и всё очевидно. Может быть поделишься мудростью? Или я это все зря пишу?
1014 1996440
>>1996430
Зачем ты ему пытаешься доказывать что то? Там чел кроме любимой цмсочки ничего не видел уже лет десять.
jQuery блять в 2021, jQuery карл! Этот объёбыш даже про современный js не слышал, о чем ты ему рассказываешь. CI какой то, пайплайны блять, с таким же успехом можешь еще про контейнеризацию и событийную модель своей бабушке рассказать.
Я не удивлюсь, если он еще и процедурно свое говно хуячит и нахваливает.
1015 1996464
>>1996430

>Ты на тролля похож, смысл тебе отдельно разжевывать?


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

> Хотя ладно:


Ладно что? Ты либо вопрос нормально формулируешь - либо нахуй идешь. Так не только на дваче, привыкай

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


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

>А ты похоже самый умный, раз никакой проблемы не видишь и всё очевидно. Может быть поделишься мудростью? Или я это все зря пишу?


Проблемы запихнуть вью в твиг? не вижу. Как это мне мешает выводить формы? Ты хочешь формы кастомизировать? Это делается стилями и жсом. Что еще тебе нужно? Я не вижу проблемы от слова совсем. Если у тебя спа-админка на реакте, о каких симфони формах речь может идти?

>>1996440
Клоун
1016 1996468
>>1996464

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


Еще и уровень дискусии прямиком из одноклассников.

>Мне ебать что ты там думаешь


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

> и идите оба нахуй отсюда


Нихуя начальник двача разбушевался.

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

>Проблемы запихнуть вью в твиг? не вижу. Как это мне мешает выводить формы? Ты хочешь формы кастомизировать? Это делается стилями и жсом. Что еще тебе нужно? Я не вижу проблемы от слова совсем.


Просто пиздец, у меня слов нету. Я уже молчу о том, что ты вопрос мой не понял. Но какой нахуй TWIG вообще? Ты знаешь хоть что такое Vue? Ты знаешь что такое SPA?
Да ты вообще похоже даже представить себе не можешь, что фронт и бэк могут быть разделены, это за гранью твоего понимания.

Пиздец, мне плохо уже, нахуй я в этот ебучий пхп подался? Предупреждали же меня не раз.
Таких как ты ведь тысячи, у вас мозги от маразма поплыли, вы уже не понимаете какой на дворе год и не помните как вас зовут, зато ваши закостенелые пальчики еще как-то по инерции пишут хоть и плохой, но как-то работающий код.
Я просто боюсь, что когда в моем городе появится вакансия для джуна на симфони а таких уже пол года не было, я туда приду и встречу в команде таких же идиотов как ты, которые будут меня жизни учить.
Конечно же сразу уволюсь и буду еще пол года ждать следующую.
1018 1996501
>>1996464
Чувак, я с этим сталкиваюсь не у блоггеров на Ютубе, я с этим сталкиваюсь на работе постоянно. Я хз, может мне повезло попасть в компанию, в которой это всё реально применяется, но я так не думаю. Открой любую вакансию на фронтера и я почти уверен, что в требованиях ты найдёшь там вовсе не JQuery, а React / Angular / Vue, какой-нибудь стейт менеджер и опыт работы с RESTful API / GraphQL. Конечно, есть вероятность, что они все врут и на самом деле тебя посадят ковырять говно на JQuery, но что-то мне подсказывает, что это не так.
1019 1996503
Не понимаю, почему бумер так копротивляется за формы и шаблонизаторы? С точки зрения бэка это же наоборот круто, когда ты просто отдаёшь фронтеру API и тебе вообще не надо с фронтом ебаться, тупо чиллишь.
1020 1996515
>>1996503
Видимо когда десяток лет клепаешь шаблонную хуйню - мозг атрофируется и перестает воспринимать новую информацию. Таких и называют веб-макаками и негативное отношение комьюнити к вебу, пыхе и джсу сформировалось на фоне именно таких формошлепов.
sage 1021 1996561
>>1990077
PHP будет актуален, и для РАБоты это заебись

Но как первый язык, конечно, печальный вариант.
Если нужны прям настоящие знания -- начинай с C.
Если только прикладные для работы -- бери РНР и не парься.
sage 1022 1996567
>>1993589

>теснить даже яву и си шарп на их поле.


лол, с такой скоростью работы этого точно не произойдёт

но и производительность растёт, посмотрим-с
1023 1996622
>>1996515
Семён спок
1024 1996642
>>1996479

>Я прямо спросил, отдают ли люди форму с бека на фронт и каким образом.


Отдавать форму с бека для спа на реакте? Чёт даже не смешно уже

>Пиздец у тебя мозги отсохли, завязывай лучше с CMSками


При чем тут cms. С чего ты думаешь что я с ними работаю? Ты правда ещё не понял, что с двумя разными людьми общаешься? Пиздец развелось вас

>ты знаешь хоть что такое Vue? Ты знаешь что такое SPA?


Я то знаю и работаю с этим, а вот у тебя, видимо, провал в этом. С каких пор любой приложение с использованием vue должно быть spa? Это тебе кто такое сказал, или где это написано? Если это спа, то как и для чего тебе формы с бека отдавать. Пойди в жс тред и спроси у ребят, которые на реакте работают - как им такая идея.

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


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

Я весь тред не читал, но заходит ли Оп? И тот ли ОП это?
1025 1996718
>>1996642

>Вокруг одни семены, а там, где обосрался - это не я постил


Ебать маневры.
1026 1996720
>>1996718
По тредам пройдись, расскажи анонам про контейнеризайию и ci. Клоун малолетний
1027 1996728
>>1996283

>а больше это сколько


Неебу - из описания задачи мало конкретной информации. Что за модули? На сайт какой-то или что? Интерфейс нужен или нет? Ещё пачка уточняющих вопросов по ходу дела.
Никакой кастомный код не стоит 20$ - 1500 рублей. Это цена одной копии плагина, который продают сотнями штук.
1028 1996750
>>1996360

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


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

>любую вакансию на фронтера и я почти уверен, что в требованиях ты найдёшь там вовсе не JQuery, а React / Angular / Vue, какой-нибудь стейт менеджер и опыт работы с RESTful API / GraphQL.


jq не для фронтендеров, а для бекендеров, которых посадили ажакс на фронте дёргать и шаблончики натягивать. Действительно - требовать жиквери от фронтендера это ебануто и слишком просто, это уровень веб-мастера из прошлого десятилетия, если человек кроме этого ничего не знает.
1030 1996776
>>1996503
Просто тупых хипстеров почти нигде не любят. Дело не в технологиях, а их бездумном использовании без оглядкина целесообразность.
Ты - тупой хипстер от фронтенда.
1031 1996787
Опять срач какой-то долбоёб развёл.
1032 1996793
>>1996787
Ты старый пердун-бумер. KEKW. Не шаришь за ci, контенеризацию, паплайны. GraphQl.Тебе о чем нибудь говорит? Нет, конечно. Вы старые никчемные говнокодеры. Я - умный и прогрессивный. Смотрите еще че могу: синглтон, тайп скрипт, кубернетс, дженкинс. Видали? Так че, как там симфони формы моему ручному 200k/nansec фронту отдавать? А то он на ангуляре пишет (мертвый фреймворк, вообще все мои хоуми юзают vue.), сидит чета дрочит, мямлит - не выходит у него, в общем. Ну я ему и говорю: "Забирай свои формы и сьебывай. А я пойду на дваче в пхп треде спрошу, как их кастомизировать на этих ваших жс фреймворках". В современном мире, вообще то, все сайты так работают. Это у вас в ваших отстойниках цмс одни на жквери лол! И вообще жквери это так, прошлый век. Кореш у меня есть один - серьезный фронтендер, даже тайпскрипт знает. Помню рассказывал он мне, что взяли его стажироваться в одну галеру, а там проект - ну пиздец 19век. Админка, которой 15 человек пользуются, да и на шиблонизаторе ебаном, прикиньте? Ну типа тоже js,css, html, местами компоненты вью, но это же не spa-ебана рот. Ну он дело в свои руки взял, прошелся с вопросом о переписывания админки на spa по всем: от местных джунов до пмов других проектов. Ну его короче выгнали вы поняли да? Тупые старые пердуны-бумеры-цмсники не захотели переписывать админу, которой 1.5 года на новое современное спа приложение, я ебал почему они такие упертые?
1033 1996798
>>1996479

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


Да, зря.
На скольких проектах не был, везде либо олдскульный фулстек на пхп+жиквери с фреймворками офк, либо то же самое, но с разговорами и тщетными попытками перехода на SPA.
1034 1996803
А я вот всё никак не возьмусь за фулстак симфони+реакт петик писать... Хочется потрогать современный веб, а не жить в прошлом десятилетии

мимо >>1996798
1035 1996845
>>1996793
Помню когда вкатывался только, то тоже так же себе всё представлял - всё будет модно-современно, весело, чисто и красиво. А когда с реальными проектами поработал - теми, которые людям деньги приносят, и порой неплохие, то сразу эта дурь из головы вышла. Неофитов на этом легко спалить - они из детских туториалов не выросли ещё и не видели некоторого дерьма, и поэтому прибывают в стране радуги и поей. Почти как таксисты, когда думают, что программисты за нажимание кнопок деньги получают.
1036 1996849
>>1996803
У меня была админка на реакте. Кончилось жуткой хуйней и жопоеблей.

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

Реакт - это не волшебный мир розовых единорогов, это достаточно ёбнутый фреймворк с которым нужен крайне продвинутый опыт разработки. Если ты крутой опытный разработчик, детально представляющий себе бизнес-процесс задач и паттерны проектирования, то он принесет тебе больше пользы чем вреда.
Вкатыш, научившийся делать на нем тудушки, со 100% гарантией сотворит на нем ад который придется потом выкидывать целиком.
1037 1996854
>>1996845
Хз, я начал работать с 2019 года и сам лично никогда с шаблонизаторами не сталкивался даже, кроме случаев, когда надо было с бэка посылать отформатированный email. На моей памяти, у нас в компании было только 2 или 3 проекта, где делали "по старинке", во всех остальных проектах с клиентской частью бэк давал REST API, фронт был SPA. Единственное плохое с точки зрения технологий, с чем я лично сталкивался, это SOAP-сервисы в паре проектов.
1038 1996876
>>1996849
Вангую, ты писал логику прям в компонентах, поэтому у тебя всё и посыпалось. Надо использовать стейт-менеджер (я, например, люблю MobX) и всю логику выносить туда, а копмоненты делать тупыми.
sage 1039 1996901
>>1996479
всем положить на твои петушиные маняфантазии и дроч на %библиотекинейм%, бизнес-заказчику нужен рабочий продукт за приемлемую цену и в кратчайшие сроки
1040 1996904
>>1996849
Какой стек был на фронте помимо реакта?
1041 1996908
Как же приятно наблюдать, за сгоранием бумеродаунов итт. Вкиньте им еще плз, пока не разбежались.
1042 1996919
>>1996901

>Ашоту нужен магазинчик за 30к, ты не панимаешь, я говно ем и ты ешь, хули ты захотел по-нормальному то работать?

1043 1996980
>>1996919

>Ашоту нужен магазинчик за 30к


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

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



В тех случаях, когда манипуляция с DOM сводится к "вставить HTML, пришедший с сервера" или "раскрыть скрытый блок" выгоднее использовать jQuery, чем писать полноценное фронтенд-приложение.

Вот пример: показать первые 10 комментариев и сделать кнопку "показать следующие". Здесь выгоднее рендерить комментарии на сервере и подгружать их через JQuery (или его облегченный аналог). Это будет 20 строк на jQuery. При этом страница будет загружаться уже с отрендеренными первыми комментариями. Просто и удобно. Ты можешь при рендере шаблона вызывать вспомогательные функции из серверного кода. В то время как с фронтенд-фреймворком тебе надо будет переносить шаблоны на клиента, переносить все вспомогательные функции на клиента, загружать огромный бандл JS кода, делать аякс-запросы, чтобы отобразить первые комментарии. С Vue ты потратишь больше труда и получишь более тяжелый и медленный сайт.

Другой пример: форма, где при выборе опции надо показать/скрыть часть полей, сделать аякс-валидацию по мере заполнения. Опять же, решение на jQuery здесь более простое. Так как на сервере форму может рендерить фреймворк, а на клиенте пришлось бы ее руками составлять из элементов и удваивать объем работы.

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



Ты опять вместо объективного рассмотрения плюсов и минусов (инженерный подход) смотришь на какие-то мифические тренды. Откуда ты взял эти 90%? Из своей головы? И даже если бы эти 90% были правдой, это ничего не значит, так как есть много некомпетентных разработчиков и глупо на них ориентироваться. Есть компании с жирными бюджетами, которые могут позволить тратить на разработку больше, чем она стоит. И так далее.

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



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

> это актуально только при первой загрузке приложения либо при выпуске обновления.



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

> если ты используешь service worker,



Это одна из самых уродливых и кривых фронтенд-технологий. Ради кеширования тратить большой объем памяти на отдельный постоянно запущенный JS-процесс.

> есть SSR.



Это вторая уродливая и кривая технология. Как ты сделаешь SSR, если разным пользователям надо показывать разные страницы? Например, в интернет-магазине пользователю показывают стоимость и сроки доставки в зависимости от его города, выбранной валюты. SSR это нерабочая кривая фигня.
1044 1996991
>>1996362

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



В тех случаях, когда манипуляция с DOM сводится к "вставить HTML, пришедший с сервера" или "раскрыть скрытый блок" выгоднее использовать jQuery, чем писать полноценное фронтенд-приложение.

Вот пример: показать первые 10 комментариев и сделать кнопку "показать следующие". Здесь выгоднее рендерить комментарии на сервере и подгружать их через JQuery (или его облегченный аналог). Это будет 20 строк на jQuery. При этом страница будет загружаться уже с отрендеренными первыми комментариями. Просто и удобно. Ты можешь при рендере шаблона вызывать вспомогательные функции из серверного кода. В то время как с фронтенд-фреймворком тебе надо будет переносить шаблоны на клиента, переносить все вспомогательные функции на клиента, загружать огромный бандл JS кода, делать аякс-запросы, чтобы отобразить первые комментарии. С Vue ты потратишь больше труда и получишь более тяжелый и медленный сайт.

Другой пример: форма, где при выборе опции надо показать/скрыть часть полей, сделать аякс-валидацию по мере заполнения. Опять же, решение на jQuery здесь более простое. Так как на сервере форму может рендерить фреймворк, а на клиенте пришлось бы ее руками составлять из элементов и удваивать объем работы.

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



Ты опять вместо объективного рассмотрения плюсов и минусов (инженерный подход) смотришь на какие-то мифические тренды. Откуда ты взял эти 90%? Из своей головы? И даже если бы эти 90% были правдой, это ничего не значит, так как есть много некомпетентных разработчиков и глупо на них ориентироваться. Есть компании с жирными бюджетами, которые могут позволить тратить на разработку больше, чем она стоит. И так далее.

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



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

> это актуально только при первой загрузке приложения либо при выпуске обновления.



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

> если ты используешь service worker,



Это одна из самых уродливых и кривых фронтенд-технологий. Ради кеширования тратить большой объем памяти на отдельный постоянно запущенный JS-процесс.

> есть SSR.



Это вторая уродливая и кривая технология. Как ты сделаешь SSR, если разным пользователям надо показывать разные страницы? Например, в интернет-магазине пользователю показывают стоимость и сроки доставки в зависимости от его города, выбранной валюты. SSR это нерабочая кривая фигня.
1045 1997006
С чего начинаете разработку пета?
Сначала пишете тз, продумываете архитектуру, накидываете мокап?
Или тупо херачите, что получается?
1046 1997019
>>1996368

Выше я уже все расписал: >>1996297 . Либо ты автоматически конвертируешь и встраиваешь формы с сервера в фронтенд, либо ты делаешь двойной объем работы.

> Уже давно в тренде


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

Глупо ориентироваться на других. Вот кто-то пишет код на Си++. Значит ли это, что мы должны отказаться от PHP, и перейти на Си++? Вряд ли.

>>1996440

Я еще и к атрибутам вроде onlick нормально отношусь, как тебе такое?

>>1996479

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

Что касается "разделения фронта и бека", я когда-то генерировал классы-модели в JS на основе классов в PHP. Так как у меня был редактор кое-чего и мне надо было работать с документом и на сервере и на клиенте. Чтобы с ним работать, надо было его представить в виде дерева объектов. Но не хотелось делать двойную работу и делать по две версии каждого класса (в JS и в PHP). Этот подход упростил мне жизнь.
1047 1997031
Раз уж зашла речь про фронтенд, давайте еще объективно поговорим про их убогие технологии (или их неправильное использование). Какое-то время у фронтендщиков модно было использовать LESS и подобные препроцессоры. В них они пишут такой код:

.product {
&__price {
color: red;
}
}

Который компилируется в такой CSS:

.product__price { color: red }

В чем тут убожество? Умный анон уже наверно догадался, а если не догадался, то при такой записи, если мы захотим поиском по файлам найти, где задан идентификатор product__price, то мы ничего не найдем. Поиск по коду перестает работать. Я видел это убожество в нескольких проектах.

Поэтому я очень скептически отношусь к так называемым "фронтенд-специалистам" и их "best practices". Они пишут плохой код и не видят его недостатки.
1048 1997034
>>1996876
Я её оттуда вытаскивал, лол. Делал не я, а какой-то хуй который так-же лечил про SPA, и съебался раньше чем все распидорасило. С тех пор у меня глаз и дергается при рассказах о том как это заебись.

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

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

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

>>1996904
Из крупного - редукс.
1049 1997040
>>1997034
Та как бэ принцип "нормально делай - нормально будет" везде применим.
Сам же пишешь, что на фронте говнокод был.
Бек на пыхе тут принципиально мало чем отличается, разве что количеством вкатунов
1050 1997064
>>1997031

>если мы захотим поиском по файлам найти, где задан идентификатор product__price, то мы ничего не найдем



Аргумент уровня б. Когда так пишут, то ОБЫЧНО есть конвенция что это лежит в файле _product.scss или чем-то подобном, поэтому ты не ищешь по всему проекту, ты знаешь в каком хотя бы файле это находится. Конечно, если ребята работали на отъебись, то будешь два дня искать где поправить, но это не значит сам подход плохой.

>>1996991

>Это вторая уродливая и кривая технология. Как ты сделаешь SSR, если разным пользователям надо показывать разные страницы? Например, в интернет-магазине пользователю показывают стоимость и сроки доставки в зависимости от его города, выбранной валюты. SSR это нерабочая кривая фигня.



Абсолютно так же, как это делается и на пхп, сср фронтенд фреймворков "уродливым" можно назвать потому что иногда нужно понимать где ты находишься, на клиенте или сервере, получается такой гибридный ком кода.
sage 1051 1997274
дауны задроты ебаные лучше тред перекатите или я это сделаю бещ вашей даунской шапки
1052 1997275
>>1996991

>SSR это нерабочая кривая фигня.


Двачую. Сами сделали проблему и сами же её решили технологически-всратым велосипедом. Всё ради SPA даже тогда, когда оно не нужно и создаёт проблемы.
1053 1997287
>>1997006
Всегда сперва проектируется. Херачить что получается это детский садик - штаны на лямках.
Вернее даже - сперва неделю ходишь задумчивый и смотришь аналоги, выписывая идеи себе. Потом следующую неделю прикидываешь общее приложение и пилишь архитектуру нормальными словами технический проект или как-то так, на этом этапе всплывают почти все подводные, которые не заметил. Ну а когда всё расписано, то на код положить любая макака сможет с закрытыми глазами.
1054 1997330
>>1996642

>Отдавать форму с бека для спа на реакте? Чёт даже не смешно уже


> Если это спа, то как и для чего тебе формы с бека отдавать.


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

>Ты правда ещё не понял, что с двумя разными людьми общаешься? Пиздец развелось вас


Это ты похоже не понял, что с двумя разными людьми общаешься. Что за бред шизоидный?

>С каких пор любой приложение с использованием vue должно быть spa? Это тебе кто такое сказал, или где это написано?


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

> Вот я ее прописал на бэкенде, отправил в twig, в шаблоне написал {{ form(form) }} и все, у меня все готово.


> А что люди делают если весь рендеринг на джаваскрипте?


Что ты отвечаешь?

>Да засунь весь этот рендеринг на джаваскрипте в твиг, тю ебать, дурачок.


И после этого ты спрашиваешь, почему я думаю что ты работаешь с CMSками?

>Не напрягайся ты так, лучше на манерами поработай


Ты свои то посты перечитай, неадекват.
>>1997019

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


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


Слушай, ну я в вопросе написал про "что люди делают если весь рендеринг на джаваскрипте". Это уже не вывод шаблонов в твиге, чего персонаж, которому я ответил выше, не понимает.
И про то что это "абсолютная истина" я нигде не писал, возможно ты меня с кем-то спутал.
Наоборот, я полностью поддерживаю твои слова о том, что моднявые технологии даром не нужны, когда заказчику нужно максимально быстро и бюджетно выполнить какой-то сайтец, на который будут заходить по 3 человека в день, без амбиций на дальнейшее расширение и поддержку.
Но зачем мне равняться на худших, если можно на лучших? Чем плоха продуктовая компания, "сорящая деньгами"? Это мечта любого кодера, ты разве не в такой работаешь?
1054 1997330
>>1996642

>Отдавать форму с бека для спа на реакте? Чёт даже не смешно уже


> Если это спа, то как и для чего тебе формы с бека отдавать.


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

>Ты правда ещё не понял, что с двумя разными людьми общаешься? Пиздец развелось вас


Это ты похоже не понял, что с двумя разными людьми общаешься. Что за бред шизоидный?

>С каких пор любой приложение с использованием vue должно быть spa? Это тебе кто такое сказал, или где это написано?


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

> Вот я ее прописал на бэкенде, отправил в twig, в шаблоне написал {{ form(form) }} и все, у меня все готово.


> А что люди делают если весь рендеринг на джаваскрипте?


Что ты отвечаешь?

>Да засунь весь этот рендеринг на джаваскрипте в твиг, тю ебать, дурачок.


И после этого ты спрашиваешь, почему я думаю что ты работаешь с CMSками?

>Не напрягайся ты так, лучше на манерами поработай


Ты свои то посты перечитай, неадекват.
>>1997019

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


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


Слушай, ну я в вопросе написал про "что люди делают если весь рендеринг на джаваскрипте". Это уже не вывод шаблонов в твиге, чего персонаж, которому я ответил выше, не понимает.
И про то что это "абсолютная истина" я нигде не писал, возможно ты меня с кем-то спутал.
Наоборот, я полностью поддерживаю твои слова о том, что моднявые технологии даром не нужны, когда заказчику нужно максимально быстро и бюджетно выполнить какой-то сайтец, на который будут заходить по 3 человека в день, без амбиций на дальнейшее расширение и поддержку.
Но зачем мне равняться на худших, если можно на лучших? Чем плоха продуктовая компания, "сорящая деньгами"? Это мечта любого кодера, ты разве не в такой работаешь?
1055 1997338
Читаешь тред и вахуе с этих гнилозавров. Пишут на всратом языке, который славен своими жуткими практиками, но вроде начинают появлятся адекватные инструменты, язык понемногу выходит на рынок серьезной разработки, веб становится живым и интреактивным, зарплаты на этом растут и все вроде хорошо. Но заходишь сюда и видишь типичного пыхера из мемасов просто. Визгливый, токсичный и неспособный выучить ничего больше того, что узнал в 2010 году, при этом с громким воем отстаивающий свою отсталость, как чтото хорошее, но ради чего? Выпендрится перед нубами на анонимном форуме для девочек?
1618507131812.png121 Кб, 800x450
1056 1997373
>>1997338
Чаю. Они же когда-то были молодыми и шутливыми, доказывали другим дедам о преимуществах ООП, MVC, фреймворков и т.д., на что те деды плевались и отвечали:

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


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


>Эти же 20 строчек легче читать, и они все в одном файле, что немаловажно. Не нужно по классам бегать, искать кто кого вызывает, кто с кем общается, всё как на ладони. Зачем утяжеление на ровном месте?


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


>То что кто-то выводит html не через echo, а как шаблон, еще не значит что так должны делать все.

1057 1997394
>>1997338
Просто никто не собирается подмахивать фронтенд-макакам, которые кроме SPA ничего не знают и знать не хотят. Такая-то детская маняпопытка всех построить и оправдать своё существование.
1058 1997432
>>1997394
У тебя просто горит жопец, от того что у так называемых фронтед-макак зарплата больше, а за твой говнокод в 2021 не хотят платить столько же.
Sad but true.
1059 1997434
>>1997432
У тебя так вообще никакой зарплаты нет, маня.
1060 1997444
>>1997434
Ок, бумер.
1061 1997464
>>1996362

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



Вот тут дико дваждую, васянил нативный JS для формы в которой много всяких AJAX списков + некоторое количество условно появляющихся полей. Как же меня заебала возня с DOM это пиздец просто. За неделю освоил вью по верхам - задышал просто пиздец как по другому. Стало приятно писать клиентские формы и логику в них.
1062 1997476
>>1997464
пс вообще не понимаю прям батхерта от изучения react|angular|vue - что бы по верхам хрюкнуть - неделя, и вперед.
Мне вью реально жизнь облегчил. И что важнее- я начал удовольствие от дрочки с написанием клиента получать.
1063 1997510
>>1997476
Просто ты либо молодой, либо не сидел всю жизнь на жопе без амбиций в региональной веб-студии, выполняя ту самую работу и смотря сериалы по выходным, а шевелил мозгами.
Те, кто бугуртят от необходимости изучения новых технологий и оправдывают это НИНУЖНОСТЬЮ - это просто несчастные люди у которых атрофировались соответственные участки мозга.
Да, такое не только у заводских рабочих всяких бывает, сам в ахуе.
1064 1997521
>>1997330

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


Фреймворк такой, почитай на досуге.

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


>гррряяя вы старые и не прогрессивные, в моем современном мире все пишут спа на жс фреймворках


>фронт не может написать форму на фреймворк-нейм, давайте будет отдавать ее с бека?


>ой а как он с ней работать то будет(((


Ну че, как? Сходил в жс-тред как я советовал? Сколько человек тебя послали нахуй?

>Пиздец развелось ВАС


>Это ты похоже не понял, что с двумя разными людьми общаешься


Ок, клоун

>почитай хоть раз мой вопрос


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

>>Да засунь весь этот рендеринг на джаваскрипте в твиг, тю ебать, дурачок.

>И после этого ты спрашиваешь, почему я думаю что ты работаешь с CMSками?



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

>Ты свои то посты перечитай, неадекват.


Вполне адекватное послание тебя нахуй. Любой уважающий себя и своих коллег человек так поступит. Анскильный, необразованный, невоспитанный еблан без опыта, залетевший на борду и начавший раскидывать на борде говно аля
"
ну короче вы все цмс-говнокодеры, сейчас в современном мире все на спа, все юзер интерфейсы рендерятся на жаваскрипте епта. Шаблонизаторы прошлое столетие, сейчас они нахуй никому не нужны. Что? Отдавать приложение отрендеренное на жсе с сервера? Лооол, кек, лмао. Я же говорил что вы цмс-говнокодеры, да? Пиздец убогие. А че думаете, если короче нанять фронтенд-макаку, посадить его писать приложение на реакт/вью/ангуляр (хотя реакт и ангуляр ты видимо не выкупаешь что такое, блогер-ютюбер рассказал только про обоссаный вью, да?), а короче формы (пиздец рофл) мы будем отдавать с сервера. Ну типа автоматизация. Мне так индусы на стаковерфлоу написали. А вот писать код на том же vue и отдавать его отрендеренным с сервера можете только вы - ебаные цмс бумеры-деды (22y.o)

>рендерить приложение на сервере НЕ ОК


>нанять макаку чтобы он нихуя не делал?? ОК


>рендерить формы на сервере и отдавать их макаке ОК


>макака ахуела, просит вернуть ему привелегию написать ебаную форму ручками с использованием нормальной технологии для этого предназначенной ОК


>анон в шоке, а как же маня-автоматизация макак в природе?



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

>>1997476

> изучения react|angular|vue


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

>И что важнее- я начал удовольствие от дрочки с написанием клиента получать.


Нахуя, если можно написать спа на вью, а потом с сервера html код отдавать и рендерить его в этом же вью? Ну не гениально ли? Почитай как нибудь, indus.stackoverflow
1064 1997521
>>1997330

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


Фреймворк такой, почитай на досуге.

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


>гррряяя вы старые и не прогрессивные, в моем современном мире все пишут спа на жс фреймворках


>фронт не может написать форму на фреймворк-нейм, давайте будет отдавать ее с бека?


>ой а как он с ней работать то будет(((


Ну че, как? Сходил в жс-тред как я советовал? Сколько человек тебя послали нахуй?

>Пиздец развелось ВАС


>Это ты похоже не понял, что с двумя разными людьми общаешься


Ок, клоун

>почитай хоть раз мой вопрос


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

>>Да засунь весь этот рендеринг на джаваскрипте в твиг, тю ебать, дурачок.

>И после этого ты спрашиваешь, почему я думаю что ты работаешь с CMSками?



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

>Ты свои то посты перечитай, неадекват.


Вполне адекватное послание тебя нахуй. Любой уважающий себя и своих коллег человек так поступит. Анскильный, необразованный, невоспитанный еблан без опыта, залетевший на борду и начавший раскидывать на борде говно аля
"
ну короче вы все цмс-говнокодеры, сейчас в современном мире все на спа, все юзер интерфейсы рендерятся на жаваскрипте епта. Шаблонизаторы прошлое столетие, сейчас они нахуй никому не нужны. Что? Отдавать приложение отрендеренное на жсе с сервера? Лооол, кек, лмао. Я же говорил что вы цмс-говнокодеры, да? Пиздец убогие. А че думаете, если короче нанять фронтенд-макаку, посадить его писать приложение на реакт/вью/ангуляр (хотя реакт и ангуляр ты видимо не выкупаешь что такое, блогер-ютюбер рассказал только про обоссаный вью, да?), а короче формы (пиздец рофл) мы будем отдавать с сервера. Ну типа автоматизация. Мне так индусы на стаковерфлоу написали. А вот писать код на том же vue и отдавать его отрендеренным с сервера можете только вы - ебаные цмс бумеры-деды (22y.o)

>рендерить приложение на сервере НЕ ОК


>нанять макаку чтобы он нихуя не делал?? ОК


>рендерить формы на сервере и отдавать их макаке ОК


>макака ахуела, просит вернуть ему привелегию написать ебаную форму ручками с использованием нормальной технологии для этого предназначенной ОК


>анон в шоке, а как же маня-автоматизация макак в природе?



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

>>1997476

> изучения react|angular|vue


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

>И что важнее- я начал удовольствие от дрочки с написанием клиента получать.


Нахуя, если можно написать спа на вью, а потом с сервера html код отдавать и рендерить его в этом же вью? Ну не гениально ли? Почитай как нибудь, indus.stackoverflow
1065 1997547
>>1997476

>vue


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

>angular


не сталкивался с проектом, где бы он был прям так оправдан, обычно это оверкилл, но он неплохо форсит архитектуру диким фронт макакам.

>react


Спидозное говно говна. Самое популярное ко всему прочему. 1001 способ сделать всё через жопу, практики, меняющиеся каждые полгода (как раз когда сойбои выясняют, что залупа с которой они бегали полгода назад - кусок говна).
1066 1997551
>>1997521

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

Кстати, генерация форм нужна не только когда хочется избежать двойной работы. Бывает, что формы вообще генерируются динамически (а не описаны где-то в коде). Пример: бизнес-процессы. Пользователь создает новый бизнес-процесс (закупка офисных принадлежностей), описывает какие у него есть свойства (товар, цена), какого они типа и где-то должна появиться форма с соответствующими полями.
1067 1997560
>>1997551
В чем проблема сделать это на вью?
1068 1997605
>>1997521
Нихуя тебя порвало, иди валерьяночки выпей. Выдал просто поток сознания несвязный, тут нету даже что цитировать чтобы тебя, собачку глупую, мордой в говно макнуть, ты сам себя в говно макнул глубже некуда.
Мой тебе совет: если ты не умеешь отличать людей в потоке сообщений без аватарок и никнеймов, лучше не сиди на дваче. Ну очень убого смотришься.
Ты даже в этом посте под меня приписал посты половины треда, при том что я только спросил у людей как они используют формы при условии разделении бэка и фронта, ну и непосредственно с тобой в нескольких постах поигрался.
Наверное тебе так удобнее, из-за того что я заявил о своем сравнительном ньюфажестве. Тут-то появляется что ответить, вместо реальных аргументов можно просто заявить что ты уже два с половиной года интернет магазины на битриксе делаешь, а потому лучше меня не меня во всем смыслишь.
1069 1997622
>>1997605
Так а с формами то что?
1070 1997700
>>1997622
А хуй его знает, просто увольняемся с работы когда появляется проект на Vue/Angular/React и ищем нормальную веб-студию без всей этой пидорской хуйни.
1071 1997701
Вы нахуя деда >>1997521 доводите, ироды? Он сейчас от гнева челюсть выронит же.
1072 1997702
>>1997510

>Просто ты либо молодой


мне 34

>либо не сидел всю жизнь на жопе без амбиций в региональной веб-студии


Я вообще в студиях не сидел - самозанятый типа + госшарага.
1073 1997708
>>1997521
Че ты несешь, поехавший? Я в вашем сраче вообще не участвовал.
vue и в меньшей степени реакт ( потому что в нем нет на сколько я понял альтернативы директивам для уже существующего хтмл) изучил для своих нужд пока что на уровне своих нужд за неделю. Доволен.

>>А как же разделение ответственности.


Разделения чего? Разделения куда? Меня тошнило от возни с DOM, ща на вью васяню свои условные пагинаторы и получаю удовольствие от того что на клиенте и бэке пишу приятный для меня код.
Меня не ебут экзистенциальные вопросы нубарей "какой вэб-фреймворк выбрать" с абсолютным не пониманием зачем эти фреймворки вообще нужны.
1074 1997803
Бля, это ж насколько ебанутым нужно быть чтобы на самоподдуве закатиться в тред бекенда и навязывать свои хипстерские тренды, нихуя толком ещё не сделав либо работая тупорылой однобитной обезьяной на одной технологии.
Ещё токсичность эта зашкаливающая - безработного за версту видать т.к. с таким говном никто работать не будет. Либо возьмут на позицию хуесоса у джунов, откуда эта обида ёбаная.

CMS у него, видите ли, говно и вообще для дидов, а модные-молодёжные все даже сраные визитки на SPA пилят с сотнями эндпоинтов. Сразу видно идиота не умеющего подбирать инструмент под задачу.
1075 1997855
>>1997622
Еще как вариант нанять макаку, которая умеет кастомные формы делать, а не верстальщика, который выдает себя за фронта

>>1997701
Выронил тебе за щеку, сынок

>>1997510
А кто говорил что js нинужон и все будем писать хуй пойми как? Завтра выпустят новый функциональный вантуз для унитаза - ты им вместо унитаза жопу свою чистить будешь?

>>1997708

>vue и в меньшей степени реакт


А laravel в меньшей степени yii? Попробуй посмотреть что то кроме ролика "vue за час" или "реакт для чайников"

>Разделения чего? Разделения куда?


Пиздец, ты ироничный рофлан над лохами-джунами, которые symfony формы на spa присылают не выкупил?
1076 1997859
>>1997700
Первый реплай тебе >>1997855
1077 1997937
У вас опять тред УТОНУЛ.

Какие IDE для ПиЭйчПи-разработчика посоветуете?

PHPStorm - тормознутый
VSCode - тупит с intellisense
1078 1997938
>>1997803
>>1997855
Дед, ну хватит тебе позориться, все хорошо, и твои cms хорошие и ты умница, они маленькие еще прост, непонимают. Давай, таблеточку выпей и баиньки, а то уже вон ручки трясутся видимо, постов не видишь.
1079 1997943
>>1997937
Это исключительно вопрос вкуса и привычки.
По количеству всяких свистелок полезных наверное все таки шторм, но подглючивает и обновы корявые часто. Плюс, если разные языки используешь приятно по Intelij идешкам скакать.
В VS можно плагинами вцелом поднастроить и будет не хуже, но при этом стабильнее и легковесней.
Остальное не юзал особо.
1080 1997944
>>1997943
Вот привыч нащадно к Шторму, но он стал жрать под 90% проца при печати, я и переустанавливал разные версии и на новом проекте пробовал - не помогает.
Поэтому решил свитчнуться в VSCode и теперь страдаю от непривычки.
1081 1997945
>>1997938
В твоей дурной головушке не умещается осознание, что тебя тут хуесосят больше чем 1 человек?
Вот это манямирок у зумера.
1082 1997948
>>1997937

>тормознутый


>тупит


Ну пеку тогда поменяй, раз у тебя всё тупит и тормозит.
1083 1997950
>>1997937
Шторм.
Все остальное говно.
1084 1997952
>>1997948
Совет от бога.
1085 1997956
Не понимаю зачем нужен Сваггер. Ну да, типа, красивенькая документация и всё. По факту оно ничем не отличается от рукописной - зачем везде пердят про автоматическую, если разработчик вынужден поддерживать её вместе с кодом? Реально двойная работа получается - пишешь код для АПИ, а потом то же самое для документации этого АПИ.
1086 1997958
>>1997944
С памятью кстати ни разу не было проблем, открыто несколько инстансов из их семейки - жрут стабильно вцелом, хотя коллеги иногда жалуются на похожие косяки.
Я пользуюсь VS на ноуте иногда, тоже сначала привыкал долго и плевался. Через месяц +- попривык.
>>1997945
Ты уже реально заебал со своей шизой, иди в срачетред. Я сомневаюсь, что в треде одновременно заспавнилось несколько таких долбоебов.
1087 1997961
>>1997958

>Я сомневаюсь


Я ж говорю - манямир зумера непобедим.

>иди в срачетред


Иди нахуй, малолетка ограниченная. Это ты сюда пришёл учить нас как приложения писать - сиди и слушай, что тебе умные люди говорят.
1088 1997963
>>1997956
Ну в первую очередь он нужен там, где большие команды и есть нормальный QA, чтобы не шарить постмановские коллекции и не мучится с их актуальностью. Если у тебя небольшое публичное апи - обычной доки за глаза хватает.
1089 1997965
>>1997961
Я с тобой ни о чем не спорил, успокойся, ты реально какой то больной.
1090 1997972
>>1997961

> Пишет индусокал на cms и джиквери в 2021


>Ни учите миня ПРИЛАЖЕНИЯ писать!!


Мань, приложение тут только моего хуя к твоему тупорылому еблету.
1091 1997982
>>1997855
Траллируй - траллируй
>>1997938
А чем условные cms плохи? В рамках своей ниши? Хочет кабанчик у которого два-три ИРЛ магазина по продаже плинтусов и фурнитуры выйти в интернет, он хочет масимально типовую поебень, с каталогом и номером телефона. Бюджет 30 тыщ максимум - и хуле? На реакте + нода + деплоить в облаках + личный дизайн тыщ за 400 ему предложишь? И этот рынок существует, и не такой уж он узкий.
Другой вопрос что на говне уровня вордпресса писать противно.

Но я для своих быстрых нужд хочу Октябрь освоить, что бы и я не страдал, и быстро/просто реализовывал типовые проекты. У меня есть круг знакомых, мелких коммерсов, которым такой вариант очень подойдет.
1092 1997991
>>1997982
Да ничем они не плохи, нишевое решение, магазинчики нужны всегда, просто местный шиз, из за своей ограниченности продвигает ебанутые походы оттуда, как стандарт в индустрии.
1093 1998010
>>1997982

>хочу Октябрь освоить


С Октябрём сложно всё - у него скоро будет версия 2, которая платная будет и бесплатная какая-то. Часть разрабов прихуела от таких раскладов и сделала Винтер.цмс на базе первой версии.
Они там год-полтора только бурлить в говнах будут без явного результата.
1094 1998011
>>1998010

>версия 2, которая платная


Если у них получится сделать аналог Битрикса, но с нормальным кодом внтури первый Октобер вполне годный, то вообще заебца будет. Правда Битрикс только для рашкинских бизнесменов, а тут глобально.
1095 1998019
>>1998011

>первый Октобер вполне годный


Там же лара с eloquent под капотом? Не сказал бы что в ларе прям очень годный код. Хотя конечно в сравнении с битриксом все равно победа.
1096 1998026
>>1998019

>нечно в сравнении с битриксом все равно победа.


Ну да - Ларовские Элоквент, Роутер, вместо Блейда - Твиг, Контейнер с зависимостями и поддержка композера из коробки. Но там не вся Лара, а некоторые компоненты только + они свои понапилили вполне удобные. В принципе, на уровне разработки плагинов всё пишется в стиле фреймворка - с контроллерами, маршрутами, моделями и их отношениями. С вордпрессом тем же не сравнить, да и много из коробки уже нормально работает без танцев с бубном и установки ёбаных сотен плагинов.
1097 1998031
>>1998026
Прикольно звучит, а конкуренты сейчас есть популярные у нее? Может на симфони чот похожее наклепали уже?
1098 1998047
>>1998031

>конкуренты сейчас есть популярные у нее?


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

>Может на симфони чот похожее наклепали уже?


Друпал на симфони переехал давненько уже.

Алсо можно и на вью сайтики делать, если кто думает, что CMS этого не умеет https://www.youtube.com/watch?v=9A-obKktlYw
1099 1998091
>>1997956

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

Во-вторых, можно не писать swagger файл руками, а писать в коде аннотации, из которых потом генерируется swagger. Так документация хранится радом с кодом и ее легко поправить при исправлениях кода.

Тебе в любом случае надо как-то описать API для фронтендщиков. Лучше сделать это нормально, а не как попало.

Также, теоретически можно бы использовать swagger-описание для автоматической валидации приходящих параметров, но я не сталкивался с библиотеками, которые это реализуют.
1100 1998146
>>1998091

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


Кроме красивых вьюшек - я сразу сказал.

>можно не писать swagger файл руками, а писать в коде аннотации, из которых потом генерируется swagger


Что как бы одно и то же по-сути и от дублирования работы не избавляет.

>Лучше сделать это нормально, а не как попало.


Какая разница где править документацию - в файле кода или разделе документации? И там - и там проебаться можно по чисто человеческим причинам.

Как минус получаем добавление очередного синтаксиса в проект, довольно всратого при этом, и увеличение объёма работы т.к. описывать он требует очень досконально.
1101 1998152
>>1998010

>>С Октябрём сложно всё - у него скоро будет версия 2, которая платная


Нихуя се, жаль.

>>Они там год-полтора только бурлить в говнах будут без явного результата.


Это да. Попридержу коней тогда.
1102 1998153
Как же затрахал этот даунский фреймворк...
wp.png6 Кб, 225x225
1103 1998234
>>1958281 (OP)
Анончики. Я очень не шарящий в кодинге и тем более в пхп. Есть один магазинчик wordpress+woocommerce+astra theme. Я хочу изменить какое-то свойство товара прямо в БД вордпресса.
Но, когда я меняю значение (цена или название товара или наличие) в соответствующей таблице бд, сохраняю. На сайте оно не обновляется.
Поясните мне балбесу, как это работает и как сделать, чтоб значение внесенное руками в бд отображалось на сайте?
1104 1998240
есть ли способы подсчитать и вывести число аккаунтов юзеров если их много на страницу админа?
1105 1998255
>>1998234
Смотри плагины\настройки кеширования и сбрасывай их кеш.

>>1998240
Обратиться к таблице пользователей с определённым sql-запросом, который и вернёт количество пользователей. Как выводить - уже сам.
1106 1998258
>>1998255
но тут загвоздка,много полей тяжко обрабатывать
1107 1998261
>>1998258
Сколько пользователей? Вообще-то этот довольно простой запрос база должна быстро выполнить, если у тебя структура не въёбана.
Или там таблица терабайт на 5? Тогда хуйле тебя на этот проект посадили, ёбу дали штоле?
1108 1998272
>>1998255

>>Смотри плагины\настройки кеширования и сбрасывай их кеш.



А не, все ок. я не в той таблице менял просто. Спс.
1109 1998275
>>1998240
SELECT COUNT пробовал?
1110 1998306
>>1998275
SELECT COUNT(*)as num FROM users
нашел на СО
1111 1998316
а интеграция пхп кода это норм практика?
вот насчет вывода числа юзеров в админке-обращение к массиву?
1112 1998326
>>1997855

>Пиздец, ты ироничный рофлан над лохами-джунами, которые symfony формы на spa присылают не выкупил?


Красавчик, два года назад задачку для дэбилов про айфон в кредит решить не мог, а теперь ОПа джуном называешь, лол
1113 1998361
>>1997803

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


Лол, какой тред бекенда? Здесь большинство - такие же пхп жиквери фулстек макаки как ты.
А теперь зайди к чистым бэкэндерам: к гоферам, джавистам, нодистам или еще куда хочешь, и расскажи им свою позицию.
Хотя ладно, ничего интересного с этого не выйдет, тебя там с твоими охуенными идеями за такого толстяка примут что даже нахуй не пошлют.
1114 1998407
Аноны, я довольно уважаемый миддл-программист, работаю в банке, и вот начальство поставило задачу типа сделай простенькую авторизацию, а то зачет не поставлю. Ну я такой ну ок. Погуглил про авторизацию и возник вопрос безопасности. Подскажите пожалуйста, как быть с сессией? Вот кусочек алгоритма, который смущает:
-Показываем пользователю форму логина
-Получаем от него пароль
-Проверяем пароль на наличие в базе данных
-Если пароль есть - генерируем хеш, сохраняем хеш в таблицу сессий, и вместе с айдишником пользователя записываем в сессию.
-После этого на каждом важном действии сверяем айди и хеш текущего пользователя с табличным.
А вот вопрос: что если хакер украдет текущий хеш из сессии браузера клиента? Это можно вообще сделать?
1115 1998419
>>1998407

>Проверяем пароль на наличие в базе данных


Проверяют не пароль, а хеш пришедшего пароля с хешем пароля в БД. Обязательно посолить - соль тоже хранить в БД.

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


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

>если хакер украдет текущий хеш из сессии браузера клиента? Это можно вообще сделать?


На https все данные шифруются и их перехват ничего не даст.

Хуевасто как-то для миддла у тебя, через постель на работу попал?
1116 1998423
>>1998419

>На https все данные шифруются и их перехват ничего не даст.


Спасибо за ответ, аношка. Но что если есть только http? Гипотетически хакер может как-то украсть данные сессии и использовать их? Или не беспокоиться?
1117 1998426
>>1998423
Если тебе для зачёта, то не трахай мозги и делай хоть как. Если для реального дела, то обязательно https и никаких велосипедов - бери проверенный фреймворк и делай на нём. Начальству скажи, что по требованиям безопасности обязаны предоставить https - это не прихоть.
1118 1998428
>>1998426
спасибо анон
1119 1998454
>>1998407

Тебе стоит изучить, как работают сессии.

Данные сессии хранятся на сервере (в файле, БД, редисе в зависимости от настройки). Они не передаются в браузер.

В БД надо хранить не пароль, а соленый хеш от пароля.

>>1998423

Если HTTP, то данные передаются в открытом виде. В том числе данные из формы логина, а также кука с идентификатором сессии. Соответственно, все, через кого проходят данные (роутер, который может быть заражен, провайдер, который сохраняет весь трафик по закону, сервера) могут их видеть и использовать. Потому надо использовать HTTPS.
1120 1998462
А как считать пени на счете автоматом?
1121 1998468
>>1998454
и тебе спасибо аноний
1122 1998477
Аношки, этот тред закончился, для продолжения холиваров создан новый тред >>1998470 (OP)

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

А я напомню, что в нашем треде есть заказчик >>1982834 Вы можете не только решить его интересную задачку, но и даже получить за это деньги (но это не точно).
sage 1123 1999577
>>1997952
тащем-та он прав

как ты собрался работать разработчиком без нормального компа?
ну Notepad++ тогда юзай, чо доебался до анона?
1124 2000071
Аноны, здравствуйте всем, скажите, появился уже какой-нибудь учебник по php 8 для вката? Сейчас читаю мануал, он вообще не годится для вкатыша.
1125 2000156
>>2000071
8 это тот же 7.х по большей части. Так что бери любой по 7.х учебник. Вау отличий нет.
1126 2004415
>>2000156
Если я хочу просто найти работу, лучше сразу начать ковырять фреймворк? Одного laravel хватит или еще что-то и в каком порядке?
1127 2005034
>>2004415
В принципе да. Делаешь гостевую книгу и тут же ищешь должность ждуна на галере. За еду. На реальных задачах быстрее развиваться будешь.

А вообще тред перекатится. https://2ch.pm/pr/res/1998470.html (М)
мб ты там уже и спрашивал
Регулярка 1128 2038183
Парни, у меня вопрос по поводу регулярных выражений. Конкретно интересует группа символов \D. Как помнят многие отсюда - это группа символов, которая включает в себя какой угодно символ, кроме цифр(!).

Но я столкнулся с непонятной проблемой. По какой-то причине в моём коде \D меняет лишь буквы, и при этом не затрагивает, как и положено - цифры, но в то же время и специальные символы, пример: #, |, ~ и так далее.

Я понимаю что есть квадратные скобки и всё такое, но меня интересует сугубо данный вопрос: что здесь не так? Почему \D вместе с цифрами не трогает и специальные символы?
1129 2038191
>>2038183
Блядь, я долбоёб тупой. Там же начало и конец подстроки не подпадают под регулярку. Нужно чтоб было вначале 'a', потом в конце 'b', а у меня в примере со спец. символами не так. Сорян, в глаза ебусь.
Тред утонул или удален.
Это копия, сохраненная 25 мая 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски