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

Ответить в тред Ответить в тред
Check this out!
Клуб изучающих PHP #122 /php/ Аноним 05/03/21 Птн 15:54:16 19582811
php-noob-1.png 32Кб, 500x500
500x500
cat-cafe-osaka.jpg 140Кб, 1024x683
1024x683
l0-sensei.jpg 34Кб, 650x384
650x384
cat-eats-php-bo[...].jpg 93Кб, 561x800
561x800
Здесь мы изучаем язык 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? — Да, однозначно. Посмотри любую вакансию.
Аноним 05/03/21 Птн 15:56:08 19582862
grammar.png 55Кб, 500x644
500x644
Код надо писать аккуратно и оформлять, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

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

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

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

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

PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
Аноним 05/03/21 Птн 16:34:13 19583383
Первый
Аноним 05/03/21 Птн 18:01:46 19584344
Снимок экрана 2[...].jpg 55Кб, 766x619
766x619
Аноним 05/03/21 Птн 18:48:52 19584655
>>1958434

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

Завтра ты захочешь сделать, чтобы при ошибке выводилась форма с введенными значениями, и эту функцию придется переделывать. А вот если ее сделать, как я написал, то не придется.
Аноним 05/03/21 Птн 19:04:26 19584796
val.jpg 47Кб, 517x616
517x616
Аноним 05/03/21 Птн 19:09:02 19584817
>>1958479
> trim($login)
У тебя trim вникуда делается, сама переменная $login после trim останется неизменной. Нужно писать так $login = trim($login);

> if ($login==false)
Можно убрать строчку сверху и написать компактнее:
if (!checkLogin($login)) {
...
}
Аноним 05/03/21 Птн 19:18:04 19584968
>>1958481
вот у меня еще есть 3 формы.
можно чтобы сокр код
сделать проверку этих форм через OR в одну строку
типа
if (!checkLogin($login) or !checkCountry(x) or !checkPassword(y)) {
не валидно }
Аноним 05/03/21 Птн 19:20:09 19584999
>>1958479

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

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

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

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

Аноним 05/03/21 Птн 19:21:00 195850110
>>1958496

Будет лучше написать единую функцию для проверки всех полей сразу. Чтобы она принимала на вход список полей и возвращала список ошибок в них.
Аноним 05/03/21 Птн 19:23:01 195850311
>>1958499
>Тогда можно будет сделать, чтобы функция либо возвращала текст ошибки,
а анон выше говорит что так делать нельзя


Аноним 05/03/21 Птн 19:40:39 195852912
>>1958281 (OP)
А почему код ниже выводит 1?
<?php
$a=1;
echo $a++;
Аноним 05/03/21 Птн 19:42:00 195853113
Я вкатыш и мне кажется шапка устарела. Что делать? php.net от а до я вылизать собираюсь, после этого на ларавельку пиздовать собираюсь, после этого пойду сразу миддлом за 100к+, т.к. живу в ДС и есть возможность работать в офисе, бок о бок с профи.
Какие подводные?
Аноним 05/03/21 Птн 19:42:13 195853214
Аноним 05/03/21 Птн 19:42:50 195853415
>>1958529
Потому что он сначала прибавляет единицу, но не перезаписывает в переменной. Если хочешь, шобы сразу выводило, юзай ++$a;
Аноним 05/03/21 Птн 19:48:33 195854316
>>1958534
Немного непонятно. А почему тогда в гайде написано что $a++ это $a=$a+1 ?
Аноним 05/03/21 Птн 20:10:04 195856417
>>1958543
Не читай гайд из шапки, его писал двачер блять. Двачеры априори не могут писать гайды. Учи на php.net + google. Всё.
Аноним 05/03/21 Птн 20:11:39 195856718
>>1958543
>>1958564
Написано то всё верно. Только в гайде походу не уделилось времени этому достаточно.
$a = 0;
echo $a++; //выводит ноль при том, что а будет единицей.

$a = 0;
echo ++$a; //а единица и выводит единицу
Аноним 05/03/21 Птн 20:18:29 195857619
>>1958543
Это просто бездумно пизданутая хуйня из си.
Просто всегда делай $var++ и не пихай его в выражения, а отдельной строчкой.
Аноним 05/03/21 Птн 20:21:16 195858020
>>1958567
Я это понял, но я не понимаю как это работает.
Получается $a++ это оператор, который возвращает значение $a вызывающей его функции, а после ее выполнения увеличивает ее на единицу?
Аноним 05/03/21 Птн 20:28:27 195858521
>>1958580
> я не понимаю как это работает
Я тебе даже ссылку скинул на офф документацию, ты хоть открывал её?
Аноним 05/03/21 Птн 20:39:51 195859222
валидатор2.jpg 81Кб, 822x679
822x679
>>1958501
не взлетела попытка
Аноним 05/03/21 Птн 22:09:18 195864823
>>1958592
Почитай для чего используется оператор return
Аноним 05/03/21 Птн 22:10:22 195864924
>>1958648
чтобы вернуть значение в куда-то,здесь в переменную
Аноним 05/03/21 Птн 22:13:30 195865025
>>1958649
>для чего используется оператор return
>чтобы вернуть значение в куда-то,здесь в переменную

Всегда было любопытно, откуда берутся такие логические цепочки рассуждений, например. Они же и не дедуктивны и не индуктивны.
Аноним 05/03/21 Птн 22:14:35 195865226
>>1958650
смысле блять? ретурн на английском вернуть. че не так?
Аноним 05/03/21 Птн 22:24:23 195865927
Аноним 05/03/21 Птн 22:31:42 195866328
Аноним 05/03/21 Птн 23:23:17 195870729
>>1958663
Нет, именно в куда-то. В место вызова функции.
Аноним 06/03/21 Суб 01:52:54 195878830
Я тут спрашивал в прошлом треде о авторизации для AJAX запросов.
В общем сделал так:
При каждой авторизации юзера создается/обновляется токен
При выходе с аккаунта планировал токен удалять, но понял что это приведет к ошибкам при двух и более одновременных сессиях/SPOILER]
При каждом дергании токена ( эвент retrieved ) проверяется, не протух ли он. Если протух, то токен обновляется.
Токен пробрасывается в html в мета тег. При отправлении AJAX запроса в javascript, он берется оттуда и пробрасывается в header
В миддлваре, при обнаружении AJAX реквеста с токеном в хедере, реквесту назначается юзер с таким токеном ( офк, если токен не протухший )

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

Действительно ли это весомые проблемы? И если да, то как они решаются? Есть идея делать очень маленькое время протухания, например 60 секунд, и каждые 55 секунд запрашивать по аяксу новый токен, пока не протух старый. Но это по-моему как-то слишком.
Аноним 06/03/21 Суб 09:17:43 195884431
Аноним 06/03/21 Суб 09:35:25 195884732
>>1958788
Очевидная дополнительная проверка на мета данные браузера и другую тех информацию от юзера.
Аноним 06/03/21 Суб 10:35:24 195886133
>>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 не очень подходит для начинающих с нулевыми знаниями, как мне кажется.
Аноним 06/03/21 Суб 10:38:42 195886434
>>1958580

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

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

Зачем так сделано? Логику тут найти трудно. Спроси у автора языка Си, зачем он так придумал. Я подозреваю, что просто потому что в компьютерах тех времен была команда для этого, вот он и скопировал ее в язык.
Аноним 06/03/21 Суб 10:46:18 195886735
>>1958592

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

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

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

return "текст";

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

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

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

return ["текст"];

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

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

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

Аноним 06/03/21 Суб 10:53:55 195887036
>>1958788

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

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

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

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

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

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

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

Аноним 06/03/21 Суб 10:57:17 195887137
>>1958867
тут фишка в чем,изначально я просто сделал проверку.где просто проверяли и выводили все найденные ошибки,но выполнение проги не останавливается!
можно конечно после каждого echo сделать die,но токга прога выведет первую попавшуюся ошибку и завершит процесс
Аноним 06/03/21 Суб 12:10:40 195891738
Какие версии встречаются сейчас в живых проектах?
Произошел перекат на 7 или как попадется?
Вымер ли рынок искаробочных хостингов?
Аноним 06/03/21 Суб 13:18:44 195895339
>>1958503

Возможно, кто-то что-то не так понял. Ты можешь сделать, чтобы функция проверки возвращала true/false, но тогда ты не сможешь вывести, в чем именно ошибка. Лучше сделать функцию, которая либо вернет текст ошибки, либо null, если ошибок нету. Либо можно возвращать массив ошибок, если он пустой, то ошибок нет. С массивом плюс в том, что можно вернуть несколько разных ошибок сразу.
Аноним 06/03/21 Суб 13:19:39 195895440
>>1958871

Я не понял, в чем проблема. Если ты хочешь при ошибках делать die(), то поставь if с нужным условием.
Аноним 06/03/21 Суб 13:33:15 195895941
>>1958954
я написал же,если в первой проверке есть ошибка,он выведет эту ошибку и умрет.не проверив следующие условия.
вроде все и правильно,не не идеально
Аноним 06/03/21 Суб 13:35:18 195896242
>>1958953
> С массивом плюс в том, что можно вернуть несколько разных ошибок сразу.
попробую с массивами зайти еше раз
Аноним 06/03/21 Суб 15:11:55 195901843
>>1958870
>А зачем ты используешь токен для аякс-запросов на сайте? Обычно токен используется для сторонних приложений, которые вызывают твое API.
А как еще мне, например, отправить коммент от юзера по аяксу? Юзер в аякс запросе же никак не идентифицируем. Если я просто пошлю запрос, $request->user() будет возвращать null.
Алсо, здесь мне так и посоветовали делать: >>1955771 →
Или ты предлагаешь мне через яваскрипт как-то вытягивать данные из кукисов и сессии? Это же вроде небезопасно и по умолчанию невозможно, нет разве?
>Не очень понятно, зачем делать короткий срок жизни токена и мучаться с продлеванием, если можно сделать время жизни токена больше, чем время жизни авторизационной куки и не мучаться.
Чтобы когда хакер украдет токен, у него не было времени с ним что-то плохое сделать. Но это все похоже мои шизоидные теории, так что не обращай внимания.
Аноним 06/03/21 Суб 16:28:40 195906844
>>1958867
а как извлечь извлечь из функ,если return['$login','$country','$password','$email'];?
Аноним 06/03/21 Суб 16:35:20 195907545
>>1959018

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

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

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

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

Я думаю, кто-то что-то напутал. Токены используются в API, к которым обращаются внешние приложения. Там не используются авторизационные куки, нет сессии, потому нужен токен. Также токен может использоваться, чтобы ограничить его использование по времени или ограничить набор прав для него (то есть токен может давать меньше прав, чем полноценный логин).
Аноним 06/03/21 Суб 16:38:39 195907946
>>1959068

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

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

Либо

[$login, $country, $password ] = $array;

Аноним 06/03/21 Суб 16:42:18 195908747
>>1959079
но это массив в функции,просто так его оттуда не достать
делать через list()?
Аноним 06/03/21 Суб 16:48:46 195909648
Аноним 06/03/21 Суб 16:53:59 195910249
val3.jpg 79Кб, 795x668
795x668
Снимок экрана 2[...].jpg 67Кб, 714x704
714x704
>>1959096
вот здесь хрен знает какая попытка
рядом попытка в ООП
Аноним 06/03/21 Суб 17:00:59 195911150
>>1959102

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

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

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

Справа, увы, не ООП, а просто код со словом class. У тебя все сделано статикой. То есть ты не можешь, например, создать 2 объекта для 2 разных форм. И опять же, у тебя все вперемешку - и проверка данных, и вывод результата сделан вместе. Это не ООП.
Аноним 06/03/21 Суб 17:59:38 195919351
>>1959075
Бля, спасибо тебе огромное что на путь истинный направил.
Жаль что ты не ответил мне еще в том треде, а то я всё это время потратил на то, чтобы нормально осуществить эту авторизацию, а оказалось что я говна бесполезного накостылил и все с коробки работает.
Просто я был почему-то уверен, что JS с куками взаимодействовать не должен.
Плюс, я не с головы взял, что $request->user() null возвращает. У меня действительно такое было, только я в тот момент не подумал, что это могла просто авторизационная кука протухнуть. А наверняка так и было.
Ну я и лох конечно. Еще и весь этот позор на гитхаб запушил.
Аноним 06/03/21 Суб 18:53:19 195923952
Тут есть анончик среднего уровня, который будет иногда помогать с заказиками?

Новичек-кун, @kotovoi
Аноним 06/03/21 Суб 19:20:18 195926353
Снимок экрана 2[...].jpg 64Кб, 751x697
751x697
>>1959111
а так ООП?
вроде работает
Аноним 06/03/21 Суб 19:43:52 195928154
>>1959263
О разделении ответственности ( на конкретном примере, что функция не должна и выводить что-то на экран, и проверять значение ) тебе уже писали.
О именовании тоже писали сотню раз. Ну какое нахуй $var?
О указании тайпхинтов тоже писали.
В чем логика, что функции lenght() и symbols() еще и возвращают логин?
И самое главное, ты проебал всю изюминку ООП - инкапсуляцию. Зачем вообще нужен такой класс, у которого я должен явно вызывать методы проверки валидности по каждому правилу?
Аноним 06/03/21 Суб 19:43:57 195928255
>>1959263
а не,оно потом сможет ошибку записать в БД
Аноним 06/03/21 Суб 20:19:46 195931556
>>1959263

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

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

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

Также, научись форматировать код по PSR-1 и PSR-12. Если ты не можешь настроить плагин к редактору, то научись писать сразу с правильным форматированием. Во втором посте треда есть информация про форматирование кода. Я проверил - для VS Code частично помогает этот плагин: https://marketplace.visualstudio.com/items?itemName=kokororin.vscode-phpfmt

Аноним 06/03/21 Суб 22:53:10 195939957
>>1959315
тыб ему просто про паттерный ооп написал солид, драй и тд, банду четырех пусть читнет.
мимокрестораб
Аноним 07/03/21 Вск 07:17:13 195956158
image.png 68Кб, 1279x724
1279x724
function longest($a, $b) {
return count_chars($a.$b, 3);
}
echo longest("hskfkwiiweqqaaa", "lllfkoioeooqioaskzz");
//вывод — aefhikloqswz

Классная функция. Вдруг кому полезно будет.
Аноним 07/03/21 Вск 16:00:16 195988659
>>1958531
>Какие подводные?
Вкатываться в пыху, проживая в дс
Аноним 07/03/21 Вск 16:04:38 195989460
>>1958917
В основном 7ые версии на проде сейчас. Найти что-то на 5ых версиях нужно постараться.
Аноним 07/03/21 Вск 16:09:53 195990161
>>1959263
Бросай это дело. Программирование явно не для тебя.
Впервые вижу, чтобы так долго безрезультатно вникали в основы кодинга
Аноним 07/03/21 Вск 16:42:30 195991262
>>1959901

Но это единственный путь иметь хоть какую-то норм зпшку здесь((
Аноним 07/03/21 Вск 16:48:35 195991563
>>1959901
>Впервые вижу, чтобы так долго безрезультатно вникали в основы кодинга
значит он читал не те книжки или вообще не читал, погромирование это не искусство, а ремесло, формошлепай и прибудет с тобой трудовой стаж.
нет бы вынести Design Patterns, чистый код мартина, полюбому есть специфический учебник по пыхе по типу "как перестать писать говно", в шапку.
Аноним 07/03/21 Вск 17:43:01 195995964
>>1959886
а куда вкатываться? для джавы, го, си++, сишарп я туповат. в питоне вообще дата саенс и матан, там мне дорога закрыта. я с математикой вообще не в ладах
Аноним 07/03/21 Вск 17:54:32 195997065
>>1959901
нет.
я должен доделать проэкт до финала
Аноним 07/03/21 Вск 17:56:55 195997666
>>1959915
читал,и не одну-в целом поверхностое говно для полных нулей,бер рил прожект.
приходиться много гуглить,но там 99% процедурный код-зато работает и понятней
Аноним 07/03/21 Вск 18:05:20 195999067
Подскажите, кто в курсе, какие тестовые задания сейчас дают джунам на ларавел?
Из того, что я находил в интернете - дают задание написать какой-нибудь CRUD. Но, возможно, сейчас какие-то ещё появились заебы?
Видел ещё инфу, что кто-то требует покрывать тестами весь код. Это действительно так важно сейчас работодателям или можно без этого устроиться? Общие знания о том, как тестами покрывать у меня есть, но мне лень было с этой еботней заморачиваться. Впрочем, если это так важно работодателям, то придется хули
Аноним 07/03/21 Вск 18:21:25 196001668
>>1959990
>дают задание написать какой-нибудь CRUD
тот же круд везде это не системщина
>Это действительно так важно
да но времени не всегда хватает
Аноним 07/03/21 Вск 18:25:10 196002069
>>1959976
>бер рил прожект
мне уже не надо, но если код с прода != хороший код, шаблоны проектирования хотя нужно иметь представление что это, тем более на собесе за них спрашивают в любом яп.
Аноним 07/03/21 Вск 18:30:29 196002570
Аноним 07/03/21 Вск 18:35:31 196003171
>>1960020
я не собираюсь работать кодером
Аноним 07/03/21 Вск 18:38:54 196003572
Меня заебал шарп, потому что на всех работах требуют не просто пилить бек, но и фронт на ангуляре/вью/реакте ну и прочей хренью заниматься, типа, блядь - лезть в залупу на сокетах хуячить, а я в универе наигрался с сокетами.
Так вот, в моей мухосране 2 варианта карьеры бекендера: шарп и пхп.
Вот и я заинтересовался ПХП. Поясните, не начнется ли с определенного момента эта же залупа с тем, что не достаточно просто пилить бек? Как я понимаю, чтобы вкатиться - нужно симфонию и/или ларавель покурить, да сделать какой-нибудь интернет-магазин, чтобы закрепить знания или что-то еще там нужно особое знать?
Аноним 07/03/21 Вск 18:41:24 196003873
>>1960031
ты потом откроешь свой же код и нихуя там не поймешь/надо будет его расширять а там пиздец.
Аноним 07/03/21 Вск 18:43:06 196003974
>>1959959
Ты реально затупок, один из популярнейших фреймворков веба как раз на питоне
Аноним 07/03/21 Вск 18:44:16 196004375
>>1960038
я согласен в целом,что даже эстетически мой код всрат-но рабочая процедурщина.Короче,как вы говорите-херак и в продакшен
Аноним 07/03/21 Вск 18:48:24 196005276
>>1960043
дело не в эстетике, процедурный код забит гвоздями и его проще переписать чем расширить, слишком абстрактный код перегружен и хрупок, одно изменение может потянуть пол кода.
Аноним 07/03/21 Вск 18:51:04 196005777
>>1960052
>слишком абстрактный код
как раз хотел спросить про ООП,если много кода,много связей,как вы ориентируетесь в нем,особенно если там несколько слоев?
Аноним 07/03/21 Вск 18:56:47 196006278
>>1959959
Я не затупок. Чтобы изучить джанго, надо понять от а до я питон. Как мне кажется, без матана ты его хуй поймёшь.
Аноним 07/03/21 Вск 18:57:43 196006579
>>1960062
>без матана ты его хуй поймёшь
Сказки питономакак
Аноним 07/03/21 Вск 18:58:49 196006680
>>1960057
есть принципы проектирования solid, dry, kiss, grasp и другие, вот их и придерживаемся, когда несколько человек пишут в одном стиле то каша более понятная.
Аноним 07/03/21 Вск 19:09:03 196008681
>>1960065
То есть питон на самом деле можно выучить без матана?
Аноним 07/03/21 Вск 19:42:39 196014682
>>1959990
Задам смежный вопрос: насколько часто на джуна вообще просят тестовое? Как по мне это ебанистика полная. За пару минут беседы же можно вполне +- понять уровень человека, если не задавать вопросы с листочка. Да и есть у меня гитхаб допустим, там интересные проекты которые месяцами делались, за каждую строчку могу пояснить и доказать что не верблюд. В чем прикол заставлять соискателей делать для каждого работодателя какой-то шаблонный круд с тестами, еще и с ограничением в какие-то условные 2 дня? При том что для меня эти два дня могут являться двумя вечерами после 13-часового таскания бетонных хуев, а для какого-то Ваньки это 48 часов, за которые это все дело даже обезьяна нагуглит и сделает. И какой вообще уровень эти круды могут показать?
Аноним 07/03/21 Вск 20:57:52 196021783
>>1960146
>За пару минут беседы же можно вполне
нет нельзя
Аноним 07/03/21 Вск 22:31:33 196027984
>>1959959
>а куда вкатываться?
Явно не в разработку.
Вон тестером попробуй, девопсом, фронтом, аналитиком. Но в бек путь заказан.
Аноним 07/03/21 Вск 22:33:53 196028185
>>1960043
>даже эстетически мой код всрат-но рабочая процедурщина
Не, ты даже до рабочей процедурщины не дошел еще.
Аноним 07/03/21 Вск 22:34:33 196028286
>>1960035
А на пхп попросят пилить фронт на жиквери
Аноним 07/03/21 Вск 22:36:04 196028487
>>1960146
Если у тебя есть гитхаб и можешь пояснить за код там - навязывай его вместо тествого, типо чтобы время не терять.
Суть в том, чтобы убедить работодателя, что ты не хуй с горы и можешь код писать.
Аноним 07/03/21 Вск 22:42:07 196028988
>>1960035
На пхп такой залупы больше. Проекты проще, квалификация исполнителей часто ниже, работодатели привыкли экономить на труде, им не нужны хорошие беки, фронты, дизайнеры, поэтому ты будешь этим всем заниматься. Не одновременно же! Сначала одним, потом другим, так что не пизди, что двоя зряплата должна быть как у двух-трех спецов.
Аноним 07/03/21 Вск 23:45:15 196035289
>>1960035
> лезть в залупу на сокетах хуячить, а я в универе наигрался с сокетами.

Ору, блядь. Выкатывайся из профессии нахуй, наигрался он.
Помогите с Laravel Аноним 08/03/21 Пнд 10:22:28 196045990
operaNWwQ4Kkm7a.png 13Кб, 1120x234
1120x234
Может кто подсказать как сделать так что бы при выборе option менялось значение цены которое соответствует для имени
Аноним 08/03/21 Пнд 10:43:24 196047291
Аноним 08/03/21 Пнд 12:08:15 196052092
>>1960279
это схуя ли? Фронт для меня дрочь дичайшая, не хочу даже туда соваться. Хочу в бэк и пойду в бэк, на твоё мнение мне вообще поебать, выблядос
Аноним 08/03/21 Пнд 12:26:05 196053793
>>1960086
Ну совсем без матана нет, нужно уметь складывать, вычитать, делить, умножать, иногда ещё в степени возводить и корни извлекать, но это редко. Ещё желательно синус от >>1960066
косинуса отличать, но не обязательно.
Аноним 08/03/21 Пнд 13:08:52 196056294
>>1960520
Вангую, зайду через год в тред, а ты всё вкатываешься
Аноним 08/03/21 Пнд 13:17:10 196056895
>>1959901

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

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

>>1959399

Да не нужны тут никакие паттерны, чтобы форму проверить.

Аноним 08/03/21 Пнд 13:23:47 196057296
1615199065420.png 315Кб, 822x679
822x679
>К тому же, основы кодинга - что какая команда делает - он как раз изучил. Ему нужны не основы, а учиться разбивать код на функции и тд. А для этого надо больше практиковаться и писать код.
Лол
Аноним 08/03/21 Пнд 13:26:10 196057397
>>1960537
Ну на таком уровне знаю, конечно, не совсем же ебанат.
Даже производные смогу решить, лол.
>>1960562
Буду рад вновь увидеть червя тут, залетай
Аноним 08/03/21 Пнд 13:30:10 196057898
>>1960572
Тоже не понимаю, почему эта чмоня агрится?
Ему же советуют не тратить время зря.
Он же даже не сможет пояснить, что каждая строчка тут делает.
Аноним 08/03/21 Пнд 14:00:51 196060699
>>1960568
>Что значит "впервые вижу"? Ты что, препод и тебе есть с чем сравнивать?
Да, есть с чем сравнить. Видел многих вкатунов, и они явно получше соображают.

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

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

>Ему нужны не основы, а учиться разбивать код на функции и тд.
Ему нужны основы, он даже без функций код не может написать, или написать код одной функции
Аноним 08/03/21 Пнд 14:09:57 1960615100
>>1960606
>он даже без функций код не может написать
код без функций? че?
Аноним 08/03/21 Пнд 14:29:27 1960643101
>>1960615
Без своих функций, обычную лапшу
Аноним 08/03/21 Пнд 14:30:42 1960646102
>>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 и добавить скриншоты, если ты захочешь потом показывать эту работу в резюме.

Аноним 08/03/21 Пнд 14:39:38 1960670103
>>1960643
лапша это неструктурированный код, он может работать.
Аноним 08/03/21 Пнд 15:22:21 1960740104
>>1960646

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

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

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

Спасибо большое, Анон, что указал на косяки и что можно исправить. Как думаешь, можно уже пытаться по собесам походить ?
Аноним 08/03/21 Пнд 15:49:07 1960782105
>>1960646

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

Критикуй, Анонче!
Спасибо!
Аноним 08/03/21 Пнд 19:14:26 1961264107
>>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)

В Симфони атрибуты реквеста используются и для других вещей - например, код может до вызова контроллера определить город пользователя и сохранить в атрибутах. А контроллер его оттуда возьмет. Но опять же, мне кажется, это коряво, а реквест из-за атрибутов превращается в свалку нетипизированных данных.
Аноним 08/03/21 Пнд 19:26:11 1961293108
>>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.

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

- поменять названия переменных
- отформатировать код по правилам
- попробовать его укоротить, как я описал выше (не теряя читабельности. Не надо пытаться запихнуть несколько строчек в одну).
Аноним 08/03/21 Пнд 19:36:58 1961327109
>>1961264

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

> Это $1 в Симфони называют "атрибутами" и роутер после разбора URL помещает их в $request->attributes.
После прошлого ответа еще посидел подумал и в голову похожая идея пришла. В плане того, что раз это параметры маршрутов, то и разбирать их должен непосредственно сам роутер, а не реквест. Значит в правильную сторону мыслил
Аноним 08/03/21 Пнд 19:46:53 1961349110
>>1961293
> $iSpelling
>Тоже неудачное название.
В общем, лучше всего давать переменным имя, которое максимально будет ее описывать, если это возможно, так?
>Должно быть $k = 0 так как дальше $k сравнивается с числам (if ($k>0)), а null сравнивать с числом неправильно.
Когда писал это, почему-то боялся, чтобы при $k=0 не получилось фигни типа "шестнадцатьноль". Теперь понял, почему этого НЕ получится. Спасибо.
>Код функции small_number_to_text можно упростить, если вместо переменных $iSpelling, $jSpelling и тд добавлять слова в массив. Тогда не нужны будут ветки, где переменным присваивается null.
Пробовал так делать. Но при объединении массива через implode (' ',$x) добавлялись лишние пробелы в числах, в которых отсутствовали сотни, десятки или единицы. Я что-то делаю неправильно?
>Лучше назвать $result или $spelling.
Нет, я все-таки так и не понял принципа названий переменных. :3


В остальном спасибо, Анон, ты как всегда охуенен!
Аноним 09/03/21 Втр 09:16:28 1961634111
Анон, тупой вопрос. Я вроде думал что понимаю что такое API, REST, вся эта блудня с create|update и т.д. Но как обычно практика все пом есстам расставила, лол.
У меня есть раздел ( группа роутов ) приложухи (слим 4), в ней роуты на просто отрисовку страниц, пост-запросы от форм, а так же c этих страниц несколько ajax-запросов к серверу.
Трабла возникла когда я захотел проверку прав закинуть в мидлвэйр на группу роутов, а роуты у меня внезапно ( ага ) есть те что возвращают шаблоны, а есть те что возвращают ajax. Соответственно мидлвэйры могут быть разные, но я хотел как то по группам группировать.
Так вот вопрос - можно ли назвать те маршруты что обрабатывают ajax запросы - API? И нужно ли мне их вынести в отдельный раздел и отдельные классы?
А то, условно, у меня в одном классе контроллера находятся как методы что обрабатывают обычные запросы от браузера, так и те что обрабатывают ajax.
Аноним 09/03/21 Втр 17:47:51 1962089112
Есть ли такая команда, которая позволяет выводить текст с сайта в виде файла txt? У меня есть код, который выводит данные БД в виде JSON, но я не знаю как сделать так, чтобы он выдал мне этот JSON текст в виде txt файла.
Аноним 09/03/21 Втр 18:07:56 1962105113
Аноним 09/03/21 Втр 18:09:53 1962108114
Аноним 09/03/21 Втр 19:23:12 1962155115
>>1962089

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

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

Аноним 09/03/21 Втр 19:32:26 1962165116
>>1961634

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

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

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

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

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

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

-----

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

Некоторые выносят API отдельно, но мне кажется это актуально, если у тебя есть настоящее, документированное API для внешних сайтов или устройств. Если у тебя просто обработчики аякс запросов с сайта, я бы не называл это полноценным API.
Аноним 09/03/21 Втр 19:37:17 1962169117
>>1961349

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

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

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

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

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

$words[] = getWordForm($millions);

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

$x = $spelling[$j];

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

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

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

не добавляй в массив пустые строчки и пробелы не появятся.
Аноним 09/03/21 Втр 19:41:28 1962175118
>>1961327

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

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

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

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

У тебя сортировка сейчас, как мне кажется, сделана некорректно. При смене сортировки результаты на странице (например, первой) должны меняться, а у тебя они не меняются.
Высрал код Аноним 09/03/21 Втр 20:48:04 1962255119
image.png 75Кб, 1434x924
1434x924
Здраствуйте аноны в общем я хотел написать на laravel с 0 знаниями форму где динамически добавляются новые строки в таблице по нажатии кнопки. Добавление и удаление я сделал, но получилось крайне хуево, можете дать совет. Как обойтись без смешивания js, html, php
Аноним 09/03/21 Втр 22:09:24 1962354120
>>1962255
> Как обойтись без смешивания js, html, php
Никак. Динамическое изменение страницы без перезагрузки по другому не сделать.
Аноним 09/03/21 Втр 23:00:30 1962389121
>>1960646

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

>>1962175

>У тебя сортировка сейчас, как мне кажется, сделана некорректно.
Да, я уже исправил. Просто изначально думал, что должны сортироваться только те данные, которые в данный момент юзер видит на конкретной странице.
Аноним 09/03/21 Втр 23:01:48 1962391122
>>1962255
Можно переложить рендер из жс в пхп, но тогда будут перезагрузки на каждый чих, а на беке придется хранить состояние отрисованных элементов.
А от хтмл никак не избавишься, если нужен UI.
Чистый бек это какой-нибудь JSON API
Аноним 09/03/21 Втр 23:41:26 1962419123
А чем отличаются Laravel и Symphony? Они разные задачи решают? Я не пыхер, просто интересно.
Аноним 09/03/21 Втр 23:49:28 1962421124
Почему в ларавеле по умолчанию в .gitignore не прописаны автогенерируемые вебпаком папки/файлы из public? Может быть в этом есть какой-то здравый смысл? Или просто потому что?
>>1962419
Symfony - джава-стайл для крупных проектов
Laravel - RAD-фреймворк для хуяк-хуяк и в продакшен. Антипаттерн на антипаттерне, почти что вордпресс.
Аноним 10/03/21 Срд 00:12:37 1962437125
>>1958281 (OP)
Какие кавычки использовать более правильно и почему?
Аноним 10/03/21 Срд 00:14:26 1962441126
>>1962419
Ларавел - комбайн по типу Рельс, поставил и пользуйся.
Симфони - набор пакетов, которые можно использовать независимо друг от друга
Аноним 10/03/21 Срд 00:17:23 1962445127
Аноним 10/03/21 Срд 00:20:04 1962450128
>>1962437
Одиночные кавычки быстрее.
Аноним 10/03/21 Срд 00:24:43 1962454129
>>1962441
Только не пакетов а компонент. В композер пакетах бандлы для симфони бывают, хуй ты их где кроме симфони используешь.
Аноним 10/03/21 Срд 00:30:24 1962457130
>>1962454
А компоненты симфони это хуйня такого уровня, что если ты кастомно из них что-то собираешь, то ты скорее сам фремворк общего назначения можешь написать. В практических задачах это не встречается. Так что не надо это постоянно повторять, типа "симфони гибкая".
Аноним 10/03/21 Срд 10:27:52 1962567131
>>1962165
Спасибо за ответ, и за ранее сделанные ответы на мои вопросы тоже спасибо!
>>Там можно сделать глобальную проверку
В сущности так я и реализовал.
Аноним 10/03/21 Срд 12:36:46 1962638132
>>1962457
>ты скорее сам фремворк общего назначения можешь написать
О чем и речь, что симфони может выступать как фреймворком (веб скелетон), так и конструктором фреймворков.

>В практических задачах это не встречается
Крайне редко в очень специфичных условиях. Например, когда делаем прошивку - веб морду для роутера
Аноним 10/03/21 Срд 14:36:20 1962716133
>>1962255

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

Не гони, прекрасно можно обойтись без вставки HTML в JS, просто ты не знаешь про шаблоны.
Аноним 10/03/21 Срд 14:43:02 1962722135
>>1962450

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

И одиночные, и двойные кавычки дают одинаковые опкоды в байт-коде, проверь сам, врун: https://3v4l.org/cXPKF/vld#output
Аноним 10/03/21 Срд 14:44:59 1962723136
>>19627>>1962354
Handlebars.js
я пользуюсь, мне норм.
Аноним 10/03/21 Срд 20:21:52 1963092137
>>1962169
>не добавляй в массив пустые строчки и пробелы не появятся.
Подскажи, правильно ли я понимаю алгоритм (буду описывать простым языком, чтобы не обосраться):
если (существует число сотен) {
$массивПреобразованныхВСловаЧисел[]=$массивСТекстовойФормой[числоСотен];
}
...
то же самое, для десятков и сотен, инструкцию else и elseif можно же вообще не писать?
А потом склеить все через implode ( ' ',$smallNumberInTextArray)?

Но таким же образом нельзя поступать с массивом выбора формы слов для миллионов, тысяч и десятков, ведь там 0-й элемент массива строго соответствует разряду рублей, 1-й элемент - тысячам, 2-й элемент- миллионам.
Я все правильно понял?
Спасибо за терпеливые объяснения.
Аноним 10/03/21 Срд 20:41:22 1963103138
>>1962723
Ващет в жс уже завезли родные темплейты
Аноним 10/03/21 Срд 21:09:43 1963138139
>>1963103
Не мешай людям тащить бесконечное количество зависимостей.
Аноним 10/03/21 Срд 21:18:12 1963149140
>>1962722
Ну чего ты такой серьезный. Это старый, бородатый прикол, про скорость одиночных кавычек. Да и все равно мы тут не байты вычисляем, а в бутылочное горлышко базы данных упираемся.
Аноним 11/03/21 Чтв 09:49:18 1963391141
Почему у меня не работает UPDATE базы данных?
Перепробовал сто вариантов из интернета ничего не работает. Как будто пустота там где строчка с командой UPDATE
как так?
остальное работает, а UPDATe ни в какую
в чём секрет?
Аноним 11/03/21 Чтв 09:51:06 1963393142
>>1963391
Показывай код, хули.
Аноним 11/03/21 Чтв 09:53:18 1963394143
>>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;
}
Аноним 11/03/21 Чтв 10:03:10 1963398144
>>1963394
bind делается для ? плейсхолдеров, а ты сразу вхуячил значения в запрос. Плюс там ещё параметр с какими-то форматами нужен вроде.
Дальше query каким боком там?
Короче, у тебя там косяк на косяке, и это я ещё не шарю в этом mysqli или что это.
Читай документацию.
Аноним 11/03/21 Чтв 10:07:35 1963400145
>>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);
}
Аноним 11/03/21 Чтв 10:11:14 1963402146
>>1963400
В базу ту подключился?
Сделай echo $sql и попробуй исполнить руками этот запрос.
Аноним 11/03/21 Чтв 10:17:39 1963407147
>>1963402
сообщение о соединении с базой есть

echo $sql
выдает
UPDATE `map` SET `owner` = 9 WHERE map.x = 34 AND map.y = 34
ввожу в базу руками
работает
Аноним 11/03/21 Чтв 10:27:42 1963415148
>>1963400
Ты в курсе что это не подготовленный запрос? Ты ж подставляешь переменные тупо в строку $sql
Аноним 11/03/21 Чтв 10:30:29 1963418149
>>1963407
Ну хуй знает тогда.
Аноним 11/03/21 Чтв 10:58:57 1963437150
>>1963415
Покажи подготовленный запрос
Аноним 11/03/21 Чтв 11:14:53 1963442151
>>1963400

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

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

Вдруг что найдется.
Аноним 11/03/21 Чтв 11:16:29 1963443152
Аноним 11/03/21 Чтв 12:18:22 1963489153
>>1963443

У тебя явно проблема при установке соединения с БД. Так как $link должен быть объектом, а не NULL. Покажи код установки соединения и сдампь, чему равна $link.
Аноним 11/03/21 Чтв 14:06:11 1963580154
>>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);
Аноним 11/03/21 Чтв 14:08:03 1963582155
Анон. Что лучше wordpress или hugo?
Аноним 11/03/21 Чтв 14:08:34 1963585156
Говорят wp дырявая как наташа, правда?
Аноним 11/03/21 Чтв 14:09:35 1963587157
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) }
Аноним 11/03/21 Чтв 14:33:22 1963629158
>>1963582
>hugo
>cms
>на go
Чет взлольнул.
Зачем го вылез из микросервисного загона в цмс?
Аноним 11/03/21 Чтв 14:38:23 1963637159
>>1963580
Короче, ты в каком-то месте неожиданно обсираешься, тут гадать можно долго, потому что причина неочевидна и не в самой работе с бд. Ищи.
Аноним 11/03/21 Чтв 14:41:27 1963639160
>>1963637
Где искать то? Это практический весь код который проблемный.
Аноним 11/03/21 Чтв 14:44:03 1963641161
>>1963639
Сделай в две строчки.
conn = connect
query(conn, 'update table set hui=1 where id=1')
Должно сработать без вариантов. Потом смотри что отличается.
Аноним 11/03/21 Чтв 14:56:03 1963654162
>>1963629
цмс не цмс. но для блогинга hugo тоже подходит. в чём твой рофл?
Аноним 11/03/21 Чтв 15:02:48 1963661163
>>1963629
wp сайты за 2 секунды ломаются. как ты думаешь, тебе такое устроит такой расклад?
Аноним 11/03/21 Чтв 15:05:12 1963665164
>>1963661
А почему говорят, что wp неуязвим, если ставить последнюю версию пиэйчпи и обновлять плагины?
Аноним 11/03/21 Чтв 15:20:57 1963676165
>>1963665
обновлять плагины? а ты думаешь избежишь от взлома? а хер там было с маслом. один фиг будут ломать школохакеры. и будут внедрять вирусы, рекламы, всякая чепуха. возможно и станет в ряды ботнетов у китайских школяров. а в hugo всё ахуенно, он железобетонен. в markdown пишешь и пушишь в github. в netlify автоматом билдиться. и всё это невъебически защищен от всех криворуких.
Аноним 11/03/21 Чтв 15:27:32 1963677166
>>1963676
Да, говорят, что хакеры ломают только старье с известными уязвимостями, а если все обновлять, обновлять версии вордпресса, обновлять плагины, обновлять версии пиэйчпи, менять пароль все время, все время, то вордпресс будет неузявим! Так говорят в интернете!
Аноним 11/03/21 Чтв 15:32:15 1963681167
>>1963676
Говорят, что новая версия вордпресса неуязвима.
Аноним 11/03/21 Чтв 15:38:52 1963688168
>>1963681
В общем тебя порадую. В даркнете есть такие форумы как exploit.in, wwh-club и т.д. Ну так вот я недавно видел в экплоите как можно ломать новую версию вп 5 и выше. Уже давно слиты как ломаются вп сайты 5.7.
Аноним 11/03/21 Чтв 15:47:04 1963697169
>>1963641
Так работает, а когда делаю чтобы вставлялось из переменных то перестает работать
Аноним 11/03/21 Чтв 15:48:29 1963701170
>>1963688
Если уязвимость так широко известна, значит ее поправили или скоро поправят.
Аноним 11/03/21 Чтв 16:02:06 1963723171
>>1963701
Да ладно не поправили. Недавно пробовал поднять в виртуалке вп блог, и попробовать взломать. Всё как есть. Ломаются на ура.

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

В том то и дело что уязвимость не известна большинству. Какой среднестатистический вася будет в onion сайтах сидеть? даже топовые менеджеры толком то и не знают, что существуют такие дыры в этих цмсках. в теплых офисах сидят пьют чай, и ничем не думают. и вдруг внезапно бегают во весь офис вырывая волосы, что их сайт взломали хакеры, что внедрили злоебучий скрипт, который копирует сам себя, распространяя во все датацентры. так ломаются крупные сайты, даже твиттер, фейсбук.
Аноним 11/03/21 Чтв 16:34:20 1963761172
>>1963661
Если ломают цмс на пхп, что мешает сломать цмс на го?
Аноним 11/03/21 Чтв 16:35:23 1963762173
>>1963654
В странном выборе языка. Преимущества го в цмс не задействованы, а вот недостатки тут как тут
Аноним 11/03/21 Чтв 16:46:37 1963778174
>>1963762
в общем ты даже не понял о чем идет речь. на кури https://gohugo.io, темы на любой вкус https://themes.gohugo.io. но я бы не юзал эти темы, а самому лучше создать шаблон как-то удобнее.
Аноним 11/03/21 Чтв 17:30:05 1963847175
>>1963778
CMS
@
CLI


Это для кого вообще сделано?
Аноним 11/03/21 Чтв 17:39:09 1963854176
>>1963847
для людей сделано карл ))
11/03/21 Чтв 17:45:47 1963864177
Вы че, ебанутые? Вы тут на полном серьезе CMS обсуждаете? Насколько нужно себя не уважать, чтобы с таким говном связываться?
Аноним 11/03/21 Чтв 18:01:42 1963879178
>>1963864
Лучше быть просто верстаком, чем с CMS связываться?
Аноним 11/03/21 Чтв 18:03:04 1963882179
>>1963723
А в фреймворках ты типа сам защиту настраиваешь?
Аноним 11/03/21 Чтв 18:11:57 1963898180
>>1963723
>>1963882
З.Ы. я еще не учил, что такое фреймворк. Я пока только вордпресс изучаю.
>>1963864
Я думаю, что начну с ЦМС, потому что фреймворки - СЛОЖНА!
Аноним 11/03/21 Чтв 18:47:08 1963965181
>>1963864
Только рофла ради. Сам это говно даже будучи джуном за км обходил.
Я кажется уже и фреймворки перерос, достался настолько большой проект, что фреймворка в нем не видно
Аноним 11/03/21 Чтв 18:50:03 1963971182
>>1963879
Конечно. Только конкуренция на фронте сильная, но это более квалифицированный труд, ну и зп больше намного даже больше чем у обычных пыхеров.
CMS поедают людей как раз потому, что устроиться с ними работать вообще с нулевыми знаниями проще простого.
Работодатели понимают, что осознанно в этом дерьме копаться мало кто будет, из-за чего выращивают макак с нуля.
В итоге люди по пять лет на CMS работают, а по знаниям не тянут даже на нормального trainee.
>>1963898
И кто тебе такую дурную идею посоветовал? Сам придумал?
Аноним 11/03/21 Чтв 18:54:57 1963981183
image.png 33Кб, 783x342
783x342
>>1963971
>В итоге люди по пять лет на CMS работают, а по знаниям не тянут даже на нормального trainee.
И зарабатывают соответственно. Пикрил самая крупная битриксопараша в городе, берут людей чуть ли не с улицы, лишь бы мог эту коробку шатать
Аноним 11/03/21 Чтв 19:36:04 1964053184
>>1963864
Ну дак речь идет именно тузлов для блогинга, одно цмс пыхой, а другой генератор на golang. В генераторе hugo нужно иметь намного больше багажа знаний. Вот эти: html, js, css, flex, grid, микроразметку, golang в конце-то концов.
Аноним 11/03/21 Чтв 19:39:04 1964060185
hugo.png 86Кб, 1600x900
1600x900
В upwork спокойно рубишь зеленные если владеешь ангельским. В hugo заданиях конкуренции намного меньше, чем wordpress.
Аноним 11/03/21 Чтв 19:40:06 1964062186
>>1964053
>Вот эти: html, js, css, flex, grid, микроразметку, golang в конце-то концов.
Оч сложно
Аноним 11/03/21 Чтв 19:40:51 1964065187
В общем hugo - это jamstack. Кто нихуя не понимает что это за махина? Вот https://jamstack.org/generators также есть в этом списке next.js как многие сейчас в нем пишут.
Аноним 11/03/21 Чтв 19:42:44 1964067188
>>1964062

конечно. кто может писать всё нативе? вот именно сложно.
Аноним 11/03/21 Чтв 19:51:38 1964085189
>>1964067
Сарказм не понят.
Эти вещи из базового уровня веб макаки, хз как без них в 2к21 девелопить
Аноним 11/03/21 Чтв 20:05:44 1964110190
>>1964085

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

Ну дак то и имелось ввиду, не как макаки. Мало кто правильно имеет логично писать в html, css. Многие пишут без разбора, вермишелят как попало. Хоть бы подкурили бы разных методологий бэм например.
Аноним 11/03/21 Чтв 20:25:38 1964147191
>>1958844
var_dump ($arr); код пыхи обернуть в тег <pre>
Аноним 11/03/21 Чтв 20:34:46 1964165192
image.png 34Кб, 643x331
643x331
анонче, почему так:
http://phpbook.ga/l1/loops.html
в уроке говорится, что всего выплат должно быть 61270 р. за 13 мес.

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

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

и у меня в 11 месяце остается 4к и всё какбэ
в чем прикол?
Аноним 12/03/21 Птн 01:30:08 1964479193
>>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;
}
Аноним 12/03/21 Птн 01:31:22 1964481194
>>1964479
Блин, знак умножения исчез, короче где 0.03 там имеется в виду умножение
Аноним 12/03/21 Птн 07:37:42 1964568195
А почему mysqli_query работают а когда внутрь функции пихаешь то перестают работать?
Аноним 12/03/21 Птн 11:27:25 1964666196
>>1964568
Пример бы хоть показал, пиздун.
Аноним 12/03/21 Птн 11:29:53 1964668197
Аноны, какую либу можно заюзать для авторизаци/регистрации и проверки прав? приложуха slim 4, ORM eloquent.
Раньше юзал Cartalist/Sentinel она как раз использует улоквент, думаю ее снова заюзать. Но может другие варианты есть?
Аноним 12/03/21 Птн 12:26:46 1964706198
>>1964668
> Раньше юзал
Если всем устраивает, зачем наворачивать другое?
Аноним 12/03/21 Птн 12:43:21 1964711199
>>1964706
Для расширения кругозора мб
Аноним 12/03/21 Птн 14:45:47 1964822200
>>1964065

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

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

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

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

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

И грид тоже отстой, так как не поддерживается старыми браузерами. Зачем тратить свои силы, чтобы получить убогий HTML код, работающий только на твоем компьютере, когда можно писать хорошую кроссбраузерную верстку, которая отображается даже в IE. Убогие всегда найдут какую-нибудь отмазку, лишь бы не признавать свои слабые скиллы.
Аноним 12/03/21 Птн 14:56:03 1964834201
>>1964822
>можно писать хорошую кроссбраузерную верстку, которая отображается даже в IE
Кто-то еще пользуется ишаком?
Аноним 12/03/21 Птн 15:40:18 1964878202
>>1963676

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

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

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

Хотя на практике людям нужны сайты с админкой, а не редактировать маркдаун на гитхабе.
Аноним 12/03/21 Птн 15:44:55 1964881203
>>1963092

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

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

Не понял, о каком массиве идет речь и зачем его склеивать. Ты сначала получаешь письменное представление числа (например: "сто пять"), кладешь его в массив слов. Затем получаешь форму слова "миллион", тоже кладешь его в массив слов. Потом кладешь туда представление тысяч, потому форму слова для "тысяч" и тд.



Аноним 12/03/21 Птн 16:01:40 1964907204
Я вкатываюсь, еще учебник до конца не прошел. Уроки по вротпрессу штурмую. Фреймворки не смотрел даже. Ну, хорошо, вы говорите, что вротпресс дырявый.

А с фреймворками там че? Там как так получается, что защита лучше, чем у вротпресса? Или ты самописную защиту должен хреначить? НИЧЕ НЕ ПОЙМУ!
Аноним 12/03/21 Птн 16:05:29 1964912205
По вротпрессу говорят, что надо ставить последнюю версию вротпресса, плагины обновлять до последней версии, надо чтобы был SSL, https. Настроить htaccess. Все время менять пароль. И ТОГДА ВРОТПРЕСС СТАНЕТ НЕУЯЗВИМЫМ!!!!!!!! Так говорят в интернете.
Аноним 12/03/21 Птн 16:13:11 1964923206
>>1964907
В фреймворках зачастую единая точка входа в приложение. Соответственно навесить различных ограничителей проще, чем в вп, где этих точек может быть сотни.
Остальное зависит от настроек веб сервера.
Аноним 12/03/21 Птн 16:13:53 1964924207
72414919.jpg 72Кб, 450x450
450x450
Аноним 12/03/21 Птн 16:16:42 1964927208
>>1964822

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

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

https://www.caniuse.com/?search=css%20grid
Аноним 12/03/21 Птн 16:17:47 1964928209
>>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,
Это в общем плохое решение, так как лишает пользователя удобства. Может, у человека шрифт слишком мелкий или наоборот, мало информации на экран влезает. Я на десктопе часто на сайтах меняю масштаб.

Аноним 12/03/21 Птн 16:19:30 1964930210
>>1964822

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

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

Для этого есть disqus, isso, github issue много чего есть.
Аноним 12/03/21 Птн 16:24:34 1964936211
>>1964927

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

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

Хотя, я вижу, все поступают противоположно тому, что я учу и вовсю используют плохо поддерживаемые технологии. Это понятно, качественно сделать сайт мало кто может, лепят как попало. И ладно бы это были вкатуны, так нет вроде опытные разработчики тоже лепят как придется. Я от работы фронтендеров испытываю только разочарование. Хуже них разве что любители внедрить микросервисы на малоизвестном языке и свалить.
Аноним 12/03/21 Птн 16:31:47 1964947212
>>1964924
Ну, значит надо не использовать плагины из списка ушатанных.
Аноним 12/03/21 Птн 16:35:07 1964959213
>>1964930

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

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

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

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

И ты подаешь hugo как что-то новое, хотя статические генераторы сайтов существуют уже много лет, и есть генераторы на PHP. С которыми ты можешь сделать что угодно, поменять что угодно, и тебе не надо тратить ценное время на изучение языка Го. Зачем нужен hugo, если есть генераторы на PHP?
Аноним 12/03/21 Птн 16:36:16 1964963214
>>1964947
Так ты узнаешь уже после, лол.
Вордпресс это как шиндовс, все хотят его поиметь, потому что дохуя потенциальных жертв пасется.
Аноним 12/03/21 Птн 16:40:03 1964967215
>>1964963
Тогда надо антивирусной утилитой прочесывать код! Я видел какой-то видос, где приводился список эксполитов для пиэйчпи. Потом их пихали на сайт пиэйчпи. А потом прочесывали утилитой антивирусной, и она находила, что вот эту хуйню надо выпилить!
Аноним 12/03/21 Птн 16:52:08 1964997216
>>1964967
Интересно, на чем основан принцип работы подобной лабуды
Аноним 12/03/21 Птн 17:39:30 1965076217
Сосоны, а вы знали, что существует punto switcher, который автоматически меняет раскладку? Типа пишешь дштл и эти буквы автоматически превращаются в link.
Аноним 12/03/21 Птн 17:54:35 1965106218
Как сделать массив $arr как $replace ?

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

$replace = ['a' => ['b','c'], 'd' => ['e', 'f']];
Аноним 12/03/21 Птн 17:56:28 1965109219
>>1965106
reverse на каждом из массивов
Аноним 12/03/21 Птн 18:05:43 1965133220
>>1965109
И как это поможет? И мне нужно только с одним массивом arr работать
Аноним 12/03/21 Птн 18:31:55 1965172221
Аноним 12/03/21 Птн 18:32:20 1965174222
Аноним 12/03/21 Птн 18:35:28 1965178223
>>1965076
> punto switcher
Как там в 2004?
Аноним 12/03/21 Птн 18:38:46 1965182224
>>1965178
А что надо использовать в 2к21 году? СКАЖИ, АНОН! СКАЖИ ГЛАСНО!
Аноним 12/03/21 Птн 18:45:15 1965191225
>>1965178
>>1965182
Я вообще никогда не понимал, зачем это использовать, хуйня какая-то.
Аноним 12/03/21 Птн 18:51:25 1965197226
>>1965191
Чтобы писать код я переключаю раскладку клавиатуры. Например:
echo '<b>Привет мир!</b>';
Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл. И вместо того, чтобы мне исправлять это руками punto swither сам мне все поменяет.
Аноним 12/03/21 Птн 18:53:42 1965198227
>>1965197
У меня такое бывает очень редко, а если и забываю, то сразу это вижу.
Такая же программа наоборот поощряет забывать, вредный костыль.
Аноним 12/03/21 Птн 18:53:54 1965199228
>>1965197
Бывало такое, что он переключал раскладку там, где не надо?
Аноним 12/03/21 Птн 18:54:38 1965201229
>>1965172
>>1965174
И как фореч и рекурсия может изменить вложенные массивы?
Аноним 12/03/21 Птн 18:58:36 1965211230
>>1965201
А ты совсем глупенький?
Может еще за тебя код написать?
Аноним 12/03/21 Птн 19:02:14 1965217231
>>1965182
Я хз где ты там в пхп кириллицу используешь, у меня даже с фронтом таких проблем нет, по большей части ты один хуй пишешь на английском.
Аноним 12/03/21 Птн 19:03:42 1965220232
>>1965217
Тудушки и комменты на русском офк временные
Аноним 12/03/21 Птн 19:07:42 1965228233
>>1965220
Привыкай сразу писать на ингрише, кириллица в коде не нужна.
Аноним 12/03/21 Птн 19:10:04 1965233234
>>1965217
Там где пхп код и в нем верстка.
Аноним 12/03/21 Птн 19:10:52 1965234235
>>1965199
Пока нет, но я только только начал использовать.
Аноним 12/03/21 Птн 19:14:51 1965241236
>>1965233
Хуево, надеюсь это у тебя просто какой-то тестовый прожект. А вообще, полезно научиться слепой печати, тогда проблема неправильной раскладки уйдет на нет и скорость набора существенно вырастет. Я хз как там щас пунто свитчер работает, но раньше он часто обсирался и включал неправильную раскладку.
Аноним 12/03/21 Птн 19:15:53 1965243237
>>1965211
Решил задачу так, норм?
ksort($arr);
asort($arr['a']);
asort($arr['d']);
var_dump ($arr);
Аноним 12/03/21 Птн 19:37:06 1965264238
>>1965228
Она в коммиты не попадает. Тудушки сугубо для себя пишу
Аноним 12/03/21 Птн 21:54:26 1965404239
>>1965197
>Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл
Такие проблемы возникают только у уверенных пользователей ПК, что смотрят на клавиатуру при печатании. Если ты из таких, то что ты здесь вообще забыл?
И, кстати говоря:
>шиндовс
Аноним 13/03/21 Суб 01:38:29 1965566240
>>1965404
>И, кстати говоря:
>шиндовс
А в чем собсна проблема?
Аноним 13/03/21 Суб 07:47:56 1965615241
>>1965197
>Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл

Как ты можешь не заметить, что ты не переключил раскладку, когда печатаешь, если ты смотришь на текст, который печатаешь?
Аноним 13/03/21 Суб 08:41:19 1965625242
>>1965615
Потому, что я успею нажать пару кнопок быстрее, чем увижу, что текст стал не той раскладки. Можно конечно удалить эти пару символов, переключить раскладку и заново написать как надо.

А можно до конца дописать "дштл" и punto switcher переделает это на link.
Аноним 13/03/21 Суб 08:42:32 1965626243
>>1965615
То есть печатаешь же быстро. Мгновенно нажал две кнопки, и потом увидел, что там получилось "дш" вместо "li".
Аноним 13/03/21 Суб 10:20:21 1965654244
>>1965615
То есть при слепой печати тоже можно ошибиться с раскладкой, особенно, если ты очень быстро набираешь текст. Ты быстропальцый Абелардо! И ты успеешь нажать пару кнопок и лишь потом поймешь, что эту пару символов напечатал с не той раскладкой!
Аноним 13/03/21 Суб 10:57:20 1965666245
Аноны, недавно, велосипедя свою приложуху понял что она кривая и косая. Короче начал читать Зандстру, 5 издание "Объекты, шаблоны и т.п." - реально книга заходит.
Аноним 13/03/21 Суб 11:00:11 1965672246
>>1965666
пс
Собственно я о том говорю - что до некоторых книг видимо нужно дорасти. У меня возникла проблема что мой код плохо структурирован, я понял что мой код криво - и возникло желание сделать лучше,и понимание того как я уже плохо сделал, и почему.
На мой взгляд эти ооп - проблемы скрывают современные фреймворки с DI - контейнерами работающие на рефлексии.
Когда сам делаешь косо - отлично понимаешь почему косо и неудобно.
Аноним 13/03/21 Суб 13:11:57 1965788247
>>1965076

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

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

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

>>1965178

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

Хотя конечно, удобнее всего было бы иметь выделенные клавиши рус/лат, но западные производители не прислушиваются к мнению русскоязычных пользователей. Даже у Эппл используется убогая раскладка (где русские буквы совмещены с символами, где некоторые символы в разных раскладках на разных клавишах, где не клавиш рус/лат), хотя Эппл делает свое железо и мог бы сделать нормальную клавиатуру, где буквы и символы не совмещены. Но не хотят ради нас заморачиваться.
Аноним 13/03/21 Суб 15:21:33 1965866248
>>1964881
>Не понял, о каком массиве идет речь и зачем его склеивать.
Я опирался на свою программу, где для текстового представления трехзначного числа и форм названий разрядов я использовал разные массивы.
А потом внимательно перечитал то, что предложил ты и понял, что можно легко и просто избавиться от лишнего массива и вкладывать и число и форму слова в один массив, главное только не обосраться с порядком формирования этого массива.
Анон, ты делаешь великое дело: избавляешь от квадратно-гнездового мышления таких мимохуев, как я, тем самым улучшая генофонд планеты :3
Аноним 13/03/21 Суб 15:44:40 1965889249
ОП, или кто тоже разбирается. подскажите вот в чем:
Есть приложение, просто роутер который вызывает обработчики.
В обработчике/контроллере я хочу что то сделать, допустим записать лог в файл.
Пусть у меня нет сервис локатора, или DI контейнера.
Как я реализую подобное:
допустим метод класса обрабатывает запрос
...
public function anyMethod(){

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

$serviceFabric = new ServiceFabric ( new MonologLoggerService );

$serviceLogger = $serviceFabric->getInstanseLogger();

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

}

}

Если абстрагироваться от контейнеров и сервис локатора - такой подход адекватен?
Это фактически мои первые потуги в рамках ООП.
Получается в моем варианте фабрика - это не совсем то что должно быть?
Фабрика возвращать должна один и тот же экземпляр одного конкретного класса - просто с разными настройками?
Или фабрика может возвращать экземпляры разных классов , объединенных общим интерфейсом или абстрактным классом?
Аноним 13/03/21 Суб 15:48:00 1965892250
>>1965889
п.с.
$serviceFabric = new ServiceFabric ( new MonologLoggerService );

в рамках этой строки понятие "инверсия управления" означает ли то что класс ServiceFabric получая в качестве аргумента класс MonologLoggerService - перестает зависить от его реализации?
Или "инверсия управления" это что то иное?
Аноним 13/03/21 Суб 16:53:42 1965963251
>>1965889
> Фабрика возвращать должна
Фабрика может возварщать чт оугодно, тут важно то что ты не напрямую создаешь инстансы нужных тебе класов, а обращаешся к фабрике чтобы она построила что-то подходящее под твою задачу. Естественно чтобы был смысл ебаться с фабриками нужно чтобы она возвращала (как ты и написал) экземпляры разных классов , объединенных общим интерфейсом или экземляр одного класса с разными настройками. Оба варианта возможны но в случае с фабрикой намного предпочтительней первый - для расширения нужно просто добавить новый класс. Второй вариант это скорее для DI (один класс в который передаются разные настройки) - фабрика в общем там лишняя.
> "инверсия управления" это что то иное
Инверсия управления это когда ты напрямую не управляешь порядком выполнения кода, а просто хуяришь отдельные обработчики, а они уже вызываются фрейморком когда нужно.
Аноним 13/03/21 Суб 17:46:04 1965997252
Аноны, помогите понять порядок решения задачи про калькулятор из гайда. Задачу-то я решил быстро, при помощи регулярок:
https://ideone.com/zlq51o
Вполне рабочий калькулятор.
Но потом вернулся к условию и попробовал решить по ТУ, т.е. через посимвольный разбор строки. Калькулятор-то я написал:
https://ideone.com/YqedpG
да вот только мой калькулятор не работает, если первым действием идет деление (почему так? В голове крутится, что я проебал какую-то очевидную, мелкую, но важную деталь в процессе построения цикла) и работает только с целыми числами.
И как при посимвольном разборе строки ввести поддержку дробных чисел без костылей, лишнего дроча, и самозапутывания, в виде нескольких конвертаций строки в разные типы данных?
Аноним 13/03/21 Суб 17:48:27 1965999253
Смотрите, такая задачка. Есть список дат, нужно прогнать их через функцию, которая возвращает список вида [item1 => val, item2 => val2], и в конце записать csv вида item,date1val,date2val,date3val...
Не могу придумать структуру, чтобы последовательно наращивать эти данные для последующей записи.

Аноним 13/03/21 Суб 17:57:10 1966008254
>>1965999
Пока я придумал только два варианта:
- сохранять по датам, а потом дополнительный цикл, чтобы из этого построить новую подходящую структуру
- передавать результат в саму функцию и возвращать обратно с добавлениями, ну или через global
Оба хуевы.
Аноним 13/03/21 Суб 18:43:34 1966059255
>>1958281 (OP)
Аноны:
1) Можно ли будет перекатиться из php в frontend если что или опыт php не будет учтен для frontend?
2) Какой из PHP фреймворков легче учить Symfony, Laravel или Yii2? И за сколько?
3) Нужна ли математика или знания алгоритмов для разработки и поддержки highload проектов и участия в проектировании архитектуры проектов?
4) До чего нужно дойти в php и MySQL, чтобы спокойно пойти на джуна?
Аноним 13/03/21 Суб 18:49:24 1966063256
>>1965889

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

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

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

> Фабрика возвращать должна один и тот же экземпляр одного конкретного класса - просто с разными настройками?
> Или фабрика может возвращать экземпляры разных классов , объединенных общим интерфейсом или абстрактным классом?
Бывает и так, и так. Фабрику обычно добавляют для решения таких проблем:

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

Ну и вопрос: чем тебе не подходит DI? То есть, просто передавать логгер в конструктор твоего класса? Зачем ты начал изобретать какие-то странные решения?
Аноним 13/03/21 Суб 19:00:54 1966070257
>>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 или нет. На первый взгляд, он зависит, так как требует его передачи в конструктор.
Аноним 13/03/21 Суб 19:07:53 1966076258
>>1965999

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

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

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

> и в конце записать csv вида item,date1val,date2val,date3val.
Уже менее понятно. dat1val - это склеивание строк date1 и val?

> Не могу придумать структуру, чтобы последовательно наращивать эти данные для последующей записи.
Непонятно.
Аноним 13/03/21 Суб 19:09:06 1966079259
>>1966076
Это значение для этого item для этой даты.
Аноним 13/03/21 Суб 19:22:46 1966086260
>>1965997

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

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

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

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

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

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

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

> И как при посимвольном разборе строки ввести поддержку дробных чисел
Я думаю, можно собирать цифры в строку, а когда мы доходим до знака операции, вызывать функцию преобразования строки в число.
Аноним 13/03/21 Суб 19:23:41 1966088261
>>1966059
Да и в ОП посте уроки актуальные? Где можно найти хороший, но не длинный курс
Аноним 13/03/21 Суб 19:24:11 1966089262
>>1965997

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

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

и затем сразу

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

Аноним 13/03/21 Суб 19:26:54 1966092263
>>1966079

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

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

Вариант 2:

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

Аноним 13/03/21 Суб 19:36:04 1966096264
>>1966092
Основная проблема в том, что генерируем мы по датам, а выводить потом надо по айтемам.
В принципе я уже решил с дополнительным циклом после каждого вызова, но думал может есть какое-то элегентное решение.
Аноним 13/03/21 Суб 19:50:41 1966116265
>>1958281 (OP)
Есть 2 таблицы,
в одной список упражнений [id - описание]
в другой журнал [id - id_упражнения - день].
При выполнении упражнения в таблицу журнал добавляется запись. Eсли я сейчас сделаю JOIN journal ON exercises.id = journal.exercise_id WHERE day = x ,и всего упражнений 3 а записей в журнале 2 то мне выдаст 2 строки, а хотелось бы чтоб выдавал все 3 с NULL'ами там где записей нет. Это реально?

Аноним 13/03/21 Суб 19:53:32 1966120266
Аноним 13/03/21 Суб 20:31:07 1966149267
1.jpg 40Кб, 551x228
551x228
2.jpg 23Кб, 819x291
819x291
3.jpg 62Кб, 979x238
979x238
>>1966120
уже пробовал, не работает
Аноним 13/03/21 Суб 20:43:06 1966155268
Написал тут часть задачи про сайт тестирования. Так как я ленивый мудень, то занято это значительно больше времени, чем хотелось. ОП, посмотри, пожалуйста
https://github.com/deadj/testhub
Аноним 13/03/21 Суб 20:55:36 1966164269
>>1966149
where выбирает только совпадающие, замени на and
Аноним 13/03/21 Суб 21:21:37 1966181270
Нихуя не понял, как решить задачу про банкомат из гайда.
Жадный алгоритм зделол, а как заставить работать эту хуйню с усложнением условий (выдача минимальным числом купюр 6600)- хуй знает. В подсказке к задаче ебаный матан, а я не люблю математику, где букв больше, чем цифр. Я тупой? Выкатываться из треда?
Аноним 13/03/21 Суб 21:25:38 1966184271
>>1966181
>я не люблю математику, где букв больше, чем цифр
Во всей математике букв больше чем цифр.
Аноним 13/03/21 Суб 22:08:59 1966202272
plachuschiykot.jpg 20Кб, 426x314
426x314
Что-то не могу найти курсов по Магенте 2. Как будто никто не работает с ней. На курсхантере пусто, ютуб разрозненные видео выдает. Подскажите, кто что знает
Аноним 13/03/21 Суб 22:13:40 1966204273
А зачем сделали что php из коробки без шаблонизатора в хтмл лезет?
Аноним 13/03/21 Суб 22:22:30 1966206274
>>1966204
90-е года, дикий веб.
Аноним 13/03/21 Суб 23:10:53 1966240275
>>1966204
php это и есть шаблонизатор.
Аноним 14/03/21 Вск 01:14:55 1966301276
>>1966204
> А зачем сделали что php из коробки без шаблонизатора в хтмл лезет?
YAGNI + KISS
PHP это все-таки бэкенд и шаблонизатор там нужен не всегда (например, если ты только принимаешь данные с формы и выдаешь в ответ какой-нибудь JSON). А если нужен - есть много сторонних решений, используй любое. Зачем разрабам ПХП заниматься шаблонизаторами, если им нужно сам язык развивать и поддерживать.
Аноним 14/03/21 Вск 11:58:15 1966437277
>>1966063
>>Вот например, зачем ты сделал фабрику логгеров? Что тебе мешает сразу создать логгер через new MonlogLoggerService?

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

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

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

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

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

Сорр если туплю, я Зандстру начал читать , разделы про ООП, пока что все немного в кучу. У него сервис локатор это класс, который через статические методы получает и возвращает какие то объекты - паттерн Регистр примерно так.
Аноним 14/03/21 Вск 14:37:01 1966507278
>>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.
Аноним 14/03/21 Вск 19:02:43 1966695279
НЕ ПОЛУЧАЕТСЯ БЛЯТЬ РЕШИТЬ ЗАДАУ,Я ПИЗДЕЦ ТУПОЙ ГУМАНИТАЙРИЙ, ДАЙТЕ ЗНАК ЧТО ДЕЛАТЬ С ЭТОЙ ЗАДАЧЕЙ ИЗ ОП ПОСТА, РАЗБИЛ УЖЕ ЛОБ ОБ ГУГЛ


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

Аноним 14/03/21 Вск 21:15:32 1966840280
>>1966695
Я же выше скидывал как нужно переделать цикл для корректной работы алгоритма

if (($creditBalance + $creditBalance x 0.03 + 1000) < 5000) {
$sumTotal = $paymentTotal + 1000 + $creditBalance + $creditBalance x 0.03;
echo "С меня хватит! Я выплатил {$sumTotal}";
break;
}
Аноним 14/03/21 Вск 22:57:48 1966918281
16083948225120.jpg 167Кб, 547x531
547x531
https://ideone.com/PpCkDJ
Пожилой круг написал на костыличах тупа, остался ряд вопросов: нахуя нужны были $toAngle и $fromAngle? Как напечатать злоебучий пробел, если до него нет других символов? На ideone нельзя кодировку менять? Пришлось английский алфавит выводить.
Аноним 15/03/21 Пнд 00:26:31 1966953282
>>1966840
Спасибо огромное и вообще спасибо тебе за этот Гайд, я давно хожу около этой темы и ты сделал просто супер толчок, именно этого мне не хватало, чтобы дальше изучать самому, ещё раз спасибо, уверен что задам ещё много тупых попросив, но зная что есть такие люди - не страшно делать ничего, редкость в нашей стране
Аноним 15/03/21 Пнд 00:28:43 1966955283
>>1966840
Спасибо тебе огромное анон, только благодаря твоему найду смог начать самообучение, редко встретишь такого человека, спасибо!!
Аноним 15/03/21 Пнд 13:21:56 1967290284
>>1966202
>Что-то не могу найти курсов по Магенте 2
Зачем тебе магента?
Аноним 15/03/21 Пнд 13:28:15 1967302285
>>1966059
1. Можно, но придется изучать новые темы: работу браузера, верстку, жс, жс фреймворки (они работают немного по другим паттернам, нежели бек)
2. Laravel для простого старта. Yii2 устарел. Symfony может показаться переусложненным.
За сколько - от тебя зависит.
3. Математика не нужна. Алгоритмы только основы чтобы не делать запросы к базе в цикле и потом удивляться, а че так медленно. Higload больше про оптимизацию узких мест, про инфраструктуру, про хитровыебанные запросы в бд, про кеширование и т.д.
4. Быть в состоянии запилить CRUD приложуху (на подобии задачи про студентов) на одном из современных фреймворков
>>1966088
Ларакасты глянь например
Аноним 15/03/21 Пнд 19:37:01 1967679286
анонсы, я немножко в ступоре. подскажите один момент. вот есть класс с 4 протектед методами. и есть паблик метод который является аналогом конструктора (класс используется для рендера форм). и вот такой вопрос: мне сверху приходит айдишник формы от 1 до 5 если что, и в зависимости от него я должен дернуть соответствующий protected метод чтобы он отрендерил нужную форму. как такое провернуть с максимально нормально кодстайлом? а то сейчас на ум приходит только тыкать пять if где внутри будет тупо return $this->renderFormName();
Аноним 15/03/21 Пнд 20:02:29 1967716287
Аноним 15/03/21 Пнд 21:24:27 1967801288
16156255712243 [...].mp4 63Кб, 360x360, 00:00:03
360x360
есть база данных с графами "ингридиенты" "блюда"
например, одна строка из базы данных: лук укроп картошка мясо = пюре зразы котлеты картошка
есть кнопка "поиск"
за сколько анон готов сделать поиск по бд?:
1) Вбиваешь "картошка" - выводятся все результаты, где "картошка" хоть слева, хоть справа
2) Вбиваешь в поиск "картошка = " и он искал картошку только в ингридиентах
3) Вбиваешь в поиск "= картошка" и он искал картошку только в продуктах
И если находится такое слово, то выводятся пользователю все строки из базы данных в изначальном формате:
"лук укроп картошка мясо = пюре зразы котлеты картошка"
на биржи не иду, хочу поддержать нашего анона
Аноним 15/03/21 Пнд 21:24:57 1967803289
Аноним 15/03/21 Пнд 21:36:56 1967817290
Swool рабочая тема?
Аноним 15/03/21 Пнд 22:16:21 1967869291
>>1967817
Русский программист swool становится большой богатый, много риса и нефритовый стержень
Аноним 15/03/21 Пнд 22:37:16 1967881292
Аноним 16/03/21 Втр 02:43:41 1968051293
>>1967801
Лол, задача на пару часов.
Скок платишь?
Аноним 16/03/21 Втр 12:04:03 1968348294
>>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/ сюда например с пруфом (чеком) или попущен.
Аноним 16/03/21 Втр 12:11:07 1968352295
>>1968348
быстрофикс

абу звездочки проебал после SELECT-ов в 1 и 2 случаях
Аноним 16/03/21 Втр 14:37:48 1968533296
>>1968348

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

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

Но вообще, структура базы данных какая-то странная. Надо делать отдельно таблицы ингридиентов, блюд и связи многие-ко-многим между ними.
Аноним 16/03/21 Втр 15:12:37 1968592297
>>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";




В чем я не прав?
Аноним 16/03/21 Втр 15:13:45 1968593298
без цикла работает нормально, загоняю в цикл и получаю ошибку
Аноним 16/03/21 Втр 15:18:50 1968597299
Аноним 16/03/21 Втр 15:19:12 1968598300
всем привет, собираюсь вкатиться в пыху.
несть несколько вопросов. буду благодарен, если ответите.
1. Что почитать из русской литературы?
Пока склоняюсь к Котерову + параллельно гуглить
2. В книгах сейчас в основном пыха 7-ая, как потом свитчнуться на 8?
3. мне 25 (не поздно вкатываться?) и я манагер, собираюсь учиться по 2-3 часа по вечерам и на выходных по 5-6. это очень хуево?
Аноним 16/03/21 Втр 15:33:04 1968613301
>>1968597
А, точно, но всеравно у меня выдется ошибка, не могу понять вч ем проблема того тчо я высрал
Аноним 16/03/21 Втр 15:34:29 1968619302
>>1968598
Просто начни вкатваться по инструкции в шапке, как только начнешь понимать принцип работы языка - будешь вдаваться в подробности
Аноним 16/03/21 Втр 16:02:45 1968661303
Аноним 16/03/21 Втр 16:14:00 1968671304
структура.png 27Кб, 584x347
584x347
запрос.png 30Кб, 589x343
589x343
>>1968533
авотхуй
пики смотри
Аноним 16/03/21 Втр 17:51:07 1968799305
image.png 57Кб, 778x829
778x829
>>1968661
Писал выше, вот полный текст, не могу понять в чем именно я ошибся
Аноним 16/03/21 Втр 18:16:05 1968846306
>>1968799
Сотри 24 строку. Ideone, кстати, подсвечивает такие ошибки во время редактирования кода.
Аноним 16/03/21 Втр 18:49:54 1968887307
>>1968598
Начни дрочить как хобби, и выкинь нахуй далеко маня мечты про вкат, про тыщи денег и маня успех. Если ты сейчас по жизни сосешь хуй, то дело в первую очередь в твоей личности и образе мышления и привычках. И поверь - ты так же будешь учить пхп как живешь - через пизду. И работать будешь также, если дотянешь до этого - через пизду и за три копейки.
Начни лучше с личных качеств.
А прогинг как хобби - это может и не зайти нихуя.
Аноним 16/03/21 Втр 18:50:19 1968889308
>>1968846
Спасибо, рад как ребёнок)
Аноним 16/03/21 Втр 18:51:24 1968892309
>>1968887
п.с. мимо 34 лвл, типа вкотился потому что хуебень уже сам пишу всякую за деньги , за 3 блядь года.
но я по вышке - ойти
Аноним 16/03/21 Втр 18:57:15 1968897310
>>1968887

>>1968598

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

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

В чём может быть дело?
На этом же хостинге лежит сайт на Laravel.
C ним таких проблем нет. Если отредактировать blade-файл, то изменения подхватываются на лету.
Аноним 16/03/21 Втр 19:20:59 1968934312
начал учить пхп и решил окончательно перекатиться на линукс.
как поднять свой сервер?
поставил апач 2 и пхп 8.0.3
запускаю в терминале апач и по пути "/var/www/html/test
" есть мой пхп файл, он и обрабатывается.
пока на этом остановлюсь и буду так учить пхп. это правильно?
(знаю про ламп и готовые сервера, но решил попробовать вот так по-деревенски)
Аноним 16/03/21 Втр 19:21:00 1968935313
>>1968897
Слушай, я столько это говна в своей голове перекрутил, что мне в пору в тиктоке блядь людей жизни учить я полу серьезно, я даже имею концепты и темы о чем говорить. Я на этой хуйне собаку сожрал. И полностью принял то что твой успех - это ты сам. Ты точка отсчета.
А люди тащатся в прогинг как за серебрянной пулей что решит их все проблемы - хуй. Проблемы только сам человек может решить, когда осознает.
Аноним 16/03/21 Втр 19:22:45 1968937314
>>1968934
Нахуй тебе сервера вообще?
Дрочи в консоли основы.
Аноним 16/03/21 Втр 19:31:48 1968946315
>>1968937
какие основы в консоли?
основы линукса? или что?
Аноним 16/03/21 Втр 19:44:11 1968957316
>>1968946
начни с прав на каталоги и файлы
Аноним 16/03/21 Втр 19:46:40 1968961317
>>1968957
chmod 777, мне этого достаточно
Аноним 16/03/21 Втр 19:50:58 1968968318
Untitled.png 219Кб, 1920x1170
1920x1170
>>1968946
Да всего. Открываем справочник, веб из этого нужен только нескольким пунктам в конце, и то они решаются средствами фреймворка, поэтому учатся отдельно.
Аноним 16/03/21 Втр 19:57:31 1968981319
>>1968968
я не знаю английского.
Аноним 16/03/21 Втр 20:00:57 1968985320
>>1968981
При чем тут английский? Я тебе говорю, что 95% возможностей языка не требует веба.
Аноним 16/03/21 Втр 20:11:01 1968990321
>>1968985
а причем тут не требуют веба? я хочу сразу понять работу серверов и т.д. Хочу это всё делать в линуксе, а не в ебливой винде
Аноним 16/03/21 Втр 20:14:41 1968993322
>>1968990
Потому что ты на ровном месте намного усложняешь всё.
Но если хочется, то почему нет.
Аноним 16/03/21 Втр 20:21:18 1969001323
>>1968993
усложняю потому что пока не особо понимаю, что к чему. Хочется всё и сразу. Послушаю твоего совета и пока буду не спеша осваивать язык.
Аноним 16/03/21 Втр 22:16:53 1969126324
>>1968799
А мб начнешь писать код в IDE и запускать локально?
Там глядишь и иде подсветит ошибки, и в консоли при запуске выдаст стектрейс
Аноним 16/03/21 Втр 22:19:22 1969128325
>>1968935
>>1968887
Говорят, у коучей прорвало, захлестнуло даже наш тред
Аноним 16/03/21 Втр 22:22:40 1969132326
>>1968990
Тогда поднимай нжинкс, чтобы он при загрузке линя автоматом поднимал сервер. А потом упакуй это в докер и так же, чтобы автоматом поднимало.
Только это путь в девопсы, а не бекендеры.
Аноним 16/03/21 Втр 23:04:23 1969194327
Как пхп исп ядра проца?
Только одно?
Аноним 16/03/21 Втр 23:37:41 1969232328
>>1968914
На stackoverflow посоветовали выполнить: php app/console cache:clear --env=prod.

Проблема в том, что в проекте нет ни app/console ни bin/console.
Симфония как будто не установлена полностью. Composer install тоже не срабатывает (проблемы с совместимостью пакетов).
Аноним 16/03/21 Втр 23:48:57 1969243329
Аноним 17/03/21 Срд 00:45:44 1969273330
>>1968051
500 руб за код и ещё 500 если созвонимся в скайпе и расскажешь, как работает код и немного основных вопросов по пхп, но не дольше часа
@Dima_Kedr
Аноним 17/03/21 Срд 00:58:38 1969287331
Аноним 17/03/21 Срд 01:40:54 1969298332
Аноним 17/03/21 Срд 08:05:48 1969383333
>>1969128
О да, коучем быть заебись - втираешь банальщину, еблом торгуешь. Ахуительно. Главное ебло построже делать, что бы окружающие думали что ты тайное знание открыл.


Аноним 17/03/21 Срд 13:36:02 1969690334
Анон, подскажи по доктрине. Есть джве сущности Tag и Post с отношением one to many. Нужно получить с помощью кверибилдера только те теги, у которых есть хотя бы один пост
Аноним 17/03/21 Срд 13:40:39 1969693335
Аноним 17/03/21 Срд 14:13:38 1969713336
Аноним 17/03/21 Срд 21:38:54 1970124337
>>1968914
Если ты уверен что шаблон точно тот, значит дело в кэше

>>1969232
> Проблема в том, что в проекте нет ни app/console ни bin/console
Кэш можно вручную снести, там для кэша twig отдельный каталог должен быть.
Аноним 17/03/21 Срд 22:02:07 1970145338
>>1968914
Если нет папки console, значит криво установлены пакеы через композер.

Самый быстрый вариант - снести папку кеша. Скорее всего это var/cache.
Аноним 17/03/21 Срд 22:53:17 1970170339
>>1970145
> Самый быстрый вариант - снести папку кеша. Скорее всего это var/cache
Я бы все-таки не сносил все, а ограничился только кэшем твига, а в идеале еще и забэкапить кэш. Особенно если это продакшн.
Аноним 17/03/21 Срд 23:05:06 1970180340
>>1970145
Я только сейчас понял, что сайт хостится на виртуалке, а те файлы, что я пытался редактировать вообще не задействованы.
Забавно то, что сам хостинг представляет собой VDS (хост Fastpanel, ось Debian), и на нём зачем-то запущен VirtualBox.
Аноним 17/03/21 Срд 23:26:01 1970186341
Дайте совета. У меня кодерский стаж менее года, прохожу курсы и потихонечку изучаю бэк параллельно с фронтом, изучаю Laravel на ларакасте и еще материалы.
Мне нужно сделать сайтец знакомому (Без тролинга, реально помощь нужна), там всё поставлено на OpenCart, вроде всё просто, только вот как ориентироваться в этом непонятно, документаций там нет ваще никакой, просто концепт MVC и всё. Вроде он тоже понятен, но! Как находить методы и переменные? Какой то плагин в редакторе использовать? ctags? Помогите пожалуйста.
Аноним 17/03/21 Срд 23:37:59 1970192342
>>1970186
> Мне нужно сделать сайтец
> там всё поставлено на OpenCart
Так нужно сделать с нуля иди доделать/переделать готовое?

> Как находить методы и переменные?
Качаешь сайт себе на локальный сервер и открываешь в IDE
Аноним 17/03/21 Срд 23:59:06 1970212343
>>1970192
>Так нужно сделать с нуля иди доделать/переделать готовое?
Уже поставил базу данных и её заполняют, нужно добавить минимальный функционал и изменить шаблоны сайта чтобы нормально выглядели, для этого нужно передать в контроллер запрос с помощью модели, примерное представление как они работают есть, проблема в их определений, нужно файлы перебирать постоянно чтобы найти тот или иной метод и какие параметры он принимает.
>Качаешь сайт себе на локальный сервер и открываешь в IDE
ДА поставил давно уже, параллельно разбираюсь, не могу понять как методы искать. В Vim вроде есть CTRL+P плагин с ctags.
Может еще какие советы есть как разбираться в непонятном коде?
Аноним 18/03/21 Чтв 08:59:02 1970388344
class A
{
private $varA;

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

Это выебоны программиста?
PHP + API Аноним 18/03/21 Чтв 16:31:27 1970697345
Аноны, можете накидать пример моих действий, есть 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 если приоритетное не отвечает или тормозит
Аноним 18/03/21 Чтв 17:34:30 1970728346
>>1970697
Чистый курл не нужен, юзай газл, твоя задача замечательно ложится на промисы

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

В твоём коде выполнится последовательно
Аноним 18/03/21 Чтв 17:35:43 1970732347
Аноним 18/03/21 Чтв 17:37:39 1970734348
>>1970388
да, код полностью эквивалентен
class A
{
private $varA = 1;
}
Аноним 18/03/21 Чтв 18:06:32 1970759349
>>1970728
>В твоём коде выполнится последовательно
То есть если 1 API не доступно весь скрипт будет висеть ожидая его ответа? Или у curl_init есть какой-то таймаут ожидания ответа после которого он дропает запрос и идёт дальше по коду?

>юзай газл
Это типа как XMLHttpRequest в JS?
Аноним 18/03/21 Чтв 18:22:30 1970780350
>>1970759
>у curl_init есть какой-то таймаут ожидания
Да, есть. И он настраивается

>юзай газл
>Это типа как XMLHttpRequest в JS?
Это либа пхпшная. Хоть бы загуглил прежде чем спрашивать
Аноним 18/03/21 Чтв 18:35:36 1970799351
>>1970780
>Это либа пхпшная
Просто хотелось обойтись без костылей, чистой ванилой так скажем 1 файлов скрипта, но вообще у PHP получается только 2 способа загрузить данные с API - это file_get_contents и curl_init получается?

>Да, есть. И он настраивается
Надеюсь не на сервере, а то с этим будет проблема
Аноним 18/03/21 Чтв 19:08:50 1970819352
>>1970799
CURLOPT_CONNECTTIMEOUT
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); // 1 second timeout
Аноним 18/03/21 Чтв 19:10:06 1970821353
>>1970799
>Просто хотелось обойтись без костылей, чистой ванилой так скажем 1 файлов скрипта
Использование библиотек - не костыль. Тем более настолько проверенных временем.
К тому же на голом пхп в продакшене далеко не уедешь

>Надеюсь не на сервере, а то с этим будет проблема
Почитай пхп доку по курлу - там все параметры описаны, задается это дело в коде
Аноним 18/03/21 Чтв 19:42:49 1970833354
>>1970819
>>1970821
Cпасибо аноны, вроде стало яснее, мне не для чего-то серьёзного, для себя мелкие фитчи на сайт

Пока для меня загадка только в том в какой последовательности я получу ответы если сделаю запрос сразу на несколько API, я так понял что код будет идти последовательно без асинхрона, особенно благодаря CURLOPT_CONNECTTIMEOUT, чтобы читать следующий API, если предыдущий не дал ответ за указанное время, надеюсь всё так
Аноним 18/03/21 Чтв 22:25:54 1970987355
>>1970833
Пхп по своей природе синхронен. Так что первый запрос в апи будет ждать ответа, либо конца таймаута
Аноним 18/03/21 Чтв 22:55:21 1971012356
>>1970987
Охуенно, завтра начну тестировать кашу что я придумал, ещё раз спасибо
Аноним 18/03/21 Чтв 23:22:32 1971034357
>>1970833
>>1970987
Есть multicurl, нк и вообще в газзле промисы есть, все не так просто
Аноним 19/03/21 Птн 04:42:23 1971121358
Господа сеньеры, какой дистрибутив линукс посоветуете осваивать нулевому вкатышу? Убунту? Дебиан? Минт? Генту? Арч? БолгенОС?
Аноним 19/03/21 Птн 06:05:57 1971128359
>>1971121

15 лет сидим на Fedora. Лучший дистриб. Я даже домой себе поставил. Чё там осваивать? Ставишь по принципу next-next-next и у тебя просто всё работает. Были бы богатые, на RHEL бы сидели разумеется.
Аноним 19/03/21 Птн 06:08:51 1971130360
>>1971128

Из различных десктопов мне больше всего нравится Mate десктоп с переработанным Гномом 2, если там конечно от него что-то ещё осталось.
Аноним 19/03/21 Птн 10:41:43 1971192361
>>1971121
Любой популярный. Как освоишься, уже будешь дрочить разные дистрибутивы, DE и конфиги под свой вкус.
Аноним 19/03/21 Птн 11:07:06 1971215362
>>1971121
>нулевому вкатышу?
Убунту.
Ответов-советов нагуглить на нее проще всего.
Аноним 19/03/21 Птн 16:42:44 1971543363
Аноны давно уже вывалился из темы, в PHP данные на страницу так и выводятся с помощью echo? Например я хочу сделать мелкое API которое просто пройдя через 7 кругов ада выдавало бы мне ссылку, я в него вывожу результат простым echo?
Аноним 19/03/21 Птн 16:43:23 1971544364
Прарни, какую IDE посоветуете для обучаюгося-нулевого-соплепомнойного-понадусерового-какло-швайно-вкатыша?
Аноним 19/03/21 Птн 16:44:43 1971547365
>>1971543
Да, только тебе наверное не в HTML это все нужно получать, а в каком-нибудь JSON, т.е. помимо echo нужно будет еще и заголовки поменять
Аноним 19/03/21 Птн 16:45:12 1971549366
>>1971544
Визуальная Студия Код
Аноним 19/03/21 Птн 16:46:51 1971553367
>>1971547
Заебись, пиздец чё серьёзно от echo так и не ушли и всё выводится им родимым? Ну ещё понятно вар дампом, но это другое
Аноним 19/03/21 Птн 16:49:14 1971554368
>>1971553
> от echo так и не ушли
Куда уходить и зачем? Вместо echo сделать huecho? И что это даст? Если тебе нужна гибкость и удобство - обмазывайся любым шаблонизатором на выбор. В Си printf уже 50 лет используют и ничего.
Аноним 19/03/21 Птн 16:51:06 1971559369
image.png 56Кб, 1274x321
1274x321
image.png 90Кб, 1600x680
1600x680
Делал спиздил сайт на php 5, который опенсервер сейчас не поддерживает. На php 5 всё работало. Как это подправить под php7-8? Помогите долбаебу плз
Аноним 19/03/21 Птн 16:52:46 1971562370
>>1971559
Пиздец... пиши с нуля лучше.
Аноним 19/03/21 Птн 16:53:47 1971563371
>>1971562
Я бы не задавал такой вопрос, если бы мог с нуля
Аноним 19/03/21 Птн 17:00:20 1971568372
>>1971554
Я только ЗА, просто что не возьми везде всякие пидоры-нигеры обязательно всё переделывают потому что НЕ МОДНО НЕ ТОЛЕРАНТНО, УСТАРЕЛО И НЕ ЕБЁТСЯ В ЖОПУ, НАДО ПЕРЕДЕЛОТЬ
Аноним 19/03/21 Птн 17:02:58 1971570373
>>1971559
1. У тебя же в ошибке все написано. В $_SESSION не получается найти ключ user_authed. Ты его сам туда пишешь или это какое-то стандартное значение?

2. Зачем ты этот ключ проверяешь двумя условиями, если можно воспользоваться одним с else?
Аноним 19/03/21 Птн 17:42:11 1971595374
Аноним 19/03/21 Птн 18:08:29 1971621375
image.png 47Кб, 1109x407
1109x407
>>1971570
>1. У тебя же в ошибке все написано. В $_SESSION не получается найти ключ user_authed. Ты его сам туда пишешь или это какое-то стандартное значение?
На php 5 все работало, мне кажется тут неверный синтаксис для нового php
>2. Зачем ты этот ключ проверяешь двумя условиями, если можно воспользоваться одним с else?
Потому что я ничего не понимаю. Мне просто интересно почему это не работает сейчас
Аноним 19/03/21 Птн 18:16:07 1971629376
>>1971621

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

- есть уязвимость SQL инъекция, она позволяет залогиниться под любым пользоваетелем не зная пароля, подробно описано тут: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
- не надо хранить в базе пароли в открытом виде, надо хранить соленые хеши от них: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md

Аноним 19/03/21 Птн 18:21:50 1971635377
Как нормально писать на Laravel?
В документации и на ларакастах всяких логика в контроллерах и фасады. Не пойму, это просто примеры для краткости, или действительно все так пишут?
У меня почему-то такие вещи вызывают отвращение. Пока что делаю так: для каждой модели создаю сервис, который эту модель декорирует.
Как логика, так и любые запросы к БД оборачиваются в сервис. В итоге контроллер непосредственно общается только с сервисом.
Во избежание копипасты был создан базовый сервис с наиболее используемыми методами: create, find, delete, update, all и т.д.
А чтобы не копипастить вообще любой понадобившийся метод из квери билдера в сервис, я просто сделал публичным метод, который возвращает билдер модели.
Нормально делаю, или ненормально? Если ненормально, то как надо?
Аноним 19/03/21 Птн 18:31:04 1971646378
>>1971629
Что мне сделать что бы сайт то заработал...
Аноним 19/03/21 Птн 18:34:19 1971647379
>>1971646
Нахуй На фриланс пройди. Никто тут не будет за тебя твою работу выполнять, в говнище колупаясь.
Аноним 19/03/21 Птн 18:50:49 1971657380
>>1971621
> Мне просто интересно почему это не работает сейчас
Нет, ты просто хочешь чтобы из тебя наводящими вопросами выудили всю нужную информацию и написали тебе рабочий код.

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

> мне кажется тут неверный синтаксис для нового php
Раз кажется - берешь ошибку и копируешь ее в гугол. Вот что говорит документация по поводу функции которую ты пытаешься использовать https://www.php.net/manual/ru/function.mysql-query.php Нужно переделать код и использовать вместо неё другую
Аноним 19/03/21 Птн 19:23:43 1971678381
>>1971121
Ща бы вместо кодинга пердолингом заниматься
Аноним 19/03/21 Птн 19:24:32 1971680382
>>1971544
Шторм - стандарт индустрии
Аноним 19/03/21 Птн 19:27:52 1971682383
>>1971635
Ты сделал репозиторий, а не сервис. Либо смесь сервиса и репозитория
Аноним 19/03/21 Птн 19:28:21 1971683384
>>1971646
Выкинь это говно и пиши на современном пхп
Аноним 20/03/21 Суб 00:24:49 1971848385
>>1971682
>смесь сервиса и репозитория
Задумывалось это. Хотя, я так задумался, что для некоторых моделей у меня логика отсутствует, и эти "сервисы" действительно являются репозиториями.
Причем вообще бесполезными, так как абстракции никакой по сути и нету.
Надо будет удалить их. Только что вместо них использовать? Фасады богомерзкие? Внедрять инстанс модели в зависимость?
Ох как же сложно с этим вашим актив рекорд. Вот в доктрине на тебе entity, на тебе entity manager, на тебе репозиторий. Бери и пользуйся. А тут уже какой день пытаюсь со всем этим говном совладать
Аноним 20/03/21 Суб 08:34:26 1972020386
>>1971121
Точно не арч, дебиан потому-что это системы для системных администраторов которым нужна система с минимальным набором стартовых программ. Даже не как новичку, но и профи бы посоветовал Fedora, Ubuntu (Мне не нравится) и это впринципе всё что требуется. Все системы на GNU+Linux похожи и разницы в них мало, в основном различия в сообществах, а так всё тоже самое. (Я бы посоветовал Fedora)
Аноним 20/03/21 Суб 08:36:34 1972022387
Аноним 20/03/21 Суб 08:36:58 1972023388
Аноним 20/03/21 Суб 08:40:38 1972025389
>>1971554
>В Си printf уже 50 лет используют и ничего.
У нас есть не просто printf, у нас есть printf с разными вкусами!
Аноним 20/03/21 Суб 09:03:38 1972034390
Сап двач!
Подскажите вкатывалщику на пыхе. Фриланс, хороший вариант получения опыта? Именно нулевому разрабу, без опыта.
Аноним 20/03/21 Суб 09:20:43 1972041391
>>1972034
Я тоже нуб, думаю если опыта вообще нет, то во фриланс сразу нельзя, нужно портфолио стартовое сделать, щас этим занят. Пет проекты итд. Тоже интересно узнать как начинать.
Аноним 20/03/21 Суб 09:43:11 1972058392
>>1972041
Как опыт думаешь получать? Через стажировки?
Аноним 20/03/21 Суб 10:06:51 1972068393
>>1972034
Фриланс на пыхе это чаще всего задачи вроде "у нас тут есть куча говнокода, нужно добавить туда еще говнокода". Сомнительный способ научиться грамотно погромировать. Тем более если ты без опыта.
Аноним 20/03/21 Суб 10:15:36 1972075394
>>1972068
Как тогда опыт, этот получать? Через стажировки?
Аноним 20/03/21 Суб 10:17:23 1972077395
>>1972075
Пилишь проектики для себя. Например, в шапке есть задача. Сделал, показал анону, твой код обосрали, переделал. Потом берешься за проект посложнее. И так далее.
Аноним 20/03/21 Суб 10:20:05 1972079396
>>1972077
Эти проекты годятся для трудоустроиства? А то РАБотадалям коммершеский опыт подавай
Аноним 20/03/21 Суб 10:41:20 1972095397
К большому кристалу можно только за бабло портаться?
Аноним 20/03/21 Суб 13:02:03 1972183398
>>1972034
Фрилансить нужно будучи хотя бы мидлом. Дадут тебе хотелок кабанчика - что будешь с этим делать?
Аноним 20/03/21 Суб 13:02:44 1972184399
>>1972058
Опыт получать через пет проектики.
Можно брать существующие проекты и колхозить свой клон с нуля
Аноним 20/03/21 Суб 13:03:31 1972185400
>>1972079
Если красиво покажешь и расскажешь - вполне.
А если каким-то чудом выдашь их за комм опыт, то с руками оторвут
Аноним 20/03/21 Суб 13:05:58 1972187401
Вопрос!
Есть легаси проект со своей функцией загрузки классов.

Как безболезненно начать параллельно юзать composer, не порушив старую архитектуру?
Аноним 20/03/21 Суб 13:09:47 1972188402
>>1972183
Тоже верно, спасибо учту
Аноним 20/03/21 Суб 13:10:10 1972189403
>>1972185
Благодарю, буду пробывать
Аноним 20/03/21 Суб 13:17:32 1972194404
Аноним 20/03/21 Суб 13:19:44 1972196405
>>1972187
А в чем у тебя там конфликт?
Аноним 20/03/21 Суб 13:29:50 1972205406
>>1972196
composer начинает пытаться загружать свои зависимости другим, старым загрузчиком
Аноним 20/03/21 Суб 15:15:22 1972286407
>>1966181
>>1958281 (OP)
Та же фигня, может подскажет кто-нибудь? Предыдущие задачи все решил.
Аноним 20/03/21 Суб 15:38:44 1972296408
>>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
Аноним 20/03/21 Суб 15:43:19 1972299409
>>1972296
>В той же ситуации. Я уже дальше пошел, решил оставить банкомат на потом
А мне ОКР не позволяет.
Аноним 20/03/21 Суб 16:09:09 1972328410
>>1972205
>>1972196
всё, решил:
благо легаси-классов в данном случае немного,
пришлось прописать их composer.json/dump-autoload
и полностью отказаться от старого загрузчика
Аноним 20/03/21 Суб 16:18:34 1972338411
Аноны, я достаточно хорошо понимаю как работают потоки в node.js. А точнее речь о файлах которые загружает браузер в форме с типом
multipart/form-data. А с пхп что то я запутался. Хотя на пхп много больше написал.
В пхп все автоматом из коробки делается, файл попадает в $_FILES , а сам сохраняется где то в temp. А как мне непосредственно а пхп получить доступ к потоку запроса. Я допустим каждые 1000 байт входящего файла хочу подергать?
Аноним 20/03/21 Суб 16:56:37 1972379412
>>1972286
>>1972296
Я посмотрел по ссылке, вроде несложно там обьяснено.
Строим табличку, сколько нужно купюр для каждой суммы от 0 до нужной, если есть вариант с меньшим числом большими купюрами, то заменяем.
Ну и потом раскручиваем обратно, отнимая наибольшие от суммы.
https://ideone.com/cO6Pdf
Аноним 20/03/21 Суб 17:19:41 1972393413
Такой вопрос. Что более распространено в компаниях: Apache+Mysql, или Nginx+Postgres? Чему большее внимание?
Аноним 20/03/21 Суб 17:29:42 1972400414
>>1966181
>>1972286

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

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

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

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

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

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

---

Что касается алгоритма в интернете, он работает с неограниченным кол-вом купюр. Если вы хотите его использовать, его надо модифицировать для работы с ограниченным кол-вом купюр, и проверить, возможно ли это вообще.
Аноним 20/03/21 Суб 17:55:28 1972411415
Аноним 20/03/21 Суб 18:22:23 1972425416
Аноним 20/03/21 Суб 19:58:16 1972500417
>>1958281 (OP)
Подскажите современную альтернативу TimThumb
Аноним 20/03/21 Суб 23:41:29 1972681418
Аноним 21/03/21 Вск 01:44:18 1972785419
Та ну нахуй ваш Ларавель. Кусок конченного кривого говна. На таком писать - себя не уважать. крик души
Аноним 21/03/21 Вск 10:17:58 1972895420
>>1972785
Ну не пиши, тебя никто не заставляет
Аноним 21/03/21 Вск 11:02:19 1972909421
Аноны, дайте совет - как правильно проверять загружаемые пользователем на сервер файлы?
Мне нужно только картинки загружать.
Сначала я проверяю 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

кажется нихуя не дало
как правильно заливтаь файлы?
Аноним 21/03/21 Вск 11:12:05 1972912422
>>1972909
п.с.
директивы
php_value upload_max_filesize 10M
php_value post_max_size 10M

работают, только не пойму какое исключение они возвращают.
По факту просто не качает файл и все. А скрипт обработчик пытается выполниться
Аноним 21/03/21 Вск 11:57:04 1972942423
sanitizing.png 12Кб, 693x185
693x185
Привет, аноны. Недавно вкатился. Пилю сайт с базами данными, чисто потренироваться. Может кому встречалась какая-нибудь супер классная и полезная статья, про то, как отсанитарить инпут правильно? Английский свободный. Какие-то статьи читал по теме, но они касались этой темы довольно поверхностно. Пока пользуюсь пикрилейтед, но подозреваю это не самый лучший способ.
Аноним 21/03/21 Вск 12:06:59 1972950424
>>1972942
Лол, какая-то дедовская хуйня. Для базы есть prepared statements, которые решают проблемы с эскейпингом и иньекциями, дальше можно заэнкодить через htmlspecialchars, чтобы избежать всяких xss.
Аноним 21/03/21 Вск 12:32:19 1972969425
>>1972895
И не буду пока барин не заставит
А ты дрочи себе свои фасады
Аноним 21/03/21 Вск 12:54:47 1972985426
Аноним 21/03/21 Вск 13:09:07 1973009427
Аноны, что нужно использовать в пхп для работы с изображениями? Мне нужно приводить все загружаемые картинки к одному размеру.
Так я понял по документации для этого используются три варианта пакетов: GD , Gmagick , ImageMagick.
Какое из них нужно выбрать?
Или еще варианты есть?
Аноним 21/03/21 Вск 15:52:52 1973174428
Аноним 21/03/21 Вск 16:08:48 1973186429
>>1972985

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

То есть, берем все возможные количества первой купюры, для каждого количества перебираем все возможные кол-ва второй купюры, для каждой пары первых двух количеств перебираем все возможные кол-ва третей купюры и тд.
Аноним 21/03/21 Вск 16:12:20 1973192430
>>1973009
>ImageMagick
Я вот это использовал, очень удобно, можно использовать готовый пример. Использовал это для генерации картинок для мобильной версии сайта, чтобы ускорить загрузку сайта для телефонов, там же все равно маленький экран
Аноним 21/03/21 Вск 16:14:59 1973197431
>>1972942
Чем что-то запрещать в логине, проще что-то разрешать. Сделать регулярку на лат.буквы и цифры. А для пароля сделать ввод чего угодно. Ты ведь все равно прогонишь это через htmlspecialchars, PDO, плюс пароль наверняка захэшируешь с солью. Никакая гадость не пролезет.
Аноним 21/03/21 Вск 16:26:11 1973212432
Аноним 21/03/21 Вск 16:42:22 1973248433
Анон, помоги! Не могу понять, в чем я ошибаюсь. Решаю задачу про написание текста по кругу. Вроде все сделал верно, но при написании теряется первый символ введенной строки: https://ideone.com/t381vz
А еще мой круг кажется мне кривоватым, как бык поссал.
А еще поясни, пожалуйста, в чем сакральный смысл переменной $height и почему она у нас равна именно 30?
Аноним 21/03/21 Вск 16:49:58 1973263434
>>1973248
for ($i=0;$i<=$phraseLenght;$i++)
<= на один раз больше срабатывает и затирает первый.
Аноним 21/03/21 Вск 21:16:04 1973544435
Что быстрее: условный круд на симфони или ларе?
Аноним 21/03/21 Вск 21:20:24 1973548436
>>1958281 (OP)
Анончики помогите. С меня - нихуя.
На диске лежит файл image.png, размер 20000 на 20000. Вывести картинку как баннер размером 200 на 100 пикселей.
Аноним 21/03/21 Вск 21:27:49 1973555437
>>1973544
Скорее все упрется в железо и разница будет несущественной.
Аноним 21/03/21 Вск 21:28:54 1973559438
>>1973548
Берешь любую библиотеку для обработки изображений, делаешь баннер и выводишь.
Аноним 22/03/21 Пнд 00:58:41 1973736439
R8aLhmiN8rUgojf[...].jpg 85Кб, 612x236
612x236
Аноним 22/03/21 Пнд 01:02:23 1973738440
>>1973736
>>1973544
Вообще в таком сравнении смысла не очень много. Понятно, что всегда быстрее минимальный на pure PHP -- и, собственно, что?
Аноним 22/03/21 Пнд 01:58:47 1973759441
>>1973738
Я бы лучше смотрел на среднее время ответа сервера, тот же вордпрес упаси боже может две секунды думать в то время пока лара и симфони >50мс
Аноним 22/03/21 Пнд 02:08:42 1973774442
>>1973736
О, спасибо. По-моему разница в три раза - это не чутка.
Аноним 22/03/21 Пнд 11:19:14 1973984443
>>1973774
Думаю, при наполнении данными и применении кеширования эта разница нивелируется. Но если просто нужна причина не учить сложную симфони -- то да, можно опираться и на этот тест.
Аноним 22/03/21 Пнд 12:44:27 1974058444
>>1973544
Там для лары на днях Octane презентовали - асинхронный фреймворк на основе swool. 6к рпс из-коробки
Аноним 22/03/21 Пнд 12:51:40 1974062445
Аноним 22/03/21 Пнд 15:53:00 1974252446
С ларавелом выгоднее всего учить Vue. А с Symfony так же, или на Angular/React в связке с ним больший спрос?
Аноним 22/03/21 Пнд 16:10:44 1974266447
Аноним 22/03/21 Пнд 17:23:29 1974408448
PHP 8 уже используют, его нужно учить или подойдут туториалы, где изучают PHP 7?
Аноним 22/03/21 Пнд 17:31:47 1974423449
>>1974408
Легаси евривеа. Даже 7 то не везде используется (тут вот недавно был анон с говнокодом, который работал только в 5), а 8 и подавно. Смотри мануалы по 7, а про 8 разве что для общего развития можешь почитать.
Аноним 22/03/21 Пнд 18:13:51 1974498450
>>1958281 (OP)
Хочу устроиться на работу PHP джуном, но до этого я готовился на frontend (js). Можете подсказать короткий путь, как подготовиться к собесу за 18 дней?
Я учился по книжке ОПа, но дошел до ООП, да и все забыл уже по PHP. Но что такое циклы, условия и ООП в целом я знаю.
Сейчас уже нет времени решать задачи про банкомат и расчет маршрута как же я с ними марался.
Может подскажете видео курсы или книгу? Так же нужно выбрать фреймворк, который легче и быстрее учится. И если можно по нему тоже курс какой-нибудь.
Вот требования вакансии:
Знание PHP, ООП, MVC
Опыт написания SQL запросов
Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)
Аноним 22/03/21 Пнд 18:33:57 1974544451
>>1974498
> 18 дней
> Сейчас уже нет времени решать задачи

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

> Вот требования вакансии:
Сомневаюсь что ты за 18 дней наберешься таких знаний. Скорее всего у тебя просто каша будет в голове. Мне кажется лучше пока забить на фреймворки и сконцентрироваться на самом PHP + MYSQL. Сами фреймворки просто базово изучить, а на собеседовании так и сказать что ты опыта работы с ними не имел, но очень хочешь и готов быстро во все вникнуть в боевых условиях.
Аноним 22/03/21 Пнд 18:39:06 1974553452
>>1974498
Фронтенд на пых сменить ебать ты дурачина! А так шансов пройти у тебя собес мало, зубри вопросы для собеседований из гугла
Аноним 22/03/21 Пнд 18:47:24 1974562453
>>1974408
Бери самый свежак стабильную версию.
Присесть на хуи легаси всегда успеешь
Аноним 22/03/21 Пнд 18:48:38 1974565454
>>1974498
>Хочу устроиться на работу PHP джуном, но до этого я готовился на frontend (js). Можете подсказать короткий путь, как подготовиться к собесу за 18 дней?
Ждем через 18 дней пост у мобильщиков/датасаентистов с аналогичным содержанием
Аноним 22/03/21 Пнд 19:21:03 1974609455
>>1974553
>>1974565
Господа, в моей мухосрани мало вакансий (на джуна только вот эта). Я согласен, очень глупо метаться с фронта в бэк, но там и зп белая, а горький опыт показывает, что зп в черную это не всегда хорошо. Короче компания вроде приличная, судя по отзывам знакомого знакомых. Плюс там знания js тоже желателен. Нуууу, не знаю короче, я так долго вкатывался, уже не знаю что делать
Аноним 22/03/21 Пнд 19:45:31 1974634456
>>1974498
Ну ты охуевший это не плохая характеристика на самом деле, такие люди и добиваются успеха.
Я вот почти год как вкатываюсь, все задачки из ОП-поста сделал. Перед этим 4 года вышки писал на всем на чем только можно, помимо кодинга там хорошо выучил сети и базы данных, и всё равно не считаю что я уже готов к работе.
Я ж еще столько всего не пробовал: API, реактивные фреймворки, докер, тесты ( всегда впадлу было их делать ) и прочее. Да и вообще себе много чего не представляю о реальных веб-приложениях.
Аноним 22/03/21 Пнд 20:43:14 1974678457
>>1974634
>Я вот почти год как вкатываюсь, все задачки из ОП-поста сделал. Перед этим 4 года вышки писал на всем на чем только можно, помимо кодинга там хорошо выучил сети и базы данных, и всё равно не считаю что я уже готов к работе

Чел...
Аноним 22/03/21 Пнд 21:09:25 1974702458
Screenshot20210[...].png 43Кб, 1027x315
1027x315
Как перестать орать?
Вкратце о ситуации: в самом аналоговнетном фреймворке пхп-мира есть строка, обнуляющая дробную часть float при отправке запросов в БД.

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

https://github.com/laravel/framework/issues/23850
Аноним 22/03/21 Пнд 21:23:55 1974718459
>>1974634
Пока ты теряешь время, требования всё больше растут, и становиться всё сложнее вкатиться
Аноним 22/03/21 Пнд 22:14:04 1974746460
>>1974718
Требования не менялись лет пять..
Аноним 22/03/21 Пнд 23:23:50 1974794461
>>1974746
Пора высунуть голову из песка и сходить по собесам.
Сейчас даже на джунские ваки требуют знаний архитуктуры и хуйлоада, не говоря уже про всякие докеры
Аноним 22/03/21 Пнд 23:25:00 1974795462
>>1974702
В ларе и не такой говнокод встретить можно
Аноним 22/03/21 Пнд 23:46:35 1974813463
1616446038692.png 1104Кб, 900x900
900x900
>>1974718
Все равно мои скиллы быстрее требований растут.
я обязательно вкачусь...
Аноним 23/03/21 Втр 00:01:22 1974821464
>>1974813
Если б так было - ты бы уже джуном пахал
Аноним 23/03/21 Втр 12:07:34 1975112465
Я сделал кнопку, которая уменьшает на 1 значение одной из переменных в массиве $_POST:
<input type="submit" name="warmday" value="<?= ($_POST['warmday'] - 1) ?>">
Проблема в том, что при нажатии этой кнопки все остальные значения удаляются и остаётся только эта изменённая переменная. Как сделать так, чтобы остальные значения сохранялись?
Аноним 23/03/21 Втр 13:06:15 1975142466
image.png 281Кб, 923x838
923x838
>>1958281 (OP)
ОП, два дня туплю в эту задачку, куда копать, подскажешь?
Аноним 23/03/21 Втр 13:14:42 1975149467
>>1975142
Нужно просто вывести значения массивов? Или тут какая-то более глубокая задача?
Ну вот тебе первая строка:
echo $word1[3]. ' ' .$word2[0]. ' ' .$word3[3];
Остальные строки по этому принципу
Аноним 23/03/21 Втр 13:28:54 1975159468
image.png 294Кб, 1017x941
1017x941
>>1975149
Вот, я думаю так будет понятней, нужно, чтобы рандомно делался стишок из слов в массиве
Аноним 23/03/21 Втр 14:08:37 1975194469
>>1975159

Просто в массивах цифры меняешь рандомайзером., перед этим посчитав величину массива.
Аноним 23/03/21 Втр 14:24:04 1975218470
Аноним 23/03/21 Втр 15:06:44 1975254471
>>1975194
дело в том, что в подсказках автор задачи предлагает делать это через цикл, я хуй его пойми как пустить это дело через цикл
Аноним 23/03/21 Втр 15:14:06 1975258472
>>1975112
>все остальные значения удаляются и остаётся только эта изменённая переменная
Это происходит, т.к. ты при новом запросе посылаешь новый пост, в котором есть только твоя переменная.
Вообще $_POST - это те данные, которые пришли из текущего запроса. Она не хранит данные из прошлых запросов.
Хочешь хранить данные дольше одного запроса - используй другие хранилища, например куки, файл или бд
Аноним 23/03/21 Втр 15:23:13 1975260473
>>1975254
Делаешь табличку вида [1 => $words1]
И потом вторую с нужными цифрами.
Аноним 23/03/21 Втр 15:39:01 1975272474
>>1974795
Недавно, кстати, попробовал Lumen вместо лары. И чет не понял, а нахуя нужна лара?
По ощущениям, люмен - то, чем должна быть лара, просто без нескучных обоев.
Аноним 23/03/21 Втр 15:50:16 1975280475
>>1974702
>eloquent->insert (3.14); // 3 is precise enough!
Не понял. В ишью же вроде сказали что для децимала нужно передавать '3.14' и все будет ок.
Аноним 23/03/21 Втр 15:55:22 1975283476
>>1975272
>люмен - то, чем должна быть лара
Люмен - кастрированная версия лары, микрофреймворк. Норм, если нужна апишка или микросервис.

>нахуя нужна лара?
Лара - комбайн для быстрой разработки и прототипирования. Подходит для монолитов
Аноним 23/03/21 Втр 19:15:30 1975462477
>>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 итд. При этом на каждой комбинации она снова вызывает себя, передавая эти комбинации. Так постепенно будут перебраны все возможные комбинации.

Тут получится довольно простой код. Опять же, в случае успеха ты можешь переделать его на функцию-генератор. Но сначала попробуй по-простому решить.
Аноним 23/03/21 Втр 19:23:34 1975473478
>>1975254

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

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

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

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

>>1975112

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

Аноним 23/03/21 Втр 19:41:37 1975485479
>>1975272
Вообще наоборот, зачем нужен люмен когда есть лара? В этом люмене постоянно что-то работает не так как в ларе, пакеты часто несовместимы. То, что могло занять 5 минут, может затянуться на пару часов, вот и вопрос, в чем ты выигрываешь выбирая более легкий фреймворк? Я думаю точно не в производительности, шо то шо это ну такое, и явно не в dx. Тогда в чем?
Аноним 23/03/21 Втр 22:31:43 1975634480
Снимок.PNG 12Кб, 632x360
632x360
Снимок1.PNG 13Кб, 630x462
630x462
Такой вопрос, почему data.message и data.statusreg undefined?
Аноним 23/03/21 Втр 23:21:51 1975680481
>>1975634
Пустое тело цикла foreach
Аноним 23/03/21 Втр 23:37:17 1975689482
>>1975680
так при чем тут этот цикл
Аноним 24/03/21 Срд 00:04:51 1975703483
>>1975689
Вардамп поставь на каждой строчке в пхп и консол лог на каждой строчке в жс - поймешь, где данные теряются.
Пора учиться самостоятельно дебажить
Аноним 24/03/21 Срд 00:05:33 1975704484
Посоветуйте пожалуйста, книги для backend разработчика. В частности интересуют сети, базы данных итд. В целом, фундаментальные основы. Без привязки к языку программирования.
Аноним 24/03/21 Срд 00:12:06 1975709485
>>1975704
Для каких целей? Новичек/работающий?
Аноним 24/03/21 Срд 00:19:26 1975713486
>>1975709
новичок, планирую в пых вкатываться
Аноним 24/03/21 Срд 00:25:47 1975723487
>>1975703
Ну я выяснил что в data не заносится responce
Аноним 24/03/21 Срд 02:41:07 1975780488
>>1975713
Тогда лучше для начала код пописать, книжки потом
Аноним 24/03/21 Срд 03:20:14 1975786489
>>1975723
Попробуй перед респонсом в пхп ебануть header('content-type: application/json')
Аноним 24/03/21 Срд 03:59:02 1975790490
>>1975704
Начнём с вопросов. Ты уже прошёл шапку ОПа?
Аноним 24/03/21 Срд 04:24:21 1975799491
>>1975790
да, в принципе всё понятно
Аноним 24/03/21 Срд 08:31:20 1975846492
А вы изучали php по гайду в самом начале?
Аноним 24/03/21 Срд 08:31:57 1975847493
И расскажите как начать писать на php
Аноним 24/03/21 Срд 09:37:25 1975867494
>>1975846
Не всё изучал, только начал. Почему книги спрашивал, потому-что. Возможно придётся свалить, в родную мухосрань, где нет интернета. И нужно учебный материал приготовить. Ну это, при худшем раскладе
Аноним 24/03/21 Срд 10:56:12 1975916495
Кто-нибудь пользуется Heroku для развёртки сайтов? Хочу туда закинуть своё тестовое на ларавеле, но столкнулся с проблемой конфигов.
У хероку, насколько я понял, два варианта: либо автодеплой с гитхаба, либо ручной коммит через хероку CLI (ещё есть докер, но я в нём ни ухом, ни рылом). Но конфиги-то коммитить нежелательно, .env у гита должен быть в игноре. Плюс, мне нужно И показать код на гитхабе, И развернуть готовое приложение на хероке, И иметь возможность работать с проектом локально.

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

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

И ещё проблема: нет картинок. Они у меня в /public/storage, который слинкован командой php artisan storage:link. Но, во-первых, линковка работает только пока я подключён (если перелогиниться и проверить - в /public каталога /storage не будет), а во-вторых, даже после линковки, все картинки 404. Я было на права подумал, но нет, у соседних css файлов права ровно такие же. Как починить?
Аноним 24/03/21 Срд 11:30:45 1975953496
Аноны, подскажите, приложение на 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);

тоже это варнинг отловить не могу. Откуда он сука лезет.
Аноним 24/03/21 Срд 11:31:59 1975957497
>>1975847
Скачиваешь OpenServer (он говно и с него придется слезать в будущем, но для начала более чем пойдет), любой текстовый редактор и вперед и с песней.
Аноним 24/03/21 Срд 11:49:09 1975986498
>>1975953
п.с.
чето не пойму а с какого хера этот вэрнинг вообще сыпется?
По идее если файл слишком большой - то ошибка эта будет в $_FILES, разве нет?
Аноним 24/03/21 Срд 12:06:52 1976018499
Аноны, какой сервер предпочтильнее apache, или nginx? Что в конторах ставят?
Аноним 24/03/21 Срд 12:08:37 1976020500
>>1975634

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

>>1975916

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

Гугление выдало мне такую статью: https://devcenter.heroku.com/articles/config-vars
Аноним 24/03/21 Срд 12:19:08 1976029501
>>1975953

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

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

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

Аноним 24/03/21 Срд 13:58:31 1976123502
>>1976029
Спасибо! Я уже разобрался.
Как ты описал так и было
Аноним 24/03/21 Срд 14:10:38 1976133503
>>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 для преобразования массива в строку вместо цикла.
Аноним 24/03/21 Срд 14:25:38 1976148504
>>1975867
Без интернета с пхп каши не сваришь
Аноним 24/03/21 Срд 14:26:11 1976151505
>>1975847
Ставишь php, phpstorm и пишешь
Аноним 24/03/21 Срд 14:28:06 1976154506
Аноним 24/03/21 Срд 14:43:27 1976168507
Из линукс, что нужно знать? bash? Навигация, редактирование файлов итд? Знания админа нужны?
Аноним 24/03/21 Срд 14:51:46 1976176508
>>1976168
Не повредят. Тебе нужно будет использовать различные консольные утилиты, а скорее всего и базовым администрированием серверов заниматься.
Аноним 24/03/21 Срд 15:24:57 1976227509
>>1976176
Как доказать, свой знания в линуксе? Если, с программированием понятно, можно ссылку на github предоставить. То с линуксом, приходит на ум, только принести ноут, с установленным, и настроенным линуксом... Я правильно, понимаю?
Аноним 24/03/21 Срд 15:27:27 1976231510
>>1976227
> Как доказать, свой знания в линуксе
А их будут проверять? Скорее всего зададут вопросы какие-нибудь. Или ты думаешь тебе скажут "ВОТ ТЕБЕ КОНСОЛЬ - УДИВИ НАС ЗА 5 МИНУТ"?
Аноним 24/03/21 Срд 15:40:22 1976256511
>>1975473
Вот я как раз о том же, на простом коде без цикла я задание выполнил, но вот с перебором массивов мозг вырубается, спасибо за подсказку большое, буду копать дальше, уже что-то получается)
Аноним 24/03/21 Срд 15:43:06 1976271512
Аноним 24/03/21 Срд 15:59:07 1976306513
>>1976227
Если сумеешь на vds задеплоить свой проект - этого достаточно
Аноним 24/03/21 Срд 16:44:03 1976395514
>>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 возможности и использовать их
- научиться не писать бизнес-логику стеной в контроллере, а писать его в моделях и сервисах. Это не значит, что контроллеры должны быть пустыми, просто надо научиться понимать, что куда относится.
- более тщательно покрыть тестами
Аноним 24/03/21 Срд 18:44:16 1976543515
>>1975462
Спасибо, буду пробовать.
Что можно написать новичку? Аноним 25/03/21 Чтв 08:46:27 1976884516
Изучаю пхп не так давно, но не знаю что написать можно, для тренировки. Можно идеи и проекты из вашего опыта?
Аноним 25/03/21 Чтв 11:52:07 1976989517
>>1976884
напиши борду простенькую. чтоб можно было треды создавать и отвечать в них.
Аноним 25/03/21 Чтв 12:42:34 1977032518
Аноны, как называется шаблон/паттерн когда ты в допустим модель , которая уже с БД работает передаешь данные из $post не как массив, а данные из массива в специальный объект засовываешь, и этот объект уже в модель отправляешь.
На меня снизошло откровение, и я до этого сом дошел.
Аноним 25/03/21 Чтв 12:47:53 1977034519
>>1977032
Entity используется в симфони
Аноним 25/03/21 Чтв 12:49:16 1977038520
>>1977032
Ты говоришь про DTO (data transfer object). Вообще эта история довольно широкая и неоднозначная. Все зависит от используемого стека, иногда DTO - это зло.
Аноним 25/03/21 Чтв 21:09:42 1977511521
>>1976884

В первом посте есть задача про список студентов. Она хороша тем, что к ней идет большое пояснение, что и как лучше делать, чтобы не наступить на грабли.
Аноним 25/03/21 Чтв 22:03:38 1977561522
>>1977038
Это когда, например?
Аноним 25/03/21 Чтв 23:16:53 1977613523
>>1977038

С чего сразу DTO ? Если мы туда пихаем данные из формы, то это сразу DTO что ли? Может у чела обычный VO (Value Object) и модель просто агрегирует этой структурой
Аноним 25/03/21 Чтв 23:29:44 1977617524
>>1977561
Ну примерный случай - это очень маленькие приложения, либо приложения с большим количеством маленьких сабмодулей, в таких случаях прибегают к использованию доменных объектов в обход посредников, если архитектура вцелом такое позволяет конечно, например не используется active record.

>>1977613
>сразу DTO
>обычный VO (Value Object)
Тебе нужно внимательнее почитать про эти паттерны, няш.
Аноним 26/03/21 Птн 08:00:09 1977809525
>>1977617
Любой DTO == data class, но не любой data class == DTO, няш.
$data = new PostData($_POST);
$post = new Post($data)

Что скажешь, это тоже DTO?
Аноним 26/03/21 Птн 10:50:01 1977901526
>>1974498
во-первых прокачивай общую адекватность и бизнес-этику
на собеседовании постарайся быть (а не казаться) адекватным воспитанным челом

из фреймворков -- успеешь попробовать лёгкий Laravel или Yii, от сложной Симфони можно сразу ёбнуться
Аноним 26/03/21 Птн 12:01:59 1977962527
>>1977901
Чего сложного в Симфони относительно Ларавеля? В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.
Аноним 26/03/21 Птн 12:05:08 1977963528
>>1977962
>В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.

А о какой собсна магии речь идет? Я постоянно слышу про магию в ларавеле, я знаю что там есть свои приколы с Eloquent и магическими геттерами и сетерами, всё настолько тут запущено что даже плагина нормального нет который бы парсил это говно в автодополнение. А кроме ормки что еще то?
Аноним 26/03/21 Птн 13:28:54 1978028529
>>1977962
>Чего сложного в Симфони относительно Ларавеля?
На симфони довольно сложно писать плохой код. На ларавеле же можно наговнякать всё что угодно вообще не задумываясь, и это будет работать.
>В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.
Это чтобы нормально написать. Вот только нормально на ларавеле никто не пишет, не для этого он создан.
>>1977963
>всё настолько тут запущено что даже плагина нормального нет который бы парсил это говно в автодополнение
Есть платный плагин от Аделя Файзрахманова
Аноним 26/03/21 Птн 13:33:07 1978030530
>>1978028
Хотя, может этот плагин такого и не умеет. Адель же вроде писал в своей книжке, что он докблоки для каждого свойства расставляет.
Аноним 26/03/21 Птн 15:18:10 1978080531
>>1978028
>На симфони довольно сложно писать плохой код. На ларавеле же можно наговнякать всё что угодно вообще не задумываясь, и это будет работать.

На Симфони тоже можно говнякать как хочется, ну лазай в контроллере сырыми запросами с инъекциями, кто тебе помешает. И данные принимай как json_decode() от raw body.
Что можно написать новичку на PHP? Аноним 26/03/21 Птн 17:00:34 1978201532
Я вообще из полезного и легкого ничего не писал. Хочу попробовать написать что-то классное. В интернете не нашел идей
Аноним 26/03/21 Птн 17:16:08 1978218533
>>1978201
Чтобы написать что-то классное нужен опыт, погружение в предметную область и знание хотелок юзеров. Всего этого нет у новичка, поэтому бери и пиши что-то простое и известное борду/галерею/файлопомойку
Аноним 26/03/21 Птн 17:19:13 1978222534
>>1978218

Что такое борда? И под файлопомойкой ты файлообменник подразумеваешь?
Аноним 26/03/21 Птн 17:26:21 1978233535
>>1978222
>Что такое борда?
Мы с тобой щас на ней сидим

>И под файлопомойкой ты файлообменник подразумеваешь?
Да, типа меги или ргоста
Аноним 27/03/21 Суб 15:21:30 1978970536
Аноним 28/03/21 Вск 16:16:52 1979585537
Где именно в энтерпрайзе используется пхп? Используется ли?
Я слышал, что симфони - это примерно то же самое, что джавовский спринг. Составляет ли симфони в таком случае реальную конкуренцию джаве?
И еще, пхп ругают за всё, за что только можно, порой пхпшников за программистов не считают, но почему в таком случае есть банки, чьи сайты написаны на битриксе?! И это не единичные случаи. Уж битрикс-то ругают вообще просто 99 человек из 100. Но ведь банки - это как раз и есть самый что ни на есть энтерпрайз! Выходит, битрикс не так плох, как все говорят? Или плох? Банки ведь не дураки, и не стали бы использовать что-то плохое и дырявое для своих сайтов.
Аноним 28/03/21 Вск 16:43:38 1979626538
>>1979585
> пхп ругают за всё, за что только можно
Любой популярный ЯП ругают

> но почему в таком случае есть банки, чьи сайты написаны на битриксе
Если это по сути сайт-визитка, его можно и на вордпрессе сделать. Весь финансовый функционал в банках уж точно не на ПХП крутится.
Аноним 28/03/21 Вск 17:37:16 1979691539
Возникнут ли у ларавелиста средней руки затруднения при пересаживании на симфони?
Аноним 28/03/21 Вск 17:41:56 1979699540
>>1979626
Ругают любой, но одно дело, ругать популярную джаву или сишарп, которые являются столпами рпомышленной разработки, другое дело - выслушивать такие же упреки в адрес пхп. Отсуда у меня и возникает вопрос, есть ли место в промышленной разработке для пхп.
Аноним 28/03/21 Вск 17:42:32 1979701541
Аноним 28/03/21 Вск 18:30:24 1979764542
>Я слышал, что симфони - это примерно то же самое, что джавовский спринг.
Я такое тоже слышал. Может кто-то расскажет, зачем тогда нужна симфони? Просто чтобы в два раза меньше разработчикам платить, чем на спринге?
Аноним 28/03/21 Вск 20:21:36 1979883543
>>1958281 (OP)
Аноны, какой сложности алгоритмы вам приходилось использовать?
Как хорошо нужно знать алгоритмы? Я просто помню когда решал задачу про банкомат в ОП мануале чуть не офигел (не помню сколько недель я потратил на ее решение). А это задачи для новичков, что дальше будет я боюсь представить.
Ну и с матаном аналогично?
Аноним 28/03/21 Вск 21:27:21 1979953544
Сап двач!
Планирую вкатываться в бэк на пыхе. Но для начала, хочу освойть фронт стек. Какому фреймворку уделить внимание? Vuejs? Или также нужен react?
Аноним 28/03/21 Вск 21:27:49 1979955545
>>1979764
имхо, думаю это решающий фактор...
Аноним 28/03/21 Вск 21:44:51 1979997546
>>1979955
Блять, ну почему пыха как Таджикистан в мире программирования?
Аноним 29/03/21 Пнд 00:10:56 1980159547
>>1979997
бизнес, ничего личного...
Аноним 29/03/21 Пнд 00:59:23 1980210548
>>1980159
Нужно основать профсоюз пыхарей и бороться с этой хуйней.
Если взлетит, то язык наконец-то умрет, так как пропадет его последнее преимущество
Аноним 29/03/21 Пнд 07:32:09 1980252549
>>1980210
Последнее преимущество это низкий порог вхождения, но разработчики пыха решили пофиксить это досадное недоразумение
Аноним 29/03/21 Пнд 08:45:50 1980264550
Вопрос к опытным разработчикам, которые пишут тесты на Laravel.
Какую БД используете для тестов?
MySQLi и гоняете тесты в памяти?
Или же создаете отдельную тестовую БД и там тестируете?
Аноним 29/03/21 Пнд 08:48:26 1980265551
>>1980264
Мне интересно узнать предпочтения. Если ещё поясните свой выбор, то было бы вообще замечательно.
Аноним 29/03/21 Пнд 11:14:18 1980314552
>>1980252
И в каком месте он сложнее стал по сравнению с каким-то 5.6? По моему всё легче и легче: тайпхинты, всяческий синтаксический сахар и прочие вкусности.
Аноним 29/03/21 Пнд 13:19:21 1980376553
Если контора, публикует вакансии вот уже который месяц. Это говно-вакансия (позиция джуна, трейни)?
Аноним 29/03/21 Пнд 13:29:59 1980388554
>>1980376
Может у них автопубликация стоит, и они уже и забыли про нее
Аноним 29/03/21 Пнд 13:34:18 1980391555
Аноним 29/03/21 Пнд 13:41:35 1980401556
>>1979691
Если сможет скинуть с себя оковы фасадов и актив рекорда, то нет
Аноним 29/03/21 Пнд 13:41:36 1980402557
Аноним 29/03/21 Пнд 13:43:49 1980405558
>>1980391
Возможно они таким образом держат у себя стек недорогих стажеров-разнорабочих, которых выпиннывают через месяц и нанимают новых. 15к в ДС это пиздец вообще, наверное на проезд только хватит.
Аноним 29/03/21 Пнд 13:45:51 1980410559
>>1979699
>ругать популярную джаву или сишарп
А пхп непопулярный?

>есть ли место в промышленной разработке для пхп
Открой вакансии, да посмотри, где пхп используют
инб4: там, где не захотели переплачивать сишарп/джава-пидорам
Аноним 29/03/21 Пнд 13:49:31 1980419560
>>1980405
Тоже так думаю, бизнес по-русски...
И какой вариант тогда, как вкатиться в пых? Может напрямую компаниям писать? Сорян, за глупый вопрос. В отчаянии немного...
Аноним 29/03/21 Пнд 13:49:57 1980420561
>>1979953
Зачем тебе и фронт и бек? Выбери что-то одно, доработай до мидла и тогда уже думай о фулстеке
Аноним 29/03/21 Пнд 13:52:36 1980423562
>>1980419
>как вкатиться в пых?
Как и в любой другой макако-стек: выучить платину вопросов на собесы, сделать спиздить пет, нарисовать опыта в резюме, апплаиться на удаленку на вакансии мидла
Аноним 29/03/21 Пнд 14:13:03 1980442563
>>1980423
сложна блядь... надо быть мастером пиздобольства видимо, как пыня
Аноним 29/03/21 Пнд 14:14:30 1980445564
>>1980420
фронт бэку тоже требуют ведь
Аноним 29/03/21 Пнд 14:21:36 1980452565
>>1980442
А хуле ты хотел? В айти без софт скиллов путь заказан
Аноним 29/03/21 Пнд 14:21:57 1980453566
>>1980445
Ищи нефулстек ваки
Аноним 29/03/21 Пнд 14:24:40 1980456567
>>1980452
наёб называется софт-скиллами?
Аноним 29/03/21 Пнд 14:25:14 1980458568
Аноним 29/03/21 Пнд 14:34:12 1980469569
Аноним 29/03/21 Пнд 15:01:41 1980494570
>>1980469
буду работать над этим...
Аноним 29/03/21 Пнд 16:51:30 1980601571
>>1978222
>что такое борда
Охуенно!
Аноним 30/03/21 Втр 00:04:17 1980994572
>>1980376
>>1980391
>Опыт работы с 1С-Битрикс / Wordpress / Laravel / Symfony.
>Это говно-вакансия?
Хмм, ну даже не знаю....
>>1980405
>15к в ДС это пиздец вообще, наверное на проезд только хватит.
Неделю назад на dou висела эта же вакансия на удаленку, описание один в один. Для интереса только что нашел в архиве - пишет 350-600$. Джуны из украинских деревень стоят дороже, лол?
Аноним 30/03/21 Втр 07:03:49 1981069573
Сап двач. Уже полтора года работаю на дно работе, стек жиквери вордпресс. Пошел туда по финансовым причинам, но у меня сильная тревога от этой работы.
После работы прихожу, и с настроеним "Фух, ну можно и отдохнуть" начинаю пилить что-то на ларавеле и вью.
Может прозвучит самоуверенно, но я знаю кодить, и знаю как вникнуть во что-то относительно непростое за пару дней(наверное у меня такое ощущение просто на фоне тех, кто со мной работает, и ничего не понимает в принципе), и начать что-то делать.
Проблема в том, что у меня 0 релевантного опыта. Полтора года назад я себе накинул год опыта ларавела в выдуманной студии, но на собесах сразу понял что это всё хуйня, все понимают кто я есть на самом деле буквально за пару минут. И дело даже не в этом, я сам понял что в случае с опытом никакие углы не срезать, это реально просто нужно иметь, и это мне нужно.
Я даже свой текущий опыт не могу назвать коммерческим, потому что мой код никто никогда не проверял, никто не говорил как можно сделать по-другому.
У меня уже просто была мысль никому не врать, сказать как есть и надеяться что кто-то в меня поверит. Я даже не знаю как себя охарактеризовать, наверное я джун, с потенциалом в мидла спустя месяца 3-4 в нормальной фирме. Ну и проблема еще в технологиях, вроде имею опыт со многим, но на каких-то вообще минимальных уровнях. Редис? ну как kv хранилище использовал, всё, больше юзкейсов не было. Эластиксерч? Ну как-то настраивал индексацию с заумными фильтрами по доке, ну и всё на этом, больше не трогал никогда. В последнее время вообще очень много фронтом занимался, хоть там меня не ограничивают в стеке особо, понял как относительно правильно писать на вью, попробовал даже новые хуки, очень понравилось. Короче вроде уже и проработал, и денег заработал, и даже апнул софтскиллы некоторые, но сейчас как будто снова вкат как в первый раз будет. Еще постоянная тревога, что я не стою тех денег, которые мне платят. Мне даже как-то неловко штуку просить, хотя понимаю что это обычная зарплата и всем ок.
Аноним 30/03/21 Втр 11:54:31 1981188574
>>1981069
>Полтора года назад я себе накинул год опыта ларавела в выдуманной студии, но на собесах сразу понял что это всё хуйня, все понимают кто я есть на самом деле буквально за пару минут
Ну так нужен хоть какой-то опыт работы с ларой. Молодец, что пет на ней пишешь.

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

>У меня уже просто была мысль никому не врать, сказать как есть и надеяться что кто-то в меня поверит
С текущими реалиями рынка маловероятно. Вкатунов толпы.
Апай скилы, пили пет на ларе, штурмуй собесы
Аноним 30/03/21 Втр 11:55:49 1981190575
>>1981069
>Еще постоянная тревога, что я не стою тех денег, которые мне платят
Тебе наверняка еще и недоплачивают.

>Мне даже как-то неловко штуку просить, хотя понимаю что это обычная зарплата и всем ок.
Это зп джуна
Аноним 30/03/21 Втр 12:51:10 1981226576
8wAPE0N8HlI.jpg 62Кб, 550x531
550x531
Аноны, кто как вкатился? Прокомментируйте мой роадмап.
1. Дрочу по верстку по хтмлакадемии - интерактивный курс за 600р на месяц + пиздженные курсы (м.б. барбик сверстаю).
2. Пижжу курсы Кудлая по пхп, смотрю их, дрочу книгу Скляра по пхп.
3. Наворчиваю Кантора по жсу.
4. Решаю задачки ОПа вплоть до списка студентов.
5. Пижжу курсы Кудлая по ларе и MySql, ларакасты, пишу борду/магазин/блог/рсс-читалку
6. Хожу по собесам, принимаю струи мочи на лицо
7. Вкатываюсь
8. Работаю год, дописываю пет из пункта 5, монетизирую, вывожу на IPO, становлюсь миллиардером
Думаю все займет месяцев 8-9 фултайм учебы. Что скажете, что язабыл? Надо ли вью.жс задрачивать для первой работы? На чем чаще джуны срезаются? Что по советуете?
Аноним 30/03/21 Втр 13:08:35 1981245577
>>1981226
ну проблема в том, тчо ты задаешь эти вопросы аа не делаешь, я сам вот вкатываюсь, но блять тебе отвечаю, чем трачу свое время, так что пищи код молча и работай
Аноним 30/03/21 Втр 13:13:44 1981247578
>>1981226
План говно.
В первую очередь нужен кодинг пета с подсматриванием в гугл и доку.
Аноним 30/03/21 Втр 15:28:41 1981416579
>>1979883
> Я просто помню когда решал задачу про банкомат в ОП мануале чуть не офигел
Я чет совсем обмяк от нее, даже желание пропало что-то делать (жадным алгоритмом сделал почти сразу, а вот дальше...)
Аноним 30/03/21 Втр 15:34:01 1981422580
объясните, пожалуйста,
зачем нужна перезагрузка страниц (формы) после отправки товара в корзину?

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

почему так? и если ли варианты как это переделать?

сама страница корзини не обрабатывает заказ, это делает другой файл на бекенде, но корзина обрабатывает товар, чтобы правильно показать конфигурацию, допустим когда собираешь себе комп
Аноним 30/03/21 Втр 15:38:55 1981424581
>>1981247
Двачую этого. Курсы по айти - клеймо дэбила. Неважно, оплаченные или пизженные.
Аноним 30/03/21 Втр 16:40:36 1981475582
>>1981422
> зачем нужна перезагрузка страниц
Сейчас есть возможность вообще сделать весь твой сервис без единой перезагрузки (SPA), например, посмотри как работает ВК.

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

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

Если кратко, ты вместо дефолтного экшена формы делаешь этот экшен аяксом. Через JS сериализуется форма, отправляется запрос и принимается ответ. Потом уже исходя из ответа ты совершаешь какие-то действия, показываешь уведомление что все ок, либо ошибку. На бэкенде соответственно должен быть обработчик, который будет возвращать респонс, например в JSON формате.
Аноним 30/03/21 Втр 16:44:27 1981483583
>>1981247
А разве комааниям, не позуй на пет проекты?
Аноним 30/03/21 Втр 16:45:37 1981487584
>>1981416
Не опускай руки, отдохни, и вернись к задаче. Можешь на мелкие куски разбить задачу, как вариант.
Аноним 30/03/21 Втр 16:50:07 1981493585
>>1981069
У тебя хоть какой-то опыт есть. Попробуй по собесам походить. Не зацикливайся на себе, от этого хуже только. И удачи тебе анон.
Аноним 30/03/21 Втр 16:50:52 1981494586
Аноним 30/03/21 Втр 16:58:26 1981502587
>>1981475
привет, спасибо

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

дальше стандартная форма пхп на "куда доставить и что написать".

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

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

ну вот и вроде сама корзина ничего не делает, а перезагрузка страницы очень напрягает. а как сделать я хз. опыта не хватает чтобы понять в чем суть.
Аноним 30/03/21 Втр 17:09:12 1981514588
>>1981502
> странице корзины по этому имени все подружаеться с базы
Чего? Т.е. ты выборку не по ID делаешь, а по названию товара?

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

Короче, смотри куда ведет форма добавления товара и по аналогии с удалением сделай добавления. Т.к. у тебя там вью, я хз как правильно это сделать, к сожалению с вью не работал почти.
Аноним 30/03/21 Втр 17:16:29 1981523589
>>1981483
Похуй-не похуй.
Разрабу нужна практика, чтобы на собесе было о чем поговорить.
Спросят так: Сыч, а как бы ты сделал хуйню_нейм? А ты её уже делал и рассказываешь.
Аноним 30/03/21 Втр 17:18:36 1981525590
>>1981523
> Сыч, а как бы ты сделал хуйню_нейм? А ты её уже делал и рассказываешь.
В идеале ты должен рассказать несколько способов как можно сделать хуйню_нейм и пояснить достоинства и недостатки каждого способа. Тогда к тебе точно вопросов не будет.
Аноним 30/03/21 Втр 17:40:52 1981551591
>>1981525
Альтернативные способы так же придут по мере работы с петом
Аноним 30/03/21 Втр 18:05:11 1981570592
Screenshot3.png 23Кб, 882x633
882x633
>>1975462
>1) сделать по принципу работы счетчика за электричество. Как он работает? Изначально все цифры на нем равны 0, например 0000. Затем увеличивается последняя цифра, когда она доходит до 9, она сбрасывается в 0 и увеличивается предыдущая (получается 0010). И так далее, до комбинации вроде 9999.
Ты можешь точно так же увеличивать число купюр.Сначала увеличивать самую младшую, потом сбросить ее в ноль и увеличить следующую, итд. Только разница в том, что максимальное число купюр будет не 9, а какое-то другое число, и для каждой купюры свое. То есть, начать с комбинации 0 0 0 0 и идти до максимально возможной.

Вот кто-нибудь вообще внятно может объяснить как это сделать и в чем тут прикол?
Увеличил последнюю, занулил, дальше следующую, также зануляется, в итоге приходим к числу 1 0 0 0, и что дальше с этим делать? Как-то не доходит до меня уже который день, вот в моем случае решением является комбинация 0 3 0 3, как мне ее получить если решать "счетчиком"?

Ну да я тупой и что...
Аноним 30/03/21 Втр 23:16:44 1982002593
>>1981188
Спасибо за поддержку, для меня это важно
Аноним 31/03/21 Срд 11:02:40 1982245594
>>1981514
да, по названию, как-то так работает вся система, но там специфика такая.

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

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

только льзя ли так? вроде все просто? но каженться, что это очень дырявая система получаеться, или нет?
Аноним 31/03/21 Срд 12:52:24 1982325595
Немножко оффтоп, но спрошу тут. Появилась задача написать ТЗ для некоего сервиса, где будут регаться пользователи с разными ролями и совершать различные действия. Я пока пишу все текстом, но возможно есть какой-то инструментарий для визуального проектирования? Типа тут у нас вот такие сущности, тут другие, это все вот так то связано. Как вообще принято проектировать и описывать сложные системы? Я сам ни разу не занимался таким, что-то даже непонятно с какого бока подойти. Текстом то вроде получается описать все, но целостной картины как все должно работать из текста не возникает. Либо, может я тупой такой.
Аноним 31/03/21 Срд 14:12:05 1982385596
Аноны, начал для себя путь изучения этого вашего пхп, прошел книгу опа до регулярок и решил установить себе на комп апачи и пхп, смотрю сейчас мануалы и как начал понимать как эти ваши серверы работают, такого свинячего удовольствия не испытывал уже с детства, дай бог здоровья каждому анону в этом треде за подсказки и поддержку, всех обнял
Аноним 31/03/21 Срд 14:22:35 1982390597
>>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. Когда мы дойдем до нее, это значит, что мы перебрали все возможные комбинации и перебирать больше нечего. Если мы до сих пор не смогли подобрать нужную сумму, значит это невозможно.

Твоя ошибка в том, что ты пропустил часть комбинаций. Когда ты увеличиваешь вторую с конца цифру, ты снова должен перебрать все значения последней цифры.
Аноним 31/03/21 Срд 14:32:52 1982392598
>>1980264

Не знаю, можно ли это сделать в Laravel, но один из вариантов такой:

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

Вообще, по моим ощущениям, все нужные записи в БД лучше всего создавать в самом тесте. Есть вариант, когда перед тестами БД заполянется (например, с помощью seeders), но это плохо тем, что ты не можешь определить, для чего добавлена та или иная запись в БД, каким тестам она нужна. То есть получается свалка из непонятно к какому тесту относящихся данных. А когда ты нужные записи создаешь в тесте, такой проблемы нету.
Аноним 31/03/21 Срд 14:49:56 1982404599
>>1979764

В яве не все идеально. Вот простые примеры:

- в PHP можно сравнить строки как $a == $b, в яве нельзя
- в PHP легко вернуть из функции 4 значения разных типов через массив: [$a, $b, $c, $d]= some_func(), а как это сделать в яве? Почему туда до сих пор не завезли возврат нескольких значений?

Ява более многословная и код, решающий одну задачу, в ней может получиться больше по объему, чем в PHP. Хотя у нее и немало плюсов, например, богаче синтаксис, быстрее скорость работы. Недаром в Андроиде много кода написано на яве.
Аноним 31/03/21 Срд 14:54:07 1982406600
>>1982404
>в PHP легко вернуть из функции 4 значения разных типов через массив: [$a, $b, $c, $d]= some_func()
Часто такое на проде видел?
Выглядит как попытка заменить объект массивом
К слову в го возврат нескольких значений - та еще залупа
Аноним 31/03/21 Срд 15:09:11 1982418601
image.png 47Кб, 501x290
501x290
Подскажите в чем именно я не прав, по ситаксису все нормально, нигде не обосрался, а при запуске мне дает вот такую ошибку
Аноним 31/03/21 Срд 15:12:38 1982421602
>>1982418
Лол, ну ты бы хоть ошибку показал, а не эту хуйню. Ты нахуй апач как службу то поставил? Не еби мозг поставь openserver, laragon или denwer какой-нибудь. А в идеале вообще лучше в виртуалке это все делать, чтобы свою систему не засирать.
Аноним 31/03/21 Срд 15:18:03 1982423603
>>1982406

В Го как раз сделано удобно, на уровне языка. А число 4 я указал, чтобы умники не лезли с готовыми классами Pair и Triple.

>>1982418

Можно попробовать поискать подробности в журнале (он находится где-то в настройки ->администрирование -> журнал событий).

Скорее всего, не хватает какой-то библиотеки, которая нужна Апачу для работы. Например, Microsoft VC Runtime. Там, откуда ты скачал Апач, может быть точное название библиотеки.

Проверить, что какой-то DLL не хватает можно с помощью программы вроде Dependency Walker, загрузив в нее exe-файл Апача и посмотрев, что она покажет.
Аноним 31/03/21 Срд 15:21:52 1982427604
>>1982418

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

httpd.exe -t

(если Апач не прописан в PATH, тебе может понадобиться указать полный путь к httpd)
Аноним 31/03/21 Срд 15:45:27 1982446605
>>1982423
>В Го как раз сделано удобно, на уровне языка
Это неудобно, когда тебе нужен 1 из этих параметров, а другие нужно куда-то деть. Получается простыня кода, либо куча _, что снижает читабельность
Аноним 31/03/21 Срд 15:48:09 1982450606
>>1982418
>ставить апач на винду
Ты не туда воюешь.
Большинство серверов - линух. Соотв либо бери линь, либо линь в виртуалке, либо как посоветовали xamp/openserver
Аноним 31/03/21 Срд 16:30:46 1982503607
>>1982450
Удвою этого господина, добавлю что есть еще вариант с Docker. По ценности навыка - будет наверное лучшим вариантом. Почти любой относительно серьезный бэкендер сегодня должен уметь в докер.
Аноним 31/03/21 Срд 16:32:28 1982504608
>>1982421
>>1982423
понимаю, но журнал пустой, туда я заходил, буду использовать тогда openserver и не буду ебать мозг
Аноним 31/03/21 Срд 16:50:55 1982523609
А какие сейчас шаблонизаторы для верстки в 2к21 году популярны в РНР фреймворках? Blade и Twig?
Аноним 31/03/21 Срд 17:21:42 1982559610
>>1982523
В 2к21 по сути стандарт - отдельный фронт-фрэймворк. Шаблонизаторы в более менее серьезных проектах используют обычно максимум для почтовых рассылок и всякой админской мелочевки. А вцелом, есди надо быстро и на коленке - тот что во фрэймворке есть и используют, разница не существенная.
Аноним 31/03/21 Срд 17:26:57 1982567611
>>1982392
В Laravel можно заполнять нужными данными во время теста и тестировать. Можно сделать также, чтобы после каждого тестирования база очищалась.
Тестирование в памяти кажется как будто бы удобнее, но наверно лучше и правда на нормальной БД проводить тесты, так как это ближе к реальным процессам.
Аноним 31/03/21 Срд 17:27:06 1982568612
>>1982559
>В 2к21 по сути стандарт - отдельный фронт-фрэймворк.
Я читал, что 95% сайтов - это шаблоны на пиэйчпи CMS-ках или на крайний случай на пиэйчпи фреймворках. А весьма маленький процент - это веб-приложения с отдельным фронт-фреймворком.

Я не прав?
Аноним 31/03/21 Срд 17:28:50 1982570613
>>1982559
> разница не существенная.
Ни понил. Между чем? Между шаблонизаторами разница не существенная? Они работают очень похожим образом?
Аноним 31/03/21 Срд 18:16:29 1982621614
>>1982568
Абсолютно прав. 95% либо сделано на коленке, либо легаси. Поэтому я и написал:
>в более менее серьезных проектах
А если пилится что то сложнее, чем портал для парикмахерской ромашка с тремя кнопками - врядли ктото всерьез будет использовать шаблонизаторы. Есть еще приложения с сервер-сайд рендерингом, но там опять же используются js-фрэймворки обычно.

>>1982570
Они оба решают одинаковые задачи, для которых нужны, не более. Это больше вопрос привычки и привязки к фрэймворку, а не популярности.
Аноним 31/03/21 Срд 18:32:23 1982640615
>>1982504

Что ж ты так быстро сдаешься. Мог бы проверить версию с ошибкой в конфиге и с отсутствием нужной Dll.
Аноним 31/03/21 Срд 18:36:57 1982647616
>>1982559

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

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

Потому, если у тебя типичный сайт фирмы по продаже гвоздей оптом, лучше использовать традиционный подход и формировать страницы на сервере. Не думаю, что SPA сегодня это "стандарт". Разве что там, где разработчики плохо разбираются в разработке и не думают своей головой.
Аноним 31/03/21 Срд 18:49:51 1982660617
>>1982647
Непонимаю к чему ты эту простыню написал. Просто открываешь браузер и любой портал, более-меннее крупной компании, там js-фрэймворк. Про гвозди оптом я писал. Если потолок писать такое - ну ок наверное, выбор каждого. Стандартом, как мне кажется все же лучше считать best-practices, а не сайты для ашота за 5к.
И с чего бы вдруг js-фрэймворк == спа я вообще не понял, у тебя траблы с матчастью.
Аноним 31/03/21 Срд 18:53:01 1982661618
>>1982660
>Просто открываешь браузер и любой портал, более-менее крупной компании
Зависит больше не от крупноты компании, а от того, что им надо от сайта. Если компании нужен просто сайт компании в виде блога, то там и вордпресса хватит.

А если им нужен личный кабинет для большого количества пользователей с кучей всякого разного функционала. То тогда, да, там будет фреймворк.
Аноним 31/03/21 Срд 19:21:42 1982689619
>>1982661
Зависит от статуса я бы сказал. А статус почти всегда имеет прямую финансовую зависимость. Бизнес уже давно прекрасно ориентируется в интеренете и хочет как минимум не хуже, чем у конкурентов. И если бизнес устраивает вордпресс - либо это вышеупомянутые ромашки, которые платят копейки и работают с васян-студиями, либо конторе повезло наткнутся на лоха. Но я за 4 года лохов не встречал чот.
Аноним 31/03/21 Срд 19:27:42 1982700620
>>1982689
За 4 года всегда приходилось на vue, react, angular фронт пилить?
Аноним 31/03/21 Срд 19:42:58 1982725621
>>1982700
Не приходилось ни разу пилить ничего, сложнее верстки шаблонов документов для печати или формочки письма. Для фронта есть фронтендеры, если контора не веники вяжет.
Аноним 31/03/21 Срд 20:39:43 1982769622
>>1982660

> И с чего бы вдруг js-фрэймворк == спа я вообще не понял, у тебя траблы с матчастью.

Это что-то новое.

Если это не SPA, тогда зачем вообще нужен рендеринг на клиенте? Это никому не нужное усложнение на ровном месте. Какая выгода при загрузке страницы грузить тяжелый многомегабайтный JS-код (спасибо вебпаку) и ждать, пока он будет делать какие-то аякс-запросы? Если можно просто отдать HTML со всеми данными, который рендерится с помощью Twig? Это и грузится быстрее, и поисковым машинам больше нравится.

Зачем ориентироваться на то, кто как делает и какие-то мифические best-practices, неизвестно кем написанные? Среди разработчиков, особенно фронтендщиков, куча неучей, вкатышей, просто глупцов. Даже именитые разработчики могут защищать глупую идею просто потому, что они ее сами придумали. Давай объективно искать плюсы и минусы, а не ссылаться на то, что кто-то где-то так делает.
Аноним 31/03/21 Срд 21:41:16 1982820623
>>1982769
Ну если банальный реакт с сервер-рендерингом для тебя что то новое, я вообще хз в какой дыре ты инфу черпаешь.
Про многомегабайтный код - вообще пушка, чекай свой storage, там и реакт и все его друзья давно загружены.

Ориентироваться я буду на то, за что платят хорошо. А хорошо платить люди готовы за чистый бэкенд и нормально распределенный код, а не за фуллстак макакенов, которые всех, не согласных со старперскими фантазиями считают неучами и советуют клепать бложики из 2000х.
Аноним 31/03/21 Срд 21:56:43 1982832624
>>1982647
> SPA тормозные и глючные, долго грузятся
Вот пример новостного сайта на реакте https://meduza.io/ он летает и грузиться первый раз моментально.
А теперь открой свое говно на каком-нибудь битриксе или жумле
Аноним 31/03/21 Срд 22:00:20 1982834625
Вечер в хату, арестанты.

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

https://docs.google.com/document/d/1fELTk3jdpieIDKlTe-xQF8wd62MwaGffjMDf0rNOcYk/edit?usp=sharing

Я бы хотел, чтобы это было в виде каких-то модулей на веб-сайте. Ну типа загружаешь туда файлик еxcel или csv, нажимаешь кнопку, и комплект документов генерируется, либо отправляется рассылка по номерам из примера 2.
Аноним 31/03/21 Срд 22:10:32 1982839626
>>1982832
>он летает и грузиться первый раз моментально
Просто там бэк не на пыхе написан)))
Аноним 31/03/21 Срд 22:20:03 1982843627
>>1982832

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

Это же просто новостной сайт, который отдает почти статические странички (изредка обновляющиеся). Зачем тут вообще фронтенд-фреймворки? Просто с сервера отдай список статей, либо страницу статьи и все. А они зачем-то наворотили там навороченный фронтенд. Я не вижу, какие плюсы дает тут сложный фронтенд и считаю, что сайт переусложнен на ровном месте.

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

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

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

Не надо ссылаться, что кто-то где-то использует реакт. Это ничего не значит. Давай объективно рассуждать, какие есть плюсы и минусы от такого решения.
Аноним 31/03/21 Срд 22:22:14 1982847628
>>1982834

Твой документ не открывается анонимно. Сделай его доступным.
Аноним 31/03/21 Срд 22:26:37 1982850629
>>1982820

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

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

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

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

Вообще, localstorage презназначен для хранения данных, а не использования как кеш. Это уже само по себе неправильно и негативно говорит о том, кто так делает. Далее, кеш этот принесет мало пользы, так как код постоянно релизится, а значит, его надо загружать с сервера заново.
Аноним 31/03/21 Срд 22:36:14 1982853630
>>1982850
>которые верстать сайт для IE не способны
Я другой анон. А реакт библиотека - это типа новый жиквери? Такая библиотека для кроссбраузерности и библиотека чтобы она сама под капотом считала виртуальный ДОМ - как оптимальное отрендерить настоящий ДОМ.
Аноним 31/03/21 Срд 22:40:50 1982859631
>>1982832
Я тут вмешаюсь в ваш диалог. Значится это мой звездный час. Потому что вы же все богатые 300к наносеки. И у вас компы ахуенные с интернетом быстрым.

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

Далее я нашел топ 50 сайтов на вордпрессе, на первый сайт перешел. Тоже примерно столько же грузится, пару секунд. Тоже не сразу все отобразилось.
Аноним 31/03/21 Срд 22:41:25 1982861632
Аноним 31/03/21 Срд 22:42:38 1982862633
>>1982850
> верстать сайт для IE
Благо, на дворе не 2010 год и с кроссбраузерностью нужно не так сильно заморачиваться, благодаря стандартам и спецификациям. Да и движок то по сути остался лишь один (ну ладно, два). Короче если у тебя не какой-то йоба проект с миллионами хитов каждый день и у тебя не pixelperfect верстка, то никаких серьезных проблем с кроссбраузерностью у тебя не будет.

> тащить эту технологию на каждый сайт просто потому что на Хабре много статей про реакт - глупо
Согласен, шутка про домашнюю страничку с миллиардом файлов зависимостей уже давно перестала быть шуткой.
Аноним 31/03/21 Срд 22:53:47 1982869634
>>1982853

Реакт это не jQuery. Это библиотека для рендеринга шаблонов на клиенте с поддержкой data binding ("реактивность").

То есть, у тебя в JS коде будет шаблон, ты его рендеришь, передавая в него данные. Если данные изменились, то ты снова вызываешь рендеринг и данные на странице обновляются.
Аноним 31/03/21 Срд 22:54:43 1982870635
>>1982843
А если нужно дополнительно пилить апишку для агрегатора, мобильного приложения и прочей хуеты, тогда как? На мой взгляд все просто и лаконично этот бек можно использовать и в других местах, а фронт что в шаблонах верстай, что компоненты для реакта разницы особой нет, остаётся только роутинг прикрутить и ещё пару мелочей. Плюс на бек можно взять более легковесный фреймворк и не париться о роутах и вьюхах, тут больше не усложнение, а перенос части кода и логики на клиентскую часть.
А Сбербанк и прочие банки это совершенно другая история, там есть помимо рюшек-менюшек много логики и всякой специфичной хуйни для безопасности, можно даже понаблюдать как оно работает в консоли и на вкладке network.
Аноним 31/03/21 Срд 22:56:04 1982872636
>>1982839
На руби если мне память не изменяет
Аноним 31/03/21 Срд 22:57:36 1982874637
>>1982862

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

А современные фронтендщики умудряются верстать так, что во встроенных браузерах несколько летней давности сайт не работает. Так-то.

Это надо постараться, чтобы сломать сайт в Хроме нескольколетней давности. Я когда-то в IE6 скругленные инпуты делал, вот там пришлось заморачиваться. А эти неучи под хром сверстать не способны.
Аноним 31/03/21 Срд 23:02:15 1982879638
>>1982874
Это надо быть совсем уже долбоебами чтобы при наличии полифилов и бабелей что-то не работало в старом хроме. Что-то из CSS криво, вполне возможно, но вот все остальное должно прекрасно работать даже на ие 11
Аноним 31/03/21 Срд 23:05:55 1982883639
>>1958281 (OP)
MVC использую в фреймворках по типу Laravel или там своя система?
Аноним 31/03/21 Срд 23:07:40 1982887640
>>1982874
>Я когда-то в IE6 скругленные инпуты делал, вот там пришлось заморачиваться. А эти неучи под хром сверстать не способны.
Не думаю, что это то, чем стоит гордиться.
Аноним 31/03/21 Срд 23:11:04 1982892641
>>1982870

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

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

Это только для сайтов уровня туду-листа можно обойтись одним общим API.

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

В классической схеме тебе нужно вывести на странице данные A, B, C . В SPA тебе нужно отдать через API эти же A, B и C. и хорошо еще, если одним запросом, а не несколькими (это будет медленней). По моему, затраты тут примерно одинаковые.

Конечно, если у тебя какой-то тормозной шаблонизатор, может быть разница, но тот же Twig компилирует шаблоны в PHP код и работает быстро. И мощному серверному процессору наверно проще отрендерить страницу, чем дохлому сяомишному ARM (если конечно заказчик не сэкономил на хостинге).

По моему, скорость отдачи ответа будет примерно одинаковая. Только в одном случае ты отдаешь готовую страницу, а в другом - всего лишь ответ на аякс запрос, к которому надо прибавить время загрузки JS бандла, и может быть время отправки других запросов. Есть конечно варианты встраивать JSON прямо в страницу, но тут возникает вопрос, почему бы не встраивать сразу HTML-код.

> остаётся только роутинг прикрутить и ещё пару мелочей

Да нифига не пару мелочей. Надо сделать, чтобы кнопка назад работала как хочет заказчик, надо разбивать JS на бандлы, надо заморачиваться с SSR, подставлять ранее введенный емейл в формы, обрабатывать авторизацию и так далее. Тут именно что гора работы возникает на ровном месте.

Кстати, по поводу производительности. Я как-то букинг открывал со смартфона, он чуть ли не минуту грузился и все тормозило. Может, конечно тут еще виновато медленное соединение, но мне кажется, сайт на HTML и с минимумом JS работал бы куда быстрее на дохлом телефонном процессоре.
Аноним 31/03/21 Срд 23:14:46 1982899642
>>1982874
> Я когда-то в IE6 скругленные инпуты делал, вот там пришлось заморачиваться
Без border-radius заморачиваться приходилось во всех браузерах. Инпуты еще ничего, а вот попапы это да.

А для телефонов один хуй показывается адаптивный вариант верстки, более упрощенный. Те же флексы работают даже в бородатых андроидах.
Аноним 31/03/21 Срд 23:16:51 1982901643
>>1982887
Ну как: раньше еблись с кроссбраузерностью, теперь ебутся с адаптивом. С одной стороны стало легче (то что делается за три секунды при помощи флексов и гридов раньше приходилось городить костылями и кучей оберток, иногда даже при помощи js), с другой стороны появились новые проблемы в виде мобил и экранов с высоким ppi.
Аноним 31/03/21 Срд 23:21:07 1982904644
Сап. Как фиксить это: Failed to connect MySQL: Access denied for user 'root'@'localhost' (using password: YES) ?
Аноним 31/03/21 Срд 23:23:28 1982907645
>>1982904
Прописать корректный пассворд в конфиге с настройками коннекта к БД.
Платиновый вопрос: а какой у меня пароль для root@localhost?
Аноним 01/04/21 Чтв 02:00:02 1982952646
>>1982892
>Есть конечно варианты встраивать JSON прямо в страницу, но тут возникает вопрос, почему бы не встраивать сразу HTML-код.

Вставлю свои пять копеек, в последнее время так сложилось что 90% времени пилил на вью а не на пхп. Реакт или вью(чуть в меньшей степени) это прежде всего тулинг. Разбиение на микрокомпоненты(даже на кнопки и инпуты) дает чувство как бы так сказать cohesion(?). Те же CSS-in-js пакеты(не фанат), или цсс модули. Каждая магическая строка превращается в определенную сущность, без которой твоя сборка не соберется. Это добавляет строгости не на уровне согласованности, а на уровне конфигурации. Если ты делаешь проект один, то ты можешь вспомнить при рефакторинге удалить из фронта какой-то класс и т.д. Но на потоке это 100% не выйдет. Со временем всё начнет разбухать. Не зря говорят что тот же CSS unmaintainable в обычном виде. В том же вью, обычно принято писать цсс под шаблоном и логикой компонента. Если ты не используешь компонент в проекте, то ты одновременно не используешь и его логику, и его стили. А потом у тебя получается ситуация, что часть написана на пхп, а часть на вью. Ты начинаешь задумываться, копировать весь компонент на пхп, или просто вставить жсон и использовать уже готовое. Тебе начинает нравится вся эта строгость, ты можешь крутить свой проект как хочешь, и тебе ничего не сделают, ведь ты в другом городе. Абсолютно согласен, что клиент на жсе добавляет хороший такой оверхед при разработке.

По поводу медузы, у них вообще своя история и свой путь. Всё сделано на реакте, потому что так тупо удобнее. Не знаю что у них там за редактор статей, свой какой-то написали, но как я понял там можно буквально для каждого параграфа задавать разные стили и отступы, это всё передается в виде жсона, который потом хавает реакт или флаттер и превращает в компоненты, для мобильного приложения такая же история. Основной аргумент главного по ит из медузы был в том что они так сделали, чтобы в случае чего не обновлять каждый раз приложение, это ведь не веб всё таки. Я с этим согласен, когда у тебя есть какой-то блочный редактор, в котором есть различные компоненты так сказать кастомные, то это всё дело банально удобнее делать на каком-то клиентском фреймворке, потому что часто компонент это не только разметка, а еще и стили и поведение. Как я уже писал выше, отсутствие вот этой связности(? русский язык сложно) приводит к беспорядку спустя время
Аноним 01/04/21 Чтв 10:41:39 1983033647
>>1982952
>редактор статей, свой какой-то написали, но как я понял там можно буквально для каждого параграфа задавать разные стили и отступы
Я другой анон. И мне кажется, что реакт может быть удобен тем, что если писателей у медузы много, то можно каждому из них на комп загрузить SPA-редактор на реакте. Они там напишут статью, красиво все отступы и прочую красоту расставят. И отправят все на публикацию.
Аноним 01/04/21 Чтв 10:48:48 1983038648
>>1982640
проверил DLL все в здании, все ровно, да и в целом не хочу тратить время на копание, если это все решается гораздо проще, но спасибо за поодержку)
Аноним 01/04/21 Чтв 11:30:21 1983062649
Объясните, пожалуйста, что мне делать? Я изучаю вордпресс. И решил углубиться в РНР. И я читал в шапке РНР-треда, что надо уметь работать с сервером Apache и с операционной системой GNU/linux.

Далее я натянул верстку на вордпресс. И пришло время закинуть мою тренировочное говно на сервер. Я завел на таймвеб новый акк. Там дают 10 бесплатных дней поиграться с хостингом.

И короче, я нихуя не понял, а где там Apache и GNU/linux? Там в таймвеб просто интерфейс предоставлен, что вот сюда файлы загружай.

Я нихуя не понял, а че куда там и где требуется применять познания в Apache и GNU/linux?
Аноним 01/04/21 Чтв 11:56:49 1983088650
>>1983062
З.Ы. Извините, пожалуйста, я погорячился. Вопрос снят. Не надо отвечать на него.
Аноним 01/04/21 Чтв 12:13:50 1983098651
>>1983062
В общем случае подключиться по ssh к консоли сервера и делать там свои дела.
Можно через sftp менеджер файлы закинуть по старинке, либо через гит (хаб/лаб/си/хуяй)
Аноним 01/04/21 Чтв 12:31:01 1983107652
>>1983098
Ок. Понял, принял, спасибо большое
Аноним 01/04/21 Чтв 12:48:02 1983110653
>>1982869
Ну, я читал про все эти стэйты и просы, что данные изменились, реакт считает виртуальный ДОМ, а потом оптимальным образом рендерит настоящий ДОМ.

Просто я имел ввиду, что реакт - это новый жиквери. Что это модная библиотека которую теперь будут везде пихать.
Аноним 01/04/21 Чтв 13:23:05 1983154654
> реакт - это новый жиквери
Мне кажется это вообще про разное.

> это модная библиотека которую теперь будут везде пихать
Ровно до появления новой модной технологии
Аноним 01/04/21 Чтв 14:51:29 1983209655
>>1958281 (OP)
Статьи ОПа про MVC, шаблоны и автозагрузку еще актуальны?
Аноним 02/04/21 Птн 16:10:02 1984059656
Аноны, привет всем. Годные учебники по PHP 8 появились уже? Неважно какой язык, русский или английский.
Аноним 02/04/21 Птн 18:26:16 1984146657
Начал пилить приложение на симфони, офк нужен был вебпак. Установил Symfony Encore, сразу вопрос: что за stimulus и нахуй он мне нужен вообще? Какие-то контроллеры, они издеваются? Это кто-то юзает вообще?
Аноним 03/04/21 Суб 01:45:54 1984532658
Аноним 03/04/21 Суб 10:56:36 1984625659
Сап, анон.
Делал тестовое задание для одной конторы, отправил вовремя, по итогу просто молча отказали, позже аргументировав тем, что все сделано через жопу.
Если есть свободное время и желание - можешь посмотреть и дать совет, что не так?
git: https://tinyurl _ com/2y7xnv3t
test: https://tinyurl _ com/axw27xpa
Аноним 03/04/21 Суб 13:46:56 1984721660
>>1984625
Я бы тоже тебя нахуй за такие ссылки послал
Аноним 03/04/21 Суб 14:01:57 1984735661
Аноним 03/04/21 Суб 14:22:07 1984748662
Аноним 03/04/21 Суб 16:40:27 1984883663
1617457225707.jpg 38Кб, 792x228
792x228
1617457225777.png 16Кб, 635x191
635x191
Вопрос по Ларавелу 8.
Я пытаюсь словить ModelNotFoundException, который выдаёт Model::findOrFail. Исключение выдаётся, но игнорируется обработчиком и потом превращается в другое исключение. Почему?
Аноним 03/04/21 Суб 17:20:10 1984925664
>>1984883
Всё, догадался заглянуть в родителя хандлера, вопрос снят
Аноним 03/04/21 Суб 22:18:04 1985125665
>>1984735
Сам ты еблан. Эти ссылки могут содержать что угодно, они не просто так в спам-листе, блять. Конечно нормальным людям на линуксе похуй на всякие вирусы, но тем не менее.
Еще и заставляешь уважаемых господ копировать мышкой это дерьмо, вставлять в строку и заменять символы.
Нахуя тебе это вообще? Боишься что твой никнейм будет в поисковиках индексироваться? Да на здоровье.

https://github.com/rscugh/ - Неуравновешенный человек, сидит на сайтах для анонимных анимешников-педофилов, называет незнакомых людей ебланами. Да и код такой себе пишет.
Аноним 03/04/21 Суб 22:29:56 1985134666
image.png 78Кб, 1217x579
1217x579
image.png 28Кб, 552x180
552x180
Товарищи помогите, на пашет авторизация у веб проекта, выводит ошибки.
Аноним 03/04/21 Суб 23:08:00 1985151667
>>1985125
Вопрос снят, все всё поняли.
Аноним 04/04/21 Вск 12:43:23 1985533668
Снимок1.PNG 36Кб, 608x773
608x773
Снимок2.PNG 15Кб, 619x393
619x393
Снимок3.PNG 14Кб, 517x335
517x335
Есть вопрос с возвратом html вместо json, error пишет Ошибка AJAX: parsererror | SyntaxError: Unexpected end of JSON input. Если изменить dataType на html то в консоль выводит дату как пустой объект. Собственно что я делаю не так?
Аноним 04/04/21 Вск 16:51:08 1985824669
Аноны, вчера почитал про работу с файлами и загорелся сделать себе для своего сайта костыль в 1 файл скрипта, который просто будет встроен в страницу например с товаром и будет записывать в текстовый файл с новой строки какие товары пользователи сегодня смотрели, а затем на специальной странице выводить эти товары типа как "сегодня смотрели", и у меня встал вопрос, сильно ли это плохо использовать для этого текстовый файл? Подключать майскьэль не хочется, но есть уже встроенный лайтскьэль, я немного встрял с логикой скрипта, подскажите правильное движение

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

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

Или вообще записывать всё это не в текстовый файл, а в json файл где каждый товар будет в виде ассоциативного массива и просто парсить этот json файл, искать в нём текущий посещённый товар, если найден удалять, если нету до добавлять и обратно всё это сохранять в json файл? А на странице вывода просмотренных сегодня товаров просто парсить этот файл и выводить через цикл на странице, я в правильнмо направлении?
Аноним 04/04/21 Вск 17:39:06 1985910670
>>1985134

Скорее всего у тебя в начале файла невидимый символ BOM (что такое BOM: https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%80%D0%BA%D0%B5%D1%80_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2 ). То есть, твой файл выглядит так:

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

Аноним 04/04/21 Вск 17:42:49 1985918671
>>1985533

Ты в функции $.ajax указал dataType = json. Если с сервера приходит не JSON, а HTML, то естественно, функция ajax() выдает ошибку.

По моему, все работает корректно.

Что ты хочешь получить?
Аноним 04/04/21 Вск 17:53:27 1985925672
>>1985824

Что касается вопроса "какой вариант быстрее": надо тестировать. Сделай несколько функций (для каждого способа сохранения) и замерь, за сколько времени в них обработается, допустим 100 000 товаров.

Я могу предложить еще один вариант для сравнения: использовать redis. Redis хранит данные в памяти, не сохраняя их на диск, и поддерживает работу со списками (добавление, обрезание). За счет того, что все происходит в памяти, производительность должна быть очень хорошей.

Также, если тебе не хочется использовать redis, есть еще один вариант: shared memory. Это кусок памяти, который выделяется и не очищается между запусками скрипта. Можно в нем хранить список товаров. Это тоже должно быть быстро. Работать с shared memory можно как напрямую, так и через расширение вроде apcu.

Надо понимать, что БД вроде sqlite - это по сути и есть работа с файлами, только они имеют более сложную структуру (отдельно лежат строки таблицы, отдельно индексы). Иногда это дает плюсы, иногда минусы.

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

> Смущает что если страницу откроют одновременно 2 пользователя или больше, то актуальная версия файлика будет только та которая после прокрутки скрипта будет записана последней, то есть просмотренный товар 1 пользователем будет просто затёрт, ведь они были загружены одновременно, я же правильно понимаю логику?

Да. Ты можешь решить эту проблему, используя обязательные блокировки, но тогда все станет работать медленнее (второму скрипту придется ждать, пока первый завершит работу с файлом. То есть работа с файлом будет последовательной, а не параллельной). БД, кстати, тоже используют блокировки, но более эффективно.
Аноним 04/04/21 Вск 18:13:45 1985937673
>>1985925
Получается анон концепцию я правильную придумал? Доступа к Redis и shared memory у меня нет, хостинг очень кастрированный в этом плане, по этому хочу просто костыль в 1 файл, про ботов не подумал кстати, но пока просто потестировать хочу посмотреть как будет работать, но раз ты советуешь на 100к тестировать, то думаю с 100 записями php справится как нехуй делать, в мгновение, тогда затестирую и файловый метод, и джсон, я так кстати понимаю они будут одинаково работать по скорости, ну и дальше затестирую с скьэльлайт

Тогда пишу такую логику, смотрю есть файл json, если нет - создаю и записываю в него массив с айди товара, названием и ссылкой, если есть, то паршу json в масссив, проверяю есть ли в нём материал с таким айди, если есть - то удаляю его и записываю заново в начало массива, потом обрезаю массив до 100 переменных, паршу обратно в json и записываю всё это дело в файл, на странице со списком промотренных сегодня товаров просто паршу этот json с помощью js и рисую его на странице, надеюсь я правильно нафантазировал
Аноним 04/04/21 Вск 18:32:09 1985946674
>>1985918
что бы с сервера приходил json
Аноним 04/04/21 Вск 18:32:48 1985947675
>>1985937

Я имел в виду, не заполнять файл 100 000 товаров, а, например, 100 000 раз сымитировать "заход на страницу товара". И померять, сколько это займет для каждого способа.
Аноним 04/04/21 Вск 21:35:22 1986077676
Посоны, открываю json с помощью fopen(), декодирую его с помощью json_decode() в массив, работаю с массивом, кодирую его с помощью json_encode() в строку, записываю в файл json с помощью fwrite() и закрываю файл с помощью fclose(), всё правильно?
Аноним 04/04/21 Вск 21:51:31 1986089677
А или можно даже использовать file_get_contents() для открытия json и file_put_contents() для его записи в обновлённом виде?
Аноним 05/04/21 Пнд 15:34:50 1986614678
Сап овощянский. А есть ещё подобные планы, как у ОПа? С таким же подробным роадмэпом.
Аноним 05/04/21 Пнд 16:39:00 1986692679
Где новичку можно начать изучать php 8? Ну, кроме того что в шапке.
Аноним 05/04/21 Пнд 16:40:26 1986695680
>>1986692
> Где новичку можно начать изучать php 8?
Зачем именно 8? Там что-то революционно новое ввели?
Заходишь на официальный сайт и изучаешь.
Аноним 05/04/21 Пнд 17:09:49 1986732681
>>1986695
>Зачем именно 8? Там что-то революционно новое ввели?
Ну лучше сразу последнюю версию начинать изучать, в идеале же.

>Заходишь на официальный сайт и изучаешь.
Я сейчас это делаю, тамошний мануал это нихуя не учебник для новичка. Это вообще не учебник, а справочник какой-то. У меня небольшой опыт в джаваскрипте есть, есть у PHP что-нибудь подобное вот этому https://learn.javascript.ru/ учебнику?? Я по нему жс учил, после него оффициальный мануал пхп это херня от которой голова болит.
Аноним 05/04/21 Пнд 17:18:34 1986749682
>>1986732
Погляди phptherightway

мимоНачинающий
Аноним 05/04/21 Пнд 17:24:39 1986759683
>>1986692
Не учи подумой. Меня тоже здесь предупреждали, я не послушал, теперь жалею. Пыха болото ебаное. Потом времени, потраченного на нее, слишком жалко чтобы учить что-то другое.
Аноним 05/04/21 Пнд 17:37:14 1986785684
>>1986749
Спасибо. Оглядел быстренько, че-то как-то это тоже не для вкатуна материал. Похоже на полировку для того, кто уже выучил синтаксис.

>>1986759
Я не для вката в IT (на галеру) учу. У меня планы замутить свои проекты, и самому их полностью поддерживать. Большинство самых популярных CMS на пхп (WordPress итд), плюс даже если сам с нуля пишешь бэк для небольшого проекта, то пхп как понял наилучший выбор. Так что буду учить по-любому.
Аноним 05/04/21 Пнд 17:41:25 1986790685
>>1986785
Тогда laracast посмотри.
Аноним 05/04/21 Пнд 17:42:23 1986791686
>>1986759
Что тогда посоветуешь?
Аноним 05/04/21 Пнд 17:59:47 1986819687
>>1986785
А, ну тогда пых самый лучший вариант
>>1986791
Если в нормальном городе живешь или рассматриваешь переезд в ближайшее время то что угодно, к чему душа лежать будет. В обратном случае вакансии нужно смотреть, чтобы борщи не хлебать в будущем.
Что бы ты не выбрал, если это тебе нравится и это не пыха, то выбор правильный.
Аноним 05/04/21 Пнд 18:03:30 1986825688
>>1986819
Например. Мне питон нравится. Но по-нему, нет вакух для вкатунов.
Аноним 05/04/21 Пнд 18:07:44 1986833689
>>1986819
>>1986825
Еще не стоит пытаться вкатиться во фронтенд и серьезно изучать жс с фреймворками, там вкатунов как грязи и на собесе требования очень серьезные.
Аноним 05/04/21 Пнд 18:11:42 1986840690
>>1986833
Фронт не рассматриваю, ибо то ещё болото. С жесточайшей конкуренцией.
Аноним 05/04/21 Пнд 18:18:04 1986850691
Аноним 05/04/21 Пнд 18:28:58 1986880692
>>1986833
Да эти вкатуны и сами по качеству как грязь. Уважающий себя человек во фронт-энд не пойдет.
>>1986825
Где как. В крупных городах бывают, но как я понимаю, долго не задерживаются. Это топ 1 язык для вката всё же, все инфоцыгане в первую очередь его рекламируют.
Алсо, довольно часто такие вакансии никуда не выкладывают, охуеешь в говне копаться. Меньшие компании по знакомым ищут, большие выращивают с курсов.
А так, основные языки бэкэнда: нода, питон, джава, сишарп, голанг ( для джуна сомнительно ), ну и php конечно.
Если ты еще студент или просто РННщик, то большие компании проводят бесплатные курсы по всем языкам из списка кроме пыхи. Конечно нужно знать основы.
Просят уделять обучению по 8 часов в день. Если ты в итоге выжил, через несколько месяцев после курсов часто зовут трудоустраиваться. Да даже если не позовут, опыт бесценный.
>>1986850
Ты бот чишо? Тебе уже пояснили всё сверху.
Аноним 05/04/21 Пнд 19:14:13 1986971693
Нубский вопрос - почему вместо последовательных id в бд не используют uuid?
Аноним 05/04/21 Пнд 19:44:42 1987024694
>>1986971
Очень даже используют, если это вписывается в архитектуру. Иногда комбинируют даже оба типа. Но чаще это оверкилл, особенно при наличии больших данных.
Аноним 05/04/21 Пнд 19:52:45 1987034695
>>1986880
>Уважающий себя человек во фронт-энд не пойдет.
Ты просто кукаректнуть или есть манядоводы?
>через несколько месяцев после курсов часто зовут трудоустраиваться
Ну зачем ты пиздишь на анонимном форуме? Из яндекс практикума например попадают на оффер меньше процента прошедших весь курс и те по-большей части отлетают на испытательном.
Аноним 05/04/21 Пнд 20:20:22 1987106696
>>1987034
>Ты просто кукаректнуть или есть манядоводы?
Ну это имхо конечно, но ведь фронтенд как и QA - скукота полная. Я сам люблю отвлечься от бэка и что-то поверстать ( отдых - это ведь смена вида деятельности ), но заниматься только этим - ебануться можно. Когда-то пытался вкатиться во фронт, меня хватило на две недели.
>Ну зачем ты пиздишь на анонимном форуме? Из яндекс практикума например попадают на оффер меньше процента прошедших весь курс и те по-большей части отлетают на испытательном.
Говорю просто по опыту знакомых. В компании по типу яндекса конечно кого-попало не берут, я вообще-то имел в виду большие аутсорсные галеры.
Аноним 05/04/21 Пнд 21:22:06 1987181697
>>1987106
Фронтенд это не обязательно верстка. Есть галеры, где версткой занимаются спецом обученные версталы, а жс-ники к ней уже прикручивают свой функционал.
Аноним 05/04/21 Пнд 21:37:45 1987194698
>>1987181
Вкатун во фронт, полюбому верстать будет.
Аноним 05/04/21 Пнд 21:38:01 1987195699
>>1987106
Какого хуя яндекс практикум такой дорогой?!
Аноним 05/04/21 Пнд 21:38:48 1987196700
Я так понимаю, что вкат через стажировки лучше всего проводить.
Аноним 05/04/21 Пнд 21:39:20 1987197701
>>1987195
Бизнес, на войтишниках делают.
Аноним 05/04/21 Пнд 21:47:51 1987203702
>>1987195
Там дохуя всякого общения с наставниками и живых онлайн уроков. Товарищ сейчас проходит курс на питон-бэкендера.
Аноним 05/04/21 Пнд 21:49:18 1987205703
Для того чтобы запилить сайт на вордпрессе, навесить на него плагинов, и потом быть в состоянии решить любой с ним вопрос по
Аноним 05/04/21 Пнд 21:49:51 1987206704
>>1987205
по кодерской части, для этого дохуя знаний PHP нужно?
Аноним 05/04/21 Пнд 21:55:13 1987209705
>>1987195
Ну некоторые их курсы действительно дают весьма полезные, даже иногда уникальные по меркам СНГ навыки, в сравнении с откровенным наебаловом, которого 95% рекламируемого. Но я рассматриваю курсы лишь как возможность для повышения квалификации или расширения кругозора,чтобы не тратить время на поиск инфы, когда у тебя есть достаточно денег и база. Опять же далеко не все их курсы хороши, всякие пистон-джс-околоайти откровенное наебалово, как и везде, только дороже и пафоснее.
Имхо, если тебе нужны курсы, чтобы вкатится - нахуй тебе не надо вкатываться, раз с гуглом на старте справиться не можешь.
Аноним 05/04/21 Пнд 21:58:56 1987211706
А в треде вообще есть те кто в конторе уже давно работает на пхп? У вас зп от ваших коллег на других языках как отличается?
Аноним 05/04/21 Пнд 22:04:08 1987221707
>>1987181
У нас тут пол треда занимается и тем, и другим, еще и бек на пыхе клепает. И получает как кассир в пятерочке
Аноним 05/04/21 Пнд 22:09:34 1987230708
>>1987196
На других языках - почему бы и нет, если есть возможность. На пыхе - однозначно нет.
Если контора ищет PHP Trainee, то это 99% чтобы вырастить битриксоида/вордпресовщика, или в самом лучшем случае поддерживальщика легаси на CodeIgniter/CakePHP/Zend/Нэйтив пхп в процедурном стиле.
Аноним 05/04/21 Пнд 22:10:47 1987232709
>>1987211
Работаю в галере на пыхе, симфони/люмен, частично go и ts. Зп процентов на 50-70 ниже для чисто пыхарей, как я вижу, в отличии от джавистов(но их итак полтора человека на всю контору) и тайпскриптизеров. Но это отчасти из-за того что большая часть пыхарей сидит на поддержке легаси 10 летней свежести и никуда не рыпается, да и дохуя их просто в конторе.
Аноним 05/04/21 Пнд 22:11:50 1987235710
>>1987230
Питон в вебе ведь особо не популярен, и также с руби, его популярность спадает. Если я не прав, поправь меня анон. Так мне питон нравится очень. Ну похоже это, вспомогательная технология.
Аноним 05/04/21 Пнд 22:12:54 1987237711
>>1987232
В целом, по твоему, пых помирает, или есть смысл?
Аноним 05/04/21 Пнд 22:13:55 1987239712
>>1987232
Новой разработки на пыхе почти нет у вас что-ли?((
Аноним 05/04/21 Пнд 22:15:21 1987241713
>>1987237
на нем написано большинство цмс-ок самых популярных, битриксы, вротпрессы, шопифай и иже с ним. Он всегда будет нужен как средство поддержики этих платформ. Но денег таким образом не заработаешь.
Аноним 05/04/21 Пнд 22:16:46 1987245714
>>1987235
Питон в вебе нормально популярен, особенно в штатах/европе. Инста как популярный пример.
Рубисты - до сих пор топ по зарплате, на днях рейтинг всплывал на хабре.
Как первый язык - питон неоч, но это мое мнение. Я придерживаюсь мнения, что учиться нужно на статической типизации все таки, чтобы снизить шансы стать макакой в перспективе.
Аноним 05/04/21 Пнд 22:17:58 1987248715
>Зп процентов на 50-70 ниже для чисто пыхарей
Но ты со своим "частичным go и ts" к ним не относишься, верно? Если так, то по-моему довольно справедливо, если те пыхари не хотят даже частично освоить другую технологию.
Аноним 05/04/21 Пнд 22:20:11 1987252716
>>1987237
Никуда он не помирает, как клепали средний и лоу ценовой сегмент, так и будут, ибо дешево и бьыстро, плюс он развивается хорошо.
>>1987239
Есть, но чаще это переписывание легаси в ооп код под симфони и иногда новые сервисы, но на ts нового конечно побольше, хотя это наверное больше из-за специфики основного направления.
Аноним 05/04/21 Пнд 22:20:26 1987253717
>>1987245
Хорошо, как мне опыт получить, на руби или питоне? Вкатуну. Удаленно ведь джунов, или трайни не бывает. Насколько я понимаю.
Аноним 05/04/21 Пнд 22:21:41 1987254718
>>1987252
Карьерный рост, если можно так сказать, у пыхеров есть? Т.е топовый разраб может сравниться, например с джавистом, по деньгам, или интересным задачам.
Аноним 05/04/21 Пнд 22:22:46 1987257719
>>1987252
>Никуда он не помирает, как клепали средний и лоу ценовой сегмент, так и будут

This. На чем делать средненький сайт для средненькой конторы, не на Джаве же.
Аноним 05/04/21 Пнд 22:34:06 1987278720
Насчет руби, расскажу хохму. Недавно вижу от лица softserve, одной из топовых аутсорсинговых айти галер Украины, объявление по поиску Senior PHP Developer. Думаю ну нихуя себе, компании такого уровня уже лет 15 php же не используют.
Открываю, а там оказалось что они ищут php-разрабов с опытом 5 лет и больше, чтобы переучить их на руби. Опыт с самим руби не требуется, вот вам и перспективы роста.
Аноним 05/04/21 Пнд 22:35:40 1987282721
>>1987248
На самом деле не отношусь буквально месяц как, подняли зп после того как сдали микросервис на ts, который писали три месяца почти и даже сильно провалили дедлайны, но видимо старания оценили, лул. А так у меня тоже есть свой кусок легаси, на который попал, придя два года назад в контору и с ним приходися ебаться изрядно, как камень на шее.

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

>>1987254
Я бы сказал, что есть движение. Среди активных мидл+ разрабов есть текучка, одни уходят, другие приходят, свапаются между проектами, ктото техлидом становится, ктото в джаву или ts уходит, кто то сеньорит на симфони. Но вцелом все это все равно происходит вокруг пыхи.
То есть вырастают именно энтерпрайзные такие типичные кодеры.
Аноним 05/04/21 Пнд 23:14:40 1987351722
Аноним 06/04/21 Втр 13:34:28 1987793723
Аноны, что лучше использовать для ебли одного .json файла? Конструкцию fopen() fwrite() fclose() или file_get_contents() file_put_contents()?

И использовать параметр LOCK_EX для очереди или лучше забить, учитывая что начать ебать этот .json могут сразу в несколько потоков? Данные не критичные, так что похуй если следующий поток затрёт данные с предыдущего из-за того что они начали обработку одновременно
Аноним 06/04/21 Втр 14:01:33 1987823724
>>1987793

Ты бы сравнил плюсы и минусы каждого подхода.

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

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

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

Кстати, в случае использования БД эти проблемы решает сама БД.

Также, не лучше ли вместо JSON просто писать в каждой строке один id товара? Не быстрее ли это будет кодироваться/декодироваться?

И еще. Если у тебя данные некритичные, может тебе не заморачиваться и просто генератором случайных чисел нагенерировать id товаров?
Аноним 06/04/21 Втр 14:17:11 1987862725
Тут пошел тред каких-то вредных советов. Как не надо писать код.

В чем плюсы написания бекенда на Руби или TS? В TS все асинхронное, а бизнес-логика обычно синхронная. То есть, требуется сначала сделать A, потом B, а в TS придется возиться с промисами и async/await. Вам это нужно?

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

В TS нету библиотек вроде Доктрины. В JS можно поделить на ноль, можно опечататься в имени свойства объекта и исключение выброшено не будет.

Так как JS не умирает после запроса, в нем возникают утечки памяти. Так как отладчиков и профайлеров для их поиска я не знаю, то обычно просто по крону перезапускают процесс JS, вместо того, чтобы найти источник проблемы.

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

То есть, PHP разработчик давно бы исправил проблему, а разработчик микросервисов все еще занят изучением фреймворка на Го, на котором написали соседний микросервис.

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

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

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

Нет ничего лучше и проще монолита на PHP, с шаблонизатором Твиг. Получил запрос, обратился к БД, отрендерил шаблон - все это просто пишется и просто отлаживается. И программистов на PHP больше, проще их найти.
Аноним 06/04/21 Втр 14:26:05 1987874726
>>1987862
Толсто же, попробуй еще раз.
Аноним 06/04/21 Втр 14:32:22 1987888727
>>1987823
Вот блин не знал

Страшно чёто стало какая там очередь может образоваться с LOCK_EX, сейчас сделал просто file_put_contents с FILE_APPEND чтобы вообще посмотреть сколько там запросов сыпит, и уже за 2 часа насыпало 5 тысяч строк, интересно до сколько там время ожидания может дойти, надеюсь по секунд 20 не будет очереди лол, а то хотер сразу заноет

Мне просто нужно не только айди хранить, но и название, урл и прочую хуйню, потом всё это парсить, удалять повторы и выводить уникальные
Аноним 06/04/21 Втр 14:35:12 1987890728
>>1987888

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

>>1987874

Сильная аргументация.
Аноним 06/04/21 Втр 14:37:44 1987894729
Аноны, есть сервер на php 5.2, создаю массив $info = ["Абу" => "Хуй"] а он в ответ тишину, это значит что он просто не поддерживат такой способ создания массивов ввиду своей древности? С $info = array() работает
Аноним 06/04/21 Втр 14:39:35 1987897730
>>1987890
>оставшиеся данные из БД
Вот здесь самый прикол, доступа к БД нет, по этому хочу сохранять всё, а не только id и хранить в json
Аноним 06/04/21 Втр 14:39:38 1987898731
>>1987894
>есть сервер на php 5.2
Выкинь каку и поставь php 8 7.4
Аноним 06/04/21 Втр 14:40:58 1987899732
>>1987898
Я бы и рад, но нельзя, так почему не работает? Из-за старого php?
Аноним 06/04/21 Втр 14:42:21 1987901733
>>1987894

Квадратные скобки появились в PHP 5.4. Также, PHP должен был выдать ошибку и записать ее в лог ошибок. Стоит смотреть лог ошибок, а не пытаться угадать, в чем может быть проблема.
Аноним 06/04/21 Втр 14:45:26 1987902734
>>1987901
Спасибо анон, я бы посмотрел, да кастрат на хостинге не даёт
Аноним 06/04/21 Втр 14:50:04 1987908735
>>1987899
Клуб археологии двумя блоками ниже
Аноним 06/04/21 Втр 14:52:46 1987911736
Что за привычка работать на хуевом окружении?
У одного доступа к бд нет, у другого к логам, еще и древние версии пыха
Аноним 06/04/21 Втр 14:55:28 1987913737
>>1987823
>Ты бы сравнил плюсы и минусы каждого подхода.
Имеется ввиду время выполения каждого из способов? Короче мне надо написать 2 скрипта и тестировать сегодня один, завтра другой, засекать время выполнения и выбирать что быстрее?
Аноним 06/04/21 Втр 14:56:33 1987915738
>>1987911
Анон, какой сервер дали с тем и приходится работать, ради тебя никто не будет обновлять сервер рискуя что всё сломается
Аноним 06/04/21 Втр 15:03:50 1987922739
>>1987915
Да, гораздо лучше работать на сервере, где у разраба нет нужных доступов, старый пых и рядом еще куча говна крутится. Багов не будет, атвичаю.
По ftp код заливаете?
Аноним 06/04/21 Втр 15:11:25 1987928740
>>1987922
Сейчас прибежит вот этот >>1987862
зеленый и расскажет нам, что фтп надежнее и быстрее, а гит - это от лукавого и вообще придумки для геев.
Аноним 06/04/21 Втр 15:21:22 1987941741
>>1987913

Нет, я имел в виду вообще, какие есть преимущества и недостатки. В случае с fopen, по моему просто больше кода придется писать, чем в случае с file_get_contents(). fopen/fwrite нужен, когда ты открываешь файл и потом пишешь по частям.
Аноним 06/04/21 Втр 15:22:33 1987942742
>>1987928
Этот >>1987862 шиз еще и не знает, для чего микросервисы используют, описывая случай неправильного применения микросервисов (микросервисный монолит) и почему-то у него один чел отвечает за несколько микросервисов
Аноним 06/04/21 Втр 15:23:59 1987944743
>>1987942
Да это вкатун тралирует прост, мне кажется.
Аноним 06/04/21 Втр 15:55:14 1987984744
>>1987922
>По ftp код заливаете?
Как ты узнал? Да, а чем сейчас модно заливать?
Аноним 06/04/21 Втр 16:00:45 1987995745
>>1987941
Да на количество кода пофигу, лишь бы не было километровых очередей на чтение/запись, короче надо постестировать оба варианта, хотя я наверно и не узнаю что очередь на пределе, так как сервер после какого-то там таймаута просто дропает выполнение скрипта лол

Кстати, а очереди на чтение и запись - это 2 разные очереди или одна и та же? Пизде столько нового узнаю для себя, раньше только с js приходилось ебаться, там такой хуйни и близко не предвещало
Аноним 06/04/21 Втр 16:02:38 1987999746
>>1987941
Кстати анон ты писал нужно будет дропать запросы от ботов, а их с помщью юзер агента вычислять? По сути получается будем дропать только яндекс и гугл, а боты от васянов и дальше будут наполнять json мёртвыми запросами маскируясь под обычный юзер агент?
Аноним 06/04/21 Втр 16:23:31 1988035747
Привет анончеки. Пишет вам воннаби крутой арбитражник.
Хочу попробовать лить креативы через апи, на бирже мне дали ссылку на такое вот https://github.com/kadam-official/php-sdk
Как мне запускать это вот все и допустим лить тизеры/баннеры?
Что такое композер и почему питон с джавой настолько проще?
Аноним 06/04/21 Втр 16:44:46 1988059748
Ананы, захотел залогировать всех посетителей на сайте чтобы посмотреть их юрезагенты и что вообще за живность такая водится, нашёл вот такие варианты https://forum.antichat.ru/threads/68692/ и http://usefulscript.ru/log_info.php это нормальные варианты сделать такую приблуду для себя? Может есть что-то ещё гениальнее? Или всё это так и делается?
Аноним 06/04/21 Втр 16:45:07 1988061749
>>1987984
>Как ты узнал?
В начале карьеры тоже этим занимался. Попался проект без гита

>Да, а чем сейчас модно заливать?
Гит + ci/cd, опционально докер/кубер
Аноним 06/04/21 Втр 16:47:10 1988063750
Аноним 06/04/21 Втр 16:50:19 1988065751
>>1988063
Точнее browser fingerprint
Эта же техника используется здесь
Аноним 06/04/21 Втр 17:12:14 1988104752
>>1988063
А зачем мне опечаток браузера? Я просто хочу собрать список юзерагентов и посмотреть что посещает сайт, варианты с записью в файл которые я кинул выше и используются для таких целей?
Аноним 06/04/21 Втр 17:16:37 1988110753
image.png 14Кб, 524x216
524x216
>>1988104
Совсем уже гуглить разучились?
Аноним 06/04/21 Втр 17:48:44 1988161754
>>1988110
Аноны мы походу друг-друга не понимаем, я знаю что юзерагент можно выдернуть с помощью $_SERVER['HTTP_USER_AGENT'], я просто хотел узнать как аноны собрали бы список юзерагентов, судя по ссылкам что я дал все это делают просто записью результата кода $_SERVER['HTTP_USER_AGENT'] с новой строки в обычный текстовый файл, как-то слишком просто получается, может кто-то что-то хитрее и лучше подскажет
Аноним 06/04/21 Втр 17:57:02 1988170755
>>1988161
Ты серьезно или прикалываешься?
Тебе нужно собрать юзер агенты, пусть в текстовый файл.
На каждый запрос ловишь юзер агента из суперглобального массива HTTP, добавил в файл строчку с ним.
Всё.
Да, это делается в несколько строк.
Пока мы тут беседуем, ты бы уже мог всё это дело написать и протестить.
Аноним 06/04/21 Втр 18:00:01 1988175756
>>1988161
Я бы помимо юзер агента собирал полный фингерпринт и запихнул в
всё бд, если понадобится какая-то дальнейшая обработка этой статистики.
Потом можно будет графики строить или еще какую аналитику производить
Аноним 06/04/21 Втр 18:33:56 1988214757
>>1987995

"Очереди" в явном виде нет, она получается сама собой. Если ты берешь эксклюзивную (полную) блокировку на файл, ты как бы ограничиваешь доступ к этому файлу. Если другой скрипт попытается взять блокировку, он остановится до того момента, пока блокировка не будет снята. То есть доступ к файлу идет по очереди, а не одновременно.

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

Эксклюзивная блокировка берется для записи в файл. Это защищает от ситуации, когда другой процесс попытается прочитать не до конца записанный файл и получит некорректные данные. А с блокировкой он получит доступ к файлу только после того, как тот полностью записан.

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

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

Блокировки важны при параллельной работе множества скриптов с одним и тем же файлом. Иначе можно при чтении получить мусор или записать в файл мусор.

----

Важный момент: блокировки в PHP не принудительные, а добровольные. То есть, они действуют только на тех, кто их явно использует. Если ты не используешь блокировку и читаешь файл через file_get_contents, то все блокировки игнорируются. Зато эти блокировки работают на любой ОС.

На уровне отдельной ОС, например, Линукс, есть и принудительные блокировки, которые ставятся на уровне ОС и которые действуют на все программы.
Аноним 06/04/21 Втр 18:51:00 1988241758
>>1987995

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

Что значит целостность чтения:

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

Что значит целостность записи:

- что 2 процесса не будут писать в один файл одновременно, перемешивая данные друг друга.

Способ такой:

- при чтении просто читаем файл, например, goods.json
- при записи создаем новый файл со случайным именем, например, goods.json.12846464. Пишем в него данные, когда закончим, переименовываем его в goods.json.

Как это работает?

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

- если кто-то читает файл goods.json, а другой скрипт вызывает операцию переименования, то происходит следующее: старый файл goods.json теряет свое имя, но не удаляется и первый скрипт (который его открыл) продолжает читать старый файл. Он будет удален только когда первый скрипт закончит с ним работать и закроет файл. Таким образом, целостность чтения не нарушается. А скрипты, которые откроют файл после переименования, получат доступ к новому файлу.

То есть, операция переименования атомарна. Она отбирает имя goods.json у старого файла, делая его безымянным и невидимым (но все еще существующим), и присваивает это имя новому файлу.

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

(получается, с помощью переименования файла можно создавать невидимые файлы? можно, но они удалятся, как только их закроет программа, которая их открыла).
Аноним 06/04/21 Втр 18:52:52 1988244759
>>1988214
Спасибо анон за пояснение, с 1 файлом у меня работает один и тот же скрипт, просто его могут запустить сразу 10 раз в один момент разные хосты, в общем я вот так на всякий случай сделал чтобы не было такого что при добавлении строки другой поток дропнул запись и начал свою file_put_contents('order.txt', $order, FILE_APPEND | LOCK_EX)

Кстати для быстрого парсинга этот текстового файла в массив можно сразу file() использовать и потом искать наличие текущего товара в этом массиве с помощью in_array()? А сколько вообще можно строк загрузить в массив? На сколько памяти хватит? Или лучше резать количество строк допустим до 10 000? А то я чёто смотрю и понимаю что у меня там могут и 100 000 товаров за сутки назаписывать в этот текстовый файл, это если дубликаты не удалять, или 100 000 строк в массиве для php это раз плюнуть?
Аноним 06/04/21 Втр 18:55:14 1988248760
>>1988241
Вот уж воистину костыли, ещё раз спасибо, учту это
Аноним 06/04/21 Втр 19:02:53 1988253761
>>1988244

А ты померяй, сколько это времени займет. Но читать и писать по 100 000 строк на каждый запрос не очень хорошая идея, так как это создает большой трафик на диске (нужно постоянно перемещать данные с диска в память и обратно на диск, а его скорость работы ограничена).

> А сколько вообще можно строк загрузить в массив? На сколько памяти хватит?

Да, на сколько хватит. Используй функцию memory_get_usage(), чтобы узнать, сколько памяти съел текущий скрипт, и померяй.
Аноним 06/04/21 Втр 19:09:57 1988261762
Аноны, все данные что мы получаем через $_POST обязательно пропускаем через strip_tags? А этого достаточно? Или ещё что-то нужно использовать?
Аноним 06/04/21 Втр 19:35:56 1988308763
image.png 2Кб, 155x69
155x69
>>1988253
>Используй функцию memory_get_usage()
1 строка памяти до создания массива, 2 строка памяти после создания массива из 20 000 строк, 3 строка время выполения скрипта, как думаешь нормальные показатели? И насколько плохо обстоят дела с памятью? Я так понимаю по умолчанию занято 200 мегабайт, после создания такого массива все 400 мегабайт? Или это килобайт?
Аноним 06/04/21 Втр 19:43:18 1988318764
Походу всё таки килобайт, ну неплохо вроде, всего 400кб
Аноним 06/04/21 Втр 19:53:23 1988328765
Снимок экрана в[...].png 82Кб, 686x512
686x512
Почему так
Аноним 06/04/21 Втр 19:59:41 1988335766
>>1988328
Что так?
Зачем шорт теги используешь?
Аноним 06/04/21 Втр 20:10:27 1988346767
>>1988328
скорее всего в настройках интерпритатора отключены короткие теги.

призываю опытных анонов в тред. полтора года греб в мелкой галере фулстаком на всяких битриксах, вордпрессах и тп шлаке. и так вышло что каждый из тимы (нас было всего 4 разраба) зачастую работал только с одним проектом и был сам себе и бэком, и фронтом, и тестером, и девопсом. сейчас свалил в другое место уже на ларавель. и тут всплыли проблемы уже. то девопс почему то снихуя выебывается и посылает меня нахуй отказываясь выполнять команду в контейнере по специфике таски ее надо было запустить один раз, то теперь выясняется что гендир дс2 офиса какой то ебанутый наглухо неадекват который требует фиксов нашей внутренней CRM над которой я собсно щас и работаю при этом давая 0 нахуй инфы, и при попытках спросить и уточнить он полыхает и чуть ли нахуй тебя прямым текстом послать может коллеги вообще на полном серьезе рассказали что у него там сидит тима фронтов которых он натурально любит попиздить иногда палкой, из за чего и остальные разрабы/девопсы/менеджеры перед ним ходят на задних лапках. и вот интересует вопрос: это вообще норм ситуация в конторах или я попал в какое то исключительное место и надо все таки бежать оттуда ?
Аноним 06/04/21 Втр 20:14:02 1988348768
Пиздец аноны, на сервере php 5.2, когда кодирую кириллицу в json у меня выдаёт кракозябры, а параметр JSON_UNESCAPED_UNICODE не работает потому что php древний, как ещё можно обойти эту хуйню?
Аноним 06/04/21 Втр 20:20:19 1988350769
>>1988348
а варик обновить версию пыхи не канает?
Аноним 06/04/21 Втр 20:29:14 1988356770
>>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().

А вот лепить функции наугад не надо. нет волшебного способа сделать данные безопасными.

Аноним 06/04/21 Втр 20:34:08 1988357771
>>1988308

Память меряется в байтах. И там не 400 000, а 4 миллиона.

5 мс ради того, чтобы просто записать id товара - многовато. Хотя, если у тебя сайт тормозной, это мало заметно.

>>1988328

Надо использовать <?php, а не <?

Также, неправильно, что ты запускаешь редактор кода от рута.

>>1988348

Это не кракозябры, а допустимый для JSON синтаксис (вроде \u0234). Если ты декодируешь корректно этот JSON, то кириллица никуда не исчезнет.
Аноним 06/04/21 Втр 20:46:22 1988364772
>>1988346
ну же анон, подскажи
Аноним 06/04/21 Втр 21:04:52 1988382773
>>1988350
Не имею доступа, закрыто хостингом

>>1988357
>Это не кракозябры, а допустимый для JSON синтаксис
Просто хотел по красоте чтобы всё было если смотреть JSON файл глазами, а там это
>\u0234
Аноним 06/04/21 Втр 21:26:23 1988409774
>>1988357
>там не 400 000, а 4 миллиона
Всё уже в глаза ебусь, там не id пишется, а строка массив где хранится название, айди, урл и т.д. и таких строк было 20 000, да получается 4 мегабайта всё это дело занимает, а если одновременно запустит 10 человек то уже все 40 наверно будет

Кстати анон, я данные в этот файл передаю с помощью post и думаю хранить в json же, а мне надо эти данные в виде айди, названия, урл и т.д. как-то фильтровать прежде чем записывать в новую переменную в массиве или в новую строку в файле? Ведь я потом всё это буду на другой странице парсить и выводить на странице с помощью js, не сможет ли какой-нибудь хуй передать туда например html и при отрисовке страницы с результатами хранящимися в json или файле вывести свой произвольный код который выполнит его js скрипт или прочую хуйню?
Аноним 06/04/21 Втр 22:49:28 1988460775
>>1987862
>Тут пошли какие-то вредные советы. Как усложнить разработку в убыток бизнесу.
>И программистов на PHP больше, проще их найти.
Лол, так в этом и вся суть. Малому и среднему бизнесу пыха выгодна, но только из-за того, что к разрабам на ней можно относится как к рабам и платить миску риса в день. Для большого бизнеса это не приоритет.
И даже не пытайся это отрицать, ведь ни одна большая контора php не использует. Совсем ни одна. Фейсбук и вк используют свои модификации, у которых путь кардинально отличается от пути современного php.

>Наверно старшим программистам стало скучно и они от скуки решили поменять язык разработки. При этом нанося ущерб бизнесу.
С php уходят исключительно из-за престижности и оплачиваемости труда на других языках. Думаешь, очень сильно хочется людям после 8 часов работы придти домой и учить новый язык, просто потому что прикольно? Да нет, жизнь заставляет.
Ну а потом можно уже и подискутировать, насколько микросервисы лучше за монолит, насколько язык_нейм лучше за пых и прочее. Каждая свинья свое болото хвалит, сам знаешь.
Алсо, очень забавно как ты сильно за барина переживаешь. Два раза про убыток для бизнеса написал.

>Еще небось и фронтенд на реакте или вью делают вместо серверного рендеринга. В итоге разработка занимает еще больше времени, приложение получается тяжелое и тормозное, долго грузится, долго делает кучу аякс-запросов.
>Нет ничего лучше и проще монолита на PHP, с шаблонизатором Твиг. Получил запрос, обратился к БД, отрендерил шаблон - все это просто пишется и просто отлаживается.
Не, ну это уже святая толстота. Написать конечно может и проще, вот только поддерживать красивый структурированный код на Vue и какой-то пиздец на jQuery или нативном js - это уже принципиально разные вещи.
Про удобство разделения команд фронтовиков и бэкэндеров при этих подходах я совсем молчу.
Аноним 06/04/21 Втр 22:50:59 1988461776
>>1987944
Ты чего, ОПа не узнал?
Аноним 07/04/21 Срд 01:43:52 1988566777
image.png 676Кб, 2372x1600
2372x1600
image.png 668Кб, 2372x1600
2372x1600
Аноны, помогите пожалуйста! Почему не записываются данные в тхтшник?
Аноним 07/04/21 Срд 11:07:18 1988751778
>>1988357
>Также, неправильно, что ты запускаешь редактор кода от рута.

Ну по другому он не сохраняет
Аноним 07/04/21 Срд 11:30:55 1988766779
>>1988566
пчел я сам учусь но у тебя пиздец дичь а не код, ты же не принимаешь данные посланные формой, у тебя персон и меседж даже не созданы, они пустые
Аноним 07/04/21 Срд 11:33:00 1988768780
>>1988566
и что за phtml, у тебя даже названия файлов кривые как и весь код
Аноним 07/04/21 Срд 12:07:35 1988780781
>>1988364
>>1988346
Очевидно, что попал в говноконтору. Ищи другой офер и сваливай. Нервы поберечь стоит.
Аноним 07/04/21 Срд 12:10:22 1988782782
>>1988566
Для начала научись бек от фронта отделять
Аноним 07/04/21 Срд 12:13:09 1988784783
>>1988768
Чот в голосину, ты хотябы загугли сначала чтоли...
Аноним 07/04/21 Срд 12:14:23 1988786784
>>1988784
Какая-то древняя хуита, на проде не встречал ни разу
Аноним 07/04/21 Срд 12:25:55 1988798785
>>1988784
я не спорю что возможно ещё до прихода иисуса php файлы так обзывали, но не в 2021 же году
Аноним 07/04/21 Срд 12:40:50 1988812786
пчелы а где перекат, треда даже на главной же нет, как вы собираетесь поднимать этот язык с колен
Аноним 07/04/21 Срд 13:10:12 1988838787
>>1988786
>>1988798
Чо блять? Вы хотябы свою неграмотность не выставляйте как чтото хорошее. Это обычный семантический формат для html с микровставками php, который работает везде по-дефолту. Использовать или нет - ну дело каждого. Но к чему тут кукареканье про древность я вообще хз.
Аноним 07/04/21 Срд 14:17:32 1988898788
image.png 11Кб, 731x114
731x114
>>1988838
Ок, покажи современный проект на пхп, где этот формат используется.
Я прошел через пару десятков проектов, нигде этого не встретил.
Либо используется .php, либо шаблоны twig, blade

>Но к чему тут кукареканье про древность я вообще хз.
Пикрил
Аноним 07/04/21 Срд 14:19:17 1988900789
>>1988812
>как вы собираетесь поднимать этот язык с колен
А зачем? Жс расхайпили - подняли требования для вката.
В пхп пока ситуация получше
Аноним 07/04/21 Срд 14:45:17 1988915790
Аноны, подскажите насчёт многомерных массивов, в JS если добавлять в массив другой массив со своим цифровым ключём то эти массивы в массиве сортируются по порядку ключа, то есть если я добавлю массив с ключём 5, потом другой с ключём 3, то массив с ключём 3 переместится вверх, хоть я его и добавил позже, в PHP так же или порядок добавления сохранятся? Хочу сделать поиск по массиву с массивами по цифровому ключу массива чтобы быстрее делать поиск, но мне нужно чтобы новые добавляемые элементы добавлялись в конец массива и не сортировались автоматически по номеру ключа, надеюсь вы поняли о чём я, в PHP есть такой косяк?
Аноним 07/04/21 Срд 14:58:32 1988920791
>>1988915
Почему сам не попробуешь запустить пару примеров?
Аноним 07/04/21 Срд 15:50:40 1989007792
>>1988920
С вами походу придётся просто это долго, это не JS который прямо в браузере можно проверить
Аноним 07/04/21 Срд 15:52:13 1989010793
>>1989007
>это не JS который прямо в браузере можно проверить
Онлайн интерпретаторы для кого?
Консольный режим пхп для кого?
Аноним 07/04/21 Срд 16:28:48 1989045794
Аноним 07/04/21 Срд 16:34:04 1989050795
>>1989045
В интерактивном режиме неудобно код набирать.
Как и в онлайн интерпретаторе
Аноним 07/04/21 Срд 16:57:36 1989064796
В мою поехавшую голову пришла такая идея, ведь многие сайты наверняка филтьруют ботов, тем самым не отслеживая такие хосты или не учитывают их в статистике и т.п., они же это делают с помощью анализа юер агента, так? А что если замаскировать свой браузер под бота выдавая их юзер агент, считайте минус процент тотального анального контроля и ебли с рекламой, нет?
Аноним 07/04/21 Срд 17:01:57 1989068797
знающие Fedex api тут есть?
Аноним 07/04/21 Срд 18:40:27 1989147798
Блять говно короче, если в массиве массивы с рандомными цифровыми ключами, то чтобы добавить новый массив в начало нужно использовать array_unshift(), а это говно стирает все рандомные ключи и сортирует массив с 0 до количества массивов, можно это как-то обойти?

То есть у меня массив примерно такого вида
[
5 => ["id" => 26, "title" => "Название 1"],
10 => ["id" => 64, "title" => "Название 2"],
1 => ["id" => 43, "title" => "Название 3"],
]

И мне надо добавить новый массив
14 => ["id" => 82, "title" => "Название 4"]
В начало, как это сделать чтобы ключи не стирались и не сортировались с нуля?
Аноним 07/04/21 Срд 18:50:00 1989154799
>>1989147
Походу нашёл, нужно просто не array_unshift делать, а тупо плюсовать 2 массива
Аноним 07/04/21 Срд 19:40:01 1989192800
>>1958281 (OP)
В вакансии написано
>Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)
Я глянул краткий курс по Laravel, думаю сейчас написать задачу про студентов. Как думаете - этого хватит, если вакансия на Джуна или под опытом подразумевается что-то большее?
Вообще не понятно если честно как использовать документацию Laravel. Вот откуда мне узнать есть ли нужная функция в Laravel...
Аноним 07/04/21 Срд 19:55:37 1989202801
>>1988898
Рендеринг страничек на пыхе - это вообще охуеть как современно.
А раз тебе не нравится, что ФОРМАТ ФАЙЛА добавлен не вчера, так не используй его, я так и написал, можешь вообще не юзать ничего, что придумано не в этой версии языка, древнее говно же. В спецификации он есть, не deprecated.
Выше вы до чела доебались за то что у него 'кривой' формат файла, хотя он использовал его как раз по назначению, а то что тебе некоторые вещи незнакомы - ну бывает, лул.
Аноним 07/04/21 Срд 19:58:28 1989205802
>>1989192
>Я глянул краткий курс по Laravel, думаю сейчас написать задачу про студентов. Как думаете - этого хватит, если вакансия на Джуна или под опытом подразумевается что-то большее?
Для начала пойдет, но на собесе могут завалить вопросами по кишочкам лары (di контейнер, елоквент, фасады). Так что советую и их пощупать + подключить парочку популярных либ в свой проект.

>Вообще не понятно если честно как использовать документацию Laravel. Вот откуда мне узнать есть ли нужная функция в Laravel...
Гуглить laravel feature_name
Аноним 07/04/21 Срд 20:02:39 1989214803
>>1989202
>Рендеринг страничек на пыхе - это вообще охуеть как современно.
Не везде нужны реакты с твигами

>А раз тебе не нравится, что ФОРМАТ ФАЙЛА добавлен не вчера, так не используй его, я так и написал, можешь вообще не юзать ничего, что придумано не в этой версии языка, древнее говно же. В спецификации он есть, не deprecated.
То, что он придуман давно роли не играет. А то, что выпал из употребления минимум намекает на то, что новые разрабы на проекте будут смотреть на это с мыслью WTF

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

Повторяю реквест: доставь актуальную пхп либу или проект, где такой формат используется
Аноним 07/04/21 Срд 20:04:15 1989218804
>>1989205
Блиин, осталось всего 2 дня, не успееееваю...
Вот в таком случае что можешь посоветовать?
Аноним 07/04/21 Срд 20:07:29 1989223805
>>1989218
На что не успеваешь?
Аноним 07/04/21 Срд 20:11:25 1989229806
Аноним 07/04/21 Срд 20:17:30 1989234807
>>1989192
У меня смежный вопрос: если в вакансии джуна есть вот такое требование:
>Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)
Понятное дело что везде по разному, но, скорее всего, как будут обстоять дела в конторе?
Придется по ходу работы учить все фреймы и понемногу пилить на них разные проекты, или же меня будут садить на проекты на выбранном фрейме?
А то не очень хочется лишний раз тратить свое время на Ларавел или, упаси Б-же, Yii.
Аноним 07/04/21 Срд 20:22:59 1989242808
>>1989214
С мыслью WTF будут смотреть только вчерашние вкатуны, но они много на что так смотрят. А свой манямирок про ненужность стандартных опций языка можешь в psr направлять, там твое мнение очень важно.
Вообщем когда формат объявят deprecated - тогда и приходи со своими претензиями.
Про либу с версткой - ну вообще пушка, я с cmsками не работаю, сам ковыряйся в этом.
Аноним 07/04/21 Срд 20:23:27 1989243809
>>1989223
Ну вакансия через 2 дня должна закрыться.
А я много чего не знаю. Я просто хочу попытаться пойти на собес, но ссыкотно, вдруг я ничего не отвечу
Аноним 07/04/21 Срд 21:57:55 1989344810
>>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 - она у тебя тоже есть.

Аноним 07/04/21 Срд 22:02:01 1989349811
>>1988751

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

>>1988768

Это нормальное расширение для HTML-шаблонов с включением PHP.

>>1988566

Кстати, у тебя еще одна проблема. Ты не делаешь redirect-after-POST и если после добавления сообщения обновить страницу, то запрос отправится снова и добавится еще одно сообщение. Надо делать редирект после обработки запроса. Можешь почитать это: https://github.com/codedokode/pasta/blob/master/forms.md



Аноним 07/04/21 Срд 22:10:31 1989359812
>>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'];

И этот порядок следования элементов запоминается.
Аноним 07/04/21 Срд 22:15:02 1989364813
>>1989064

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

>>1989214

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

Ты путаешь большие реальные проекты (где используют twig/blade) и учебный проект на 10 строчек (где оправданно использовать нативный шаблонизатор).

Так, по твоей логике, ему надо эту форму на Симфони что ли переписать, с dependency injection и доктриной?

Я кстати, встречал большой проект с использованием нативного шаблонизатора. Во времена Zend Framework так делали.


Аноним 07/04/21 Срд 22:15:03 1989365814
Каким образом добавляют на сайт первого юзера-админа? В ларавеле есть seeders, а в симфони, например?
Голыми SQL-запросами, с захешированным вручную через консоль паролем и его же ручным экранированием?
Топорно как-то. На ум приходят фикстуры, но они же для тестирования предназначены.
Аноним 07/04/21 Срд 22:20:26 1989370815
>>1989365

Можно сделать миграцию и в ней добавить через SQL-запрос. Можно сделать CLI-команду и запустить ее руками.
Аноним 07/04/21 Срд 23:40:29 1989464816
Сап, стоит ли сразу всё в докере разрабатывать? Дают ли это какое-то преимущество? И вообще стоит ли с этим заморачиваться?

МимоВкатунНачинающий
Аноним 07/04/21 Срд 23:47:15 1989472817
>>1989464
Если планируешь на норм работу устроиться - однозначно да. Докер для бэкендера сейчас - дефолтный навык, такой же, как гит например.
Аноним 07/04/21 Срд 23:49:17 1989475818
>>1989344
>>1989349
Вау, мне так ещё никогда развёрнуто не отвечали, спасибо тебе огромное.
Аноним 07/04/21 Срд 23:50:18 1989477819
>>1989472
Спасибо буду освайвать. Из linux, нужно уметь настрайвать файрвол, политики безопасности? Вообще на каком уровне linux нужно знать?
Аноним 08/04/21 Чтв 07:22:33 1989644820
На днях начал штудировать php вместе взятыми его symfony фреймворками. Но задаюсь вопросом. Почему много аннотаций нужно писать? Я честно начинаю заёбываться этим фактом. Такое ощущение я не код пишу. А только аннотации/комментарии. Я конечно понимаю, что эти аннотации преобразовывается как-то потом в при компиляции. Но зачем так много аннотации нужно писать ебать? Вообще ахуеваю от этого. Почти вся логика контролеров пишется в аннотациях. Что за хуйня вообще? Мимо вкатыш из питона/js.
Аноним 08/04/21 Чтв 10:22:47 1989686821
Аноны, в js можно сократить условие до 1 строки с помощью ? :, а как это сделать в php?
Попробовал if (5 > 10) echo "Да" : echo "Нет" выдаёт ошибку

И как присваивать результат if в переменную? Без прописывания её в фигурных в скобках?
Типа $res = if (5 > 10) {"Да"} else {"Нет"}; echo $res крашится
Аноним 08/04/21 Чтв 10:37:53 1989696822
>>1989686
В тернарном операторе просто нужно убрать if и он заработает
Аноним 08/04/21 Чтв 10:39:33 1989697823
>>1989686
Тернарный оператор работает примерно так же, как и в js.
'Yes' ?: 'No';
'Yes' ? 'if true' : 'if false';
Аноним 08/04/21 Чтв 10:45:52 1989701824
>>1989477
Ну не прям задрачивать, но вцелом ориентироваться будет не лишним, уметь wpsку настроить, nginx поднять, права и порты раскидать. Вообще для этого девопс есть, но пугаться при виде терминала тоже не солидно.
>>1989644
Ну это путь симфони, какой уж есть, более того весь php в 8+ версии к этому идет, там аннотации по типу симфони на уровне языка прикрутили уже. Вообще в симфони часто можно их избегать, например мапить доктрину мне удобнее через xml, особенно сложные структуры.
Аноним 08/04/21 Чтв 10:48:49 1989703825
Аноним 08/04/21 Чтв 10:54:05 1989705826
Сап, это прям обязательно джуну вкатывать именно в офис?
Аноним 08/04/21 Чтв 11:03:36 1989711827
>>1989644
А почему симфони, а не ларавел? Объясни, свой выбор пожалуйста.
Аноним 08/04/21 Чтв 11:15:01 1989725828
Аноны, а как в основном пчелы воводят результаты работы своих API, как в деревянные HTML типа

$id = "1";
$title = "Тест";
echo "{";
echo '"id":"' . $id . '","title":"' . $title . '";'
echo "}";

Или парсят данные в массив, кодируют его в JSON и выводят типа

$array = ["id" => 1, "title" => "Тест"];
$array = json_encode($array);
echo $array;

Или есть ещё какие-то способы о которых я даже не догадался, кроме фреймворков, хочу понять основу
Аноним 08/04/21 Чтв 11:27:01 1989734829
>>1989725
Причем тут API и способы вывода?
Аноним 08/04/21 Чтв 12:03:52 1989800830
>>1989734
Наверно непонятно объяснил, как они формируют ответ, выводят его построчно или кодируют массив и выводят это через echo

Вот например паблик API https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY как они сгенерировали весь этот текст, выдернули из базы, собрали в массив, обработали, кодировали в json формат и тупо echo? Как вообще в основном это делают, ведь способов нарисовать этот текст много, но мне кажется 2 вариант что я описал нормальный и им можно пользоваться
Аноним 08/04/21 Чтв 12:05:57 1989801831
>>1989734
Не хранят же они всё это в файлах, ни же это генерируют когда ты запрашиваешь ответ с этого API, вот мне интересно как они его собираюь в кучу и отрисовывают на странице которую ты запрашиваешь
Аноним 08/04/21 Чтв 12:19:04 1989811832
>>1989711
Не знаю просто взял симфони. По ларавелу мне показалось слишком много мусора. Мусор как мусор, куча прям. Надеюсь ты понимаешь что я имею ввиду.
Аноним 08/04/21 Чтв 12:25:09 1989815833
>>1989800
Ну точно не построчно. Они все возвращают данные в json формате.
Аноним 08/04/21 Чтв 12:28:59 1989819834
Сап, аноны. Какие обычно задачи выполняет junior на работе? А middle? И еще: мидл проводит код ревью джуну, а сеньер мидлу?
Аноним 08/04/21 Чтв 12:33:36 1989825835
>>1989819
> Какие обычно задачи выполняет junior на работе?
Запилить небольшую фичу, исправить какой-нибудь баг. Миддл уже делает более глобальные задачи с серьезным функционалом.

> И еще: мидл проводит код ревью джуну, а сеньер мидлу?
Везде по разному.
Аноним 08/04/21 Чтв 12:40:16 1989834836
>>1989819
Вообще это сильно зависит от конторы.
Вцелом джун обычно пишет круды, делает мелкие фиксы, либо пилит какие то новые модули под контролем куратора, если контора может себе такое позволить.
Мидлы и сеньоры уже самостоятельно решают задачи в командах или поодиночке и вцелом могут делать вообще все что угодно. Грань между middle и senior не жесткая, то есть например "сеньор" Вася из рандом студии по клепанию сайтецов будет middle- в крупной энтерпрайзной конторе.
Но вцелом сеньоры чаше разрабатывают какуюто сложную логику, планируют общую архитектуру итд. В крупных конторах есть отдельные сеньорские должности для техлида, архитектора, тимлида и всякое такое.

Ревью устроено везде по-разному. Я чаще встречал перекрестное. Когда реквест не заливается, пока не будет заапрувлен хотябы двумя разработчиками. Бывает, что этим занимается техлид или тимлид. Ну а за джуном обычно все равно крепят куратора и он уже смотрит за ним.
Еще есть такая фича как отдельный Q&A для кодовой базы. Но это больше за бугром распространено, у бохатых.
Аноним 08/04/21 Чтв 12:56:11 1989853837
Посоны, хочу вернуться к своим баранам с товарами за сутки, таки как лучше их хранить?

Тупо в текстовом файле в формате
65|Телефон|100$
567|Телевизор|200$
58|Компьютер|500$
И каждый раз разбивать его на массив по \n, а далее на подмассивы по | и отрисовывать

Или в json формате в json файле
{{"id":65,"order":"Телефон","buy":"100$"},{"id":567,"order":"Телевизор","buy":"200$"},{"id":58,"order":"Компьютер","buy":"500$"}}
И каждый раз расспаршивать его в массив и отрисовывать

Или вообще в базе данных? Или тут по сути без разницы и выбирать то что нравится или то что занимает меньше времени на отрисовку, меньше оперативной памяти и меньше места на диске?
Аноним 08/04/21 Чтв 13:19:57 1989886838
>>1989853
Вообще в базе данных конечно. Можно кэш накатить, если данные большие.
Аноним 08/04/21 Чтв 13:50:45 1989962839
>>1958281 (OP)
Аноны, нужно ли мне писать, что у меня базовые знания всего, чего они требуют? Если да, то как?
Аноним 08/04/21 Чтв 13:59:11 1989981840
>>1989962
Или не делать акцент на то, что у меня базовые знания?
Аноним 08/04/21 Чтв 14:00:59 1989986841
>>1989242
Пруфов не будет, значит
Аноним 08/04/21 Чтв 14:04:57 1989993842
>>1989364
>Ты путаешь большие реальные проекты (где используют twig/blade) и учебный проект на 10 строчек (где оправданно использовать нативный шаблонизатор).
Вот, на большом проекте будет шаблонизатор. На учебном .php
Зачем брать неиспользуемое расширение?

>Так, по твоей логике, ему надо эту форму на Симфони что ли переписать, с dependency injection и доктриной?
Где я такое писал?

>Я кстати, встречал большой проект с использованием нативного шаблонизатора. Во времена Zend Framework так делали.
+ к тому, что это устаревший формат. Неоффициально, но из бестпрактис он выпал
Аноним 08/04/21 Чтв 14:05:25 1989996843
>>1989986
А официальные спецификации языка тебе не пруф? Наркоман штоли?
Аноним 08/04/21 Чтв 14:08:52 1990000844
>>1989644
Вдохновлено джавой, как и все остальное в Симфони. Причем названия аннотаций и параметры зачастую те же. Джависты вон уже давно шутят про Annotation Oriented Programming.
А вообще, так просто удобнее. Когда есть выбор между php кодом и конфигом, аннотации часто вбирают в себя все плюсы этих двух вариантов.

>>1989701
> например мапить доктрину мне удобнее через xml, особенно сложные структуры.
Больной ублюдок. XML же вообще не ориентирован на удобство записи и чтения человеком, это ж язык разметки для машин по большей части?
Аноним 08/04/21 Чтв 14:09:14 1990001845
>>1989705
Желательно.
Можно будет заебывать старших вопросами.
На удаленке с этим труднее
Аноним 08/04/21 Чтв 14:14:53 1990010846
>>1989725
>$id = "1";
>$title = "Тест";
>echo "{";
>echo '"id":"' . $id . '","title":"' . $title . '";'
>echo "}";
Сам то как думаешь, удобно так рендерить?
Аноним 08/04/21 Чтв 14:16:14 1990012847
>>1989996
Одно дело - наличие фичи в спеке, другое - частота употребления фичи на проде
Аноним 08/04/21 Чтв 14:16:42 1990016848
>>1990000
Ну это само както пришло, сперва был проект на симфони, который дописывал на аутсорсе - там было много сложных связей, большие таблицы и ебейшая вложенность сущностей, в аннотациях все по самые гланды, разбираться было невозможно, потому что банально десяток файлов листать и искать поля в объекте - та еще ебля. Вот и пришлось все в xml переписывать. Потом на мэйн работке, когда стали симфони использовать тоже приняли xml как дефолт.
Аноним 08/04/21 Чтв 14:19:10 1990020849
>>1990010
Значит все используют массивы которые перед выводом кодируют с помощью json_encode? Просто не хочу потом всё переписывать
Аноним 08/04/21 Чтв 14:19:58 1990022850
>>1990012
Ну так не юзай, раз в твоем проде это не используют, тебе так и сказали с самого начала. Зачем ты доебываешься до людей в треде со своими фантазиями?
Аноним 08/04/21 Чтв 14:24:19 1990029851
>>1990020
Ты неправильно понял.
Получать данные можно в разном виде: набор переменных, массивы, объекты, коллекции и т.д.
Отдавать тоже можно по разному: json, xml, html, просто текст, csv, бинарные данные и т.д.
Аноним 08/04/21 Чтв 14:24:59 1990030852
>>1990022
>Используют какой-то малоизвестный формат
>Называют фантазером
Аноним 08/04/21 Чтв 14:25:18 1990031853
>>1990016
А ямлы всякие разве не удобнее будут?
Аноним 08/04/21 Чтв 14:26:11 1990032854
>>1990030
>нечего сказать, пукни гринтекстом
Аноним 08/04/21 Чтв 14:31:03 1990038855
>>1990032
>Пруфов об употребимости формата так и не завезли
Аноним 08/04/21 Чтв 14:36:08 1990046856
>>1990038
Съеби пожалуйста обратно в свой /b, зеленый.
Аноним 08/04/21 Чтв 14:38:53 1990050857
>>1990029
Не, меня интересует именно json, получается все json API достают данные из базы данных, помещают их в массив и в конечном итоге кодируют в json и выводят его через echo, буду тогда по такому принципу делать
Аноним 08/04/21 Чтв 14:40:10 1990053858
>>1990030

В туториале ZF1, например, PHP-шаблоны используются с расширением phtml. Логично, что для шаблонов используется другое расширение. Так что это не малоизвестный формат, просто ты с таким не сталкивался и не знаешь.
Аноним 08/04/21 Чтв 14:42:32 1990055859
>>1989725

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

Для вывода логично использовать json_encode. Не забудь только отдавать правильный HTTP-заголовок content-type.
Аноним 08/04/21 Чтв 14:42:50 1990056860
>>1990053
Не корми его пожалуйста, еще поселится тут. Его уже дважды тыкали носом в доки.
Аноним 08/04/21 Чтв 14:48:51 1990064861
>>1990050
>все json API достают данные из базы данных
Помимо бд есть другие хранилища

>помещают их в массив
Об этом уже писал. Не только массивы
Аноним 08/04/21 Чтв 14:50:04 1990066862
Аноним 08/04/21 Чтв 14:53:20 1990077863
Не опасно ли начинать учить php сейчас и как первый ЯП?
Постоянно натыкаюсь, что пишут, что через 5 лет он уже будет вообще неактуален. И ещё если его брать как первый ЯП, то всё по пизде пойдёт, потом никуда не свитчнешься.

анон, 25лвл
Аноним 08/04/21 Чтв 14:56:00 1990084864
>>1990077
Его уже хоронят 10 лет
Аноним 08/04/21 Чтв 15:03:50 1990095865
>>1990077
>что через 5 лет он уже будет вообще неактуален
Скорее через 5 лет реакт будет неактуален.
На пхп на наш век работы хватит
Аноним 08/04/21 Чтв 16:16:14 1990161866
>>1990077
Неактуален - это слишком расплывчатое понятие. Работа на пыхе еще долго будет, если ты об этом.
Как первый язык, зависит от того, какую цель ты преследуешь в изучении языка. Если цель именно стать программистом и тебе интересно само программирование - то это один из худших вариантов например, слишком велик риск нахвататься фатальных привычек. Если быстро вкатиться и начать что то зарабатывать этим - отличный вариант, лучше только js наверное и то спорно.
Аноним 08/04/21 Чтв 17:13:33 1990216867
Аноны я чёто ВСТАЛ

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

Но сука меня ждал подвох, а как быть с просмотрами, как посчитать столько их было за 24 часа, ведь товары которые могут посмотреть сегодня 1000 раз могут ещё неделю висеть в топе просмотров, хоть их уже и не смотрят вовсе, но они там потому что когда-то у них набило большое количество просмотров, можно обнулять количество просмотров в 12 ночи, но это же не вариант, в 1 ночи там уже будет количество просмотров за 1 час, а не за 24 часа

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

Коротко: Как сохранять количество просмотров за 24 часа? Чтобы просмотры которые добавлись 25 часов назад удалялись из общего числа просмотров в текущем товаре
Аноним 08/04/21 Чтв 17:19:14 1990222868
>>1990216
> Хочу сделать товары популярные за 24 часа
Очевидно что товары из блока "популярные" будут иметь больше просмотров чем другие. Я бы не выебывался и просто раз в неделю вручную чекал топ просмотров и вручную же обновлял товары в популярном (алсо, туда же можно пихнуть не популярные товары, а те которые ты хочешь продвинуть). Если у тебя там конечно не овер сто позиций в популярном.
Аноним 08/04/21 Чтв 17:43:53 1990246869
>>1990222
Я хотел не блок, а отдельную страницу и там постранично выводить то что больше всего посмотрели за 24 часа, и чтобы самые популярные были имеено вверху, и вот мне интересно а как остальные считают количество просмотров за 24 часа, я пока придумал только записывать количество просмотрво за каждый час и складывать их чтобы узнать общее количество при сортировке товаров, а через 24 часа тупо удалять 1 значение и писать новое, то есть удалять значение которому уже 25 часов, надеюсь понятно изъесняю лол, просто я думаю наверняка есть способ проще ведь наверняка многие с этим уже сталкивались и придумали то до чего я не догадался, а составлять топ самому лень, хочу чтобы юзеры сами его составляли своими просмотрами
Аноним 08/04/21 Чтв 17:48:59 1990252870
Аноны, распишите, плиз, ваши впечталения от обновления с 7.4 до 8. Что стало лучше? Что хуже? Что нужно было сделать, но не было сделано? Поделитесь своими мнениями.
Аноним 08/04/21 Чтв 17:50:23 1990253871
>>1990246
Подозреваю что у остальных "популярное" это далеко не то что смотрят пользователи, а скорее то что хочет продать маркетолух.

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

> можно обнулять количество просмотров в 12 ночи, но это же не вариант, в 1 ночи там уже будет количество просмотров за 1 час, а не за 24 часа
Не вижу проблемы, ты в 0:00 смотришь количество просмотров за прошедшие сутки (а не за час) и составляешь топ, просмотры же обнуляешь. Через сутки делаешь тоже самое.
Аноним 08/04/21 Чтв 17:59:11 1990273872
>>1990216

Если тебе нужно именно строго за последние 24 часа, то нужно в лог или таблицу БД писать и id товара, и точное время просмотра. То есть, на каждый просмотр создается новая запись, и удаляются записи старше 24 часов.

Так в таблице или файле быстро наберется куча записей. В принципе, БД не умрет от этого, а вот вручную возиться с файлом на 10 000 записей будет довольно неэффективно.

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

товар1,10,2021-01-01 12:00:00

Так мы получим чуть меньшую точность (будет браться число просмотров примерно за последние 23-24 часа, а не точно за 24), но зато надо будет меньше записей.
Аноним 08/04/21 Чтв 18:03:54 1990285873
>>1990216
А зачем тебе явно хранить кол-во просмотров?
Логай куда-нибудь просмотры товаров с датой и временем просмотра.
Потом по логам сможешь посчитать кол-во просмотров за нужный промежуток времени. И пересчитывать топ раз в N времени
Аноним 08/04/21 Чтв 18:14:13 1990301874
>>1990253
>а скорее то что хочет продать маркетолух
Мне нужно именно по количеству промотров, товары я привёл для примера

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

>>1990273
Вот по этому я и ВСТАЛ, всё занимает много места и будет много крутиться за зря увеличивая очереди на запись, так как храниться всё будет в json файле

Я придумал немного компактнее твоего, хотя может и нет, в общем в ключе просмотре писать массив с 24 массивами где хранится час от 1 до 24 и рядом дата, когда дата равна 24 часам значит эти данные в этом часу уже старые и их нужно затереть и выставить свежую дату и начать запись просмотров с 1, то есть у нас есть предыдущие 23 часа и текущий час обнулился и начал записываться заново, походу так и придётся ебаться, просто много циклов получается пиздец, зато самый компатный вариант на выходе, интересно сколько по времени это будет обрабатываться и занимать оперативки
Аноним 08/04/21 Чтв 18:20:24 1990315875
>>1990301
Можешь посмотреть в сторону хранения связок событий и uuid товаров в оперативке с ограниченным сроком жизни. Ну это если есть возможность redis или memcache накатить. Работать быстро будет. Всякие озоны похожий подход используют для некритичных данных.
Аноним 08/04/21 Чтв 19:11:36 1990373876
>>1988780
окей, тогда очевидный вопрос: стоит ли в резюме указывать что вот 3 месяца работал там то там то на таком то стеке? с одной стороны это для меня плюс тк люди видят что есть коммерческий опыт в ларе, а не только на пэт проектах, но с другой стороны минус в том что в новую будет тяжело залететь тк будут думать мол что это я какой то ебанутый/джампер и тд и тп
Аноним 08/04/21 Чтв 19:19:43 1990393877
>>1988898
магенто2 его использует. так что где он -там и этот формат. съебался с галеры как раз когда к ним прилетел проект на этом говне, спустя месяц связался с бывшими коллегами и они говорят что это кал и боль лютая
так что да, говно, старо - тут ты прав, но то что нигде не юзается - тут ты не прав
Аноним 08/04/21 Чтв 19:50:46 1990449878
>>1990393
И каким образом формат файла доставляет боль ты сможешь придумать? Он во всех интерпритаторах php работает. Может кал и боль это сама ебучая цмс?
Аноним 08/04/21 Чтв 19:52:28 1990454879
>>1990315
Походу придётся не выёбываться и просто выводить собранные данные за вчера, а то что соберу сегодня показывать завтра

Аноны, а такой вопрос, вот я хочу в 12 часов ночи обнулять все просмотры в масиве, как по быстрому это сделать? Только через цикл? Типа крутить в цикле $order[key]["view"] = 1;? Или есть какая-то специальная функция для таких задач? Поиска нужного ключа в ключе и его сброс на нужное значение?
Аноним 08/04/21 Чтв 20:05:56 1990472880
>>1990449
это фреймворк , а не цмс я тоже с этого прогорел лол
сам не работал, но по словам бывших коллег проблема в том что там часть вьюх в phtml, а часть в xml. на мой вопрос почему нельзя гонять просто json и посадить на фронт нормальный js фреймворк был такой ответ: структура и ядро слабо под это подготовлены, сами разрабы вот вот только начали пилить такие фичи туда + у заказчика куплен готовый модуль для этой платформы который является краеугольным камнем во всей системе последнее также звучало объяснением для того почему они проект с симфы переписывают на магенто2 лол
Аноним 08/04/21 Чтв 20:06:43 1990473881
>>1990454
Подожди минутку, я пропустил важный момент в твоем посте, а зачем ты вместо бд json файл используешь?
Аноним 08/04/21 Чтв 20:10:01 1990474882
>>1990472
Ну значит у них точно такие же проблемы с .php. Я не вижу корреляции с конкретно .phtml.
А переписывать с симфони на магенто - это новости из параллельной вселенной просто.
Аноним 08/04/21 Чтв 20:10:52 1990475883
Рассматриваю фриланс, как вариант получения опыта (бэкенд, пых). Но, не совсем понимаю. Какой тип заказов нужно выполнять? Я правильно понимаю, это сайты под ключ?
Аноним 08/04/21 Чтв 20:11:47 1990477884
>>1990473
Мне не дают доступ к БД, да и там будет максимум 1000 товаров, можно и в файлике похранить
Аноним 08/04/21 Чтв 20:13:46 1990478885
>>1990473
Это просто костыль в виде расширения
Аноним 08/04/21 Чтв 20:22:53 1990482886
>>1990477
>>1990478
Тогда просто забей болт и сделай цикл. Но это мрачный пиздец конечно.
Аноним 08/04/21 Чтв 21:13:25 1990538887
Аноны не могу разобраться, вывожу дату в таком виде date("dmY"), она выводит мне 08042021, что мне сюда дописать чтобы оно вывело вчерашнее число 07042021? Попробовал date("d-1mY") но сразу же соснул, как и с date("dmY") - strtotime('yesterday')
Аноним 08/04/21 Чтв 21:18:06 1990541888
>>1990538
Снова сам отвечаю на свой вопрос date("dmY", strtotime('yesterday'))
Аноним 08/04/21 Чтв 21:42:37 1990568889
>>1990474
>А переписывать с симфони на магенто - это новости из параллельной вселенной просто.
трустори, я не троль. как мне сказали проще было взять магенту с готовым модулем и перекинуть старый функционал туда, чем на симфонии пилить новый функционал тот что в том модуле есть
Аноним 09/04/21 Птн 09:59:57 1990850890
Аноны, не могу вдуплить как сортировать массивы по значению в многомерном массиве?

$array = array(
'0' => array(
'id' => '5',
'name' => 'Нариман',
),
'1' => array(
'id' => '10',
'name' => 'Виталик',
),
'2' => array(
'id' => '15',
'name' => 'Павлик',
)
);

Вот например как тут отсортировать массив по имени? sort() мне просто выдаёт true
Аноним 09/04/21 Птн 10:03:47 1990851891
>>1990850
Читай офф документацию, для функций, которые используешь. Вероятно тебе лучше подойдет array_multisort();
Аноним 09/04/21 Птн 10:22:56 1990863892
>>1990850
Лол по традиции отвечаю сам себе

function abu($a, $b){
return ($a['name'] < $b['name']);
}
usort($array, 'abu');
Аноним 09/04/21 Птн 10:28:39 1990867893
>>1990863
Аноны, а почему помещение функции во внутрь сортировки вызывает ошибку?

usort($array, function ($a, $b){
return ($a['name'] < $b['name']);
});

Это может быть из-за старой версии PHP? 5.2
Аноним 09/04/21 Птн 11:15:02 1990907894
>>1990472
А почему тогда везде в интернете написано, что магенто - это цмс?
Аноним 09/04/21 Птн 13:17:56 1990999895
>>1990907
Может потому что используют все ее как цмс, вообще фрэймворком назвать можно даже wordpress, если очень захотеть, а лара со всеми модулями и обмазками - почти готовая цмс сейчас. Вот только если называть говно шоколадом, вкуснее оно от этого не станет.
Аноним 09/04/21 Птн 14:30:22 1991061896
>>1990373
Много мест по паре месяцев не очень выглядит в глазах херки. То ли ты мешкаешься, то ли тебя выгоняют. Лучше это объединить в одну фирму, пусть и приврав
Аноним 09/04/21 Птн 14:31:11 1991064897
>>1990472

> гонять просто json и посадить на фронт нормальный js фреймворк

Я не понимаю, чем JSON и "нормальный фреймворк" лучше, чем рендерить шаблоны на сервере.

На сервере ты имеешь объекты вроде Product, Order, Category, ты можешь посмотреть, какие у них есть свойства и методы. К ним есть комментарии и документация.

На фронтенде ты имеешь никак не типизированный и не документированный JSON - просто помойка, свалка из случайных данных. Причем вполне возможно, что, например, одно API отдает одни данные о товаре, а другое - немного другие. Это же JSON-помойка без типизации.

По моему, первое лучше второго.
Аноним 09/04/21 Птн 14:32:03 1991067898
>>1990475
Соснешь хуйцов на фрилансе без опыта.
Будешь в лютом говне ковыряться типа цмсок и самописов. Нормального опыта не получишь
Аноним 09/04/21 Птн 14:33:53 1991069899
>>1990863

Неправильно. В документации написано, что функция сравнения должна вернуть -1, 0 или 1. У тебя она возвращает true либо false. Почитай про оператор <=> (spaceship) и переделай.
Аноним 09/04/21 Птн 14:35:15 1991070900
>>1991064
>Я не понимаю, чем JSON и "нормальный фреймворк" лучше, чем рендерить шаблоны на сервере.
Вчера ебался с багом как раз с рендером шаблонов на сервере.
Проблема была в том, что сервер не знает текущего состояния на фронте и тупа шлет новую верстку, жс и стили, которая ломает текущий жс функционал.
Был бы фронтенд фрейм - такой хуйни не было б
Аноним 09/04/21 Птн 14:35:17 1991071901
>>1990863

Хотя, если у тебя PHP 5.2, то оператора <=> там нету. Ну, тогда руками делай сравнения или используй функцию вроде strcmp.
Аноним 09/04/21 Птн 14:39:35 1991075902
>>1990867
>Это может быть из-за старой версии PHP? 5.2
Эту версию перестали поддерживать 10 лет назад. Задумайся, 10 лет. За эти 10 лет фронтенд перевернулся с ног на голову
Аноним 09/04/21 Птн 14:54:55 1991091903
>>1991064
Для тебя наверное лучше, если ты вкатыш или клепаешь магазины для ашотов. Если попадешь в нормальную продуктовую компанию - сам все поймешь довольно быстро.
Я боюсь представить, что с твоим мирком будет, когда c graphql или протобафом столкнешься.
Аноним 09/04/21 Птн 14:55:57 1991092904
>>1991075
Я понимаю, но админам похуй на это, я её поменять не могу, так почему ошибку выдаёт? Значит эта версия не поддерживает анонимные функции внутри системных функций?
Аноним 09/04/21 Птн 14:59:04 1991094905
Аноним 09/04/21 Птн 15:01:39 1991095906
>>1991094
Больше тесткейсов запусти и тогда сможешь утверждать, что работает
Аноним 09/04/21 Птн 15:02:02 1991096907
>>1991092
>я её поменять не могу
Зато можешь поменять работу
Аноним 09/04/21 Птн 16:11:29 1991143908
>>1958281 (OP)
аноны, учу laravel, возникла проблема скорее по js ну да и похуй - собираю через npm run dev в app.js весь жс. Проблема в том что все что я туда импортирую вне скрипта недоступно, а я хочу в onclick в html повесить медтод импортируемого класса. Как фиксить?
Аноним 09/04/21 Птн 16:20:45 1991148909
Vue используют, в связке с Laravel. А какой front end фреймворк используют в связке с
Symfony? Angular?
Аноним 09/04/21 Птн 16:21:45 1991149910
>>1991148
>Vue используют, в связке с Laravel
Его использовали, т.к. vue одно время был предустановлен в ларе.

>А какой front end фреймворк используют в связке с
Symfony? Angular?
Любой
Аноним 09/04/21 Птн 16:37:17 1991159911
Аноним 09/04/21 Птн 16:42:29 1991163912
>>1991148
Vue чем то схож по назначению с ларой. Простой, дружелюбный, идеален для среднемелкого софта. Плюс легкий и приятный вкат, в отличии от того же ангуляра.
Ну и анон выше написал еще.
Аноним 09/04/21 Птн 17:17:51 1991202913
изображение.png 35Кб, 250x250
250x250
Пока сделал простую форму регистрации прошел через 100500 ошибок. У меня в плюсах столько ошибок не было.
Аноним 09/04/21 Птн 18:11:36 1991258914
>>1991163
А симфони пробывал? Если да. То как он тебе?
Аноним 09/04/21 Птн 18:12:49 1991260915
>>1991202
Изучение плюсов даёт преимущество... Долго, плюсы изучал кстати?
Аноним 09/04/21 Птн 18:40:44 1991285916
Посоны, проверяю наличие файла в каталоге функцией file_exists() и если его нет - то создаю его, у меня такая хуйня что когда размер файла доходит до 500кб или когда много запросов внезапно всё содержимое удаляется, это может быть из-за этой функции? Мои шерлокофантазии говорят мне что возможно в момент записи файла другим скриптом этот пытается проверить его наличие и получает отрицательный результат и в итоге создаёт новый затирая старый, может такое быть? Какую тогда функцию для проверки наличия файла использовать? Записываю файл с помощью file_put_contents("hui.json", $array, LOCK_EX)
Аноним 09/04/21 Птн 19:06:09 1991302917
>>1991285
Или это то о чём предупреждали выше? Что один поток перебивает другой, то есть пока 1 поток считывает содержимое файла, другой начинает запись и предыдущий получает данные не до конца? А как защить его во время считывания? В file_put_contents() есть метод LOCK_EX, а вот в file_get_contents() такого нет, или переписать всё на fopen() fwrite() fclose()?
Аноним 09/04/21 Птн 19:33:23 1991323918
>>1989050
>Как и в онлайн интерпретаторе
написать в обычном редактре кода и скопипастить туда?
Аноним 09/04/21 Птн 20:34:41 1991359919
>>1991258
Симфони - это про другое, больше про интерпртайз или чтото масштабное, мощный, гибкий, при этом сложный достаточно. Но на нем вцелом и зарплаты самые высокие в php. Doctrine - вообще отдельный каеф, очень похожа на Hibernate из java, при наличии прямых рук позволяет творить прям очень мощные штуки. Но как первый фрэймворк - имхо лара все таки лучше.
Аноним 09/04/21 Птн 21:22:30 1991392920
изображение.png 7Кб, 530x167
530x167
Как этот код работает? Почему отображаются все пользователи, а не только тот, что с индексом 0. It just works
Аноним 09/04/21 Птн 22:40:17 1991434921
Как можно предотвратить переполнение целых чисел? Если число больше чем PHP_INT_MAX или меньше чем PHP_INT_MIN оно преобразуется во float. Но если этот float преобразовать обратно в int через intval, то возвращается 0.
Аноним 09/04/21 Птн 22:45:16 1991441922
>>1991434
Есть ceil() для этого, если я правильно понял тебя. Кстати всместо intval() можешь использовать явное приведение (int)$val;
Аноним 09/04/21 Птн 22:47:51 1991443923
>>1991392
Ты при каждой итерации цикла перезаписываешь переменную $row и записываешь в нее результат из новой строки таблицы.
Аноним 09/04/21 Птн 23:14:32 1991463924
Добрый день, аноны. Что нужно, чтобы идти на мидла?
Аноним 09/04/21 Птн 23:25:49 1991469925
>>1991443
А строка меняется с какой стати?
Аноним 10/04/21 Суб 01:11:36 1991510926
>>1991285
>>1991302
Блин аноны происходит какая-то коллизия когда в массиве собирается от 1000 значений или много запросов одновременно, я не разобрался, в один момент файл в который всё сохраняется становится просто пустым, я так понимаю один из потоков просто не может записать файл или загрузить его до конца из-за прерывания другим потоком, интересно что это на самом деле и поможет ли замена file_get_contents file_put_contents на fopen fwrite fclose, сейчас уже просто нет сил всё переписать чтобы проверить, всё происходит рандомно через несколько минут или часов
Аноним 10/04/21 Суб 09:43:16 1991654927
Посоны, короче проблема повторяется раз за разом, я храню в файле массив из просмотренных товаров, каждый раз при вызове скрипта он подгружается, обрабатывается, изменяется или дополняется и снова записывается

Я правильно понимаю что из-за нескольких потоков происходит то что во время считывания один из потоков начинает запись обработанного файла и предыдущий поток не дочитав файл до конца теряет его часть и в иторе происходит ошибка и он сохраняет только тот товар при просмотре которого он был вызван и затирает собой старый файл с 1000 товаров записю с 1 текущим просмотренным товаром?

Выход из этого проверять перед загрузкой размер файла и проверять его после окончания загрузки? И если он меньше то скачивать его снова? А может быть что во время проверки размера файла он тоже попадёт на момент записи другим потоком и считает не тот размер что должен был быть?

Или я так понял ещё вариант это при записи сохранять файл под другим названием и в конце записи просто переименовывать его в то название что должно быть? И в таком случае другой поток во время считывания прочитает файл до конца хоть он уже и будет заменён путём смены имени? Верно?

Ну или какие ещё способы обхода этого есть? Могу только сохранять в файл, БД нету, размер его получается при 1000 товарах около 250кб, и походу этого размера хватает чтобы один из потоков не успел его скачать до конца как другой поток начинает его затирать записью в него

>>1991510-хуй
Аноним 10/04/21 Суб 11:51:10 1991708928
>>1991654
Или может файл открыть с помощью fopen, блокировать, читать, разблокировать, закрывать, потом обрабатывать, опять открывать fopen, блокировать, записывать, разблокиивать и закрывать? Так получится избежать коллизий с перезаписями друг-друга?

И что будет делать другой поток если ему встретится блокировка другим файлом? Он будет ждать или выдаст ошибку и прекратит работу?
Аноним 10/04/21 Суб 19:15:33 1992112929
>>1991143

По идее ты из своих скриптов должен ставить обработчик. Также, как костыль, можно сделать функцию публичной с помощью window.x = function(){}

>>1991148

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

>>1991285

Блокировки в PHP добровольные (я писал выше), то есть LOCK_EX действует только на операции, которые используют блокировку (через LOCK_EX или fcntl). Например, если ты читаешь заблокированный файл через file_get_contents без блокировки, то поставленная блокировка игнорируется и читается не записанный полностью файл.
Аноним 10/04/21 Суб 19:29:57 1992122930
>>1991285

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

Смотри мануал по функции flock(). Она как раз позволяет проверять наличие блокировки.

>>1991392

Потому что там цикл while, который выполняется много раз. Также, почитай мануал по mysqli_fetch_row, ты явно не понял, как она работает.

>>1991434

У int чисел есть ограничение на макс/мин. Ты не можешь преобразовать в int число, которое выходит за пределы допустимого диапазона. Потому что под int выделено ровно 4 (в 32-битных) или 8 байт (в 64-битных системах) и в них нельзя впихнуть произвольно большое число.

Если провести аналогии, представь, что у тебя на листке в клеточку выделено 4 клеточки, и в каждую можно запихнуть только одну цифру. Ты не сможешь так записать число больше, чем 9999.

Потому число преобразуется в float, возможно с потерей точности (то есть может немного отличаться от правильного числа).

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

Аноним 10/04/21 Суб 19:31:44 1992128931
>>1991443
Ну так я ее перезаписываю одним и тем же значением. Ты поясни нормально.
И почему в условии цикла присваивание блядь? Как это обрабатывается, истинность чего проверяется циклом? И вообще цикл должен быть бесконечным или вообще не выполнится, так как ни $row, ни значение функции не меняется в теле цикла.
Аноним 10/04/21 Суб 19:44:59 1992145932
>>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 добровольные, а не принудительные.
Аноним 10/04/21 Суб 19:48:15 1992150933
>>1992128

Выражение вида while ($x = func()) работает так:

- выполняется $x = func()
- проверяется: если $x равен null, 0, "", "0", [] (лживенькие значения, false values) то условие считается не выполненным, иначе условие считается успешно выполненным и цикл продолжается.

Аналогично работает конструкция вроде while($x) или if ($x): если в $x лживенькое значение, то условие не выполнено, а если что-то другое (например: не пустой массив) то условие успешно выполнено.
Аноним 10/04/21 Суб 19:48:54 1992152934
>>1992128

Выражение $row = mysqli_fetch... выполняется перед каждой итерацией цикла.
Аноним 10/04/21 Суб 19:51:28 1992155935
>>1992128

То есть, присваивание выполняется перед каждым шагом цикла и результат этого присваивания преобразуется в boolean тип как описано в мануале: https://www.php.net/manual/ru/language.types.boolean.php#language.types.boolean.casting

Если после преобразования получилось false, то условие не выполнилось. Если true, то выполнилось.

Это то же самое, что я написал выше, только со ссылкой на официальный мануал.
Аноним 10/04/21 Суб 19:53:45 1992161936
Аноним 10/04/21 Суб 19:58:06 1992173937
>Выбирает одну строку данных из результирующего набора и возвращает её в виде массива, в котором индексы элементов соответствуют номерам столбцов (начиная с 0). Каждый последующий вызов функции будет возвращать массив с данными следующей строки набора или null, если строки закончились.

Так уже яснее стало. Перечитывание документации помогает.
Аноним 10/04/21 Суб 20:57:49 1992256938
Аноним 10/04/21 Суб 23:10:25 1992376939
Ну что же вы аноны, вам в кои-то веки предлагают задачку не за бесплатно, а за деньги, решить.
Аноним 11/04/21 Вск 00:25:01 1992422940
>>1992145
Спасибо анон пока решил проблему с переименованием, вроде всё работает, хотя в временной папке появились пустые файлы которые не удаляются, сдаётся мне где-то проскакивает ошибка даже во время переименования которая ломает сам php что он оставляет нулевые файлы, завтра попробую их удалить ещё раз может какой-то кеш их защищает, а так да придётся склайт освоить, есть какой-то хороший русский гайд с простейшими примерами без ООП? Быстрый поиск выдал какие-то куски информации
Аноним 11/04/21 Вск 01:11:03 1992441941
>>1991143
добавить листенер в app.js который в ресурсах
Аноним 11/04/21 Вск 17:25:25 1992809942
Нормальная практика использовать Inheritance Mapping в Доктрине для хранения изображений для разных сущностей? Просто странно немного создавать пять пустых классов, которые просто будут наследовать Image.
Аноним 11/04/21 Вск 17:51:15 1992825943
>>1958281 (OP)

Простите за тупняк, но дайте, пожалуйста, годную книгу или онлайн-ресурс.
Аноним 11/04/21 Вск 20:10:18 1992914944
Посоветуйте, для какого сайта парсер написать можно, чтобы было полезно. Какой-нибудь контент собрать. Я уже написал себе один, но там домен .onion и незаконные вещи. Хочу для портфолио что-то в ГитХаб добавить (на Хекслете еще обучаюсь, оттуда проекты тоже есть там, но хочу еще своё что-то сделать).

Для Двача уже есть такое ? Допустим, чтобы можно было все картинки/видео с треда скачать или с раздела (единственное, я хз, как это к браузеру прикрутить в виде расширения, я во фронте не бум-бум, поэтому буду просто скрипт на Убунте пилить).

Еще думаю, мб классификатор написать, чтобы собранный контент по папкам сам распределялся. У Яндекса или Гугла же сервисы для этого должны быть ?* Правда эт уже сложновато будет, но можно попробовать.
Аноним 11/04/21 Вск 21:08:11 1992952945
image.png 89Кб, 1100x944
1100x944
>>1982834
короче я заебался ждать от вас каких-либо контактов. с предложениями пишите в телегу @mrzpdr

Если коротко, то нужна йоба, которая построчно будет подставлять данные из таблицы (exсel, csv) в документы, готовые к печати (пдф). то есть на входе табличка с данными, на выходе - пак документов с подставленными данными количество документов соответствует количеству строк.

учтите пацаны, если я начну в итоге делать это сам, то я вас заебу вопросами. подумайте
Аноним 12/04/21 Пнд 12:26:48 1993589946
Screenshot20210[...].png 72Кб, 1787x714
1787x714
Ебушки воробушки, миллион лет ждал эту хуйню! Теперь прям как в котлине. Пых прям последнее время активно развивается.

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

Аноним 12/04/21 Пнд 12:28:11 1993590947
>>1992952
20 баксов на апворке
Аноним 12/04/21 Пнд 14:14:23 1993673948
>>1993589
>Ебушки воробушки, миллион лет ждал эту хуйню!
Вот это двачую конечно, хотя восьмерка как мажорный релиз всё равно хуйня унылая.
>Если когда-нибудь добавят дженерики и алгоритмическую либу под них, пых станет ультра-имбой и начнет теснить даже яву и си шарп на их поле.
А это к сожалению нет. Современный пых уже давно далеко не похож на тот, каким он был в нулевых. Вот только видишь ли ты изменение его репутации с того времени хоть чуточку в лучшую сторону? Я не вижу.
По-моему, единственной надеждой на спасение этого языка ну или последним гвоздем в крышку гроба, что не сильно хуже был P++, да только все интерналсы проголосовали против, включая автора RFC. Попахивает заговором
Аноним 12/04/21 Пнд 14:35:43 1993708949
>>1992422

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

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

>>1993589

А мне не нравится. Это провоцирует написание кривого кода, где любая переменная может быть пустой из-за того, что корректно не проверяются ошибки. Вместо того, чтобы проверять ошибки, будут лепить эти null-safe операторы и в коде невозможно будет разобраться.

Аноним 12/04/21 Пнд 15:29:54 1993770950
>>1992809
Зависит от контента.
Если у тебя они ничем не отличаются я бы их держал в одном классе, типа PublicImage.
Аноним 12/04/21 Пнд 16:32:40 1993836951
>>1993708
>Это провоцирует написание кривого кода
Странная претензия чот. ТО есть if (!_is_null(huinya)) {} не провоцирует? По такой логике, все кроме простейших конструкций провоцирует.
Просто сахар для сокращения и удобочитаемости же.
Аноним 12/04/21 Пнд 17:17:02 1993890952
>>1993770
Они отличаются только классом, с которым у них отношение, ну и видом отношений ( One-To-One или One-To-Many ).
И как ты предлагаешь это реализовать в одном классе с доктриной? Будет допустим таблица, в ней поля url и imageable_id. Ну допустим даже накостылил бы я поле "imageable_class" и буду вручную его задавать.
Доктрина ж никак не поймет что при обращении к $post->images нужно искать в таблице images записи, где imageable_class = App\Entity\Post. Лучше уж тогда просто inheritance mapping использовать.
Аноним 12/04/21 Пнд 18:18:47 1993975953
>>1993890
У тебя есть класс Image, он замаплен на таблицу images, а в нужной сущности есть поле Image/Images и связь с таблицей images по айди, ну либо таблица связей. Зачем тебе разные классы тут я не понимаю.
Аноним 12/04/21 Пнд 19:39:58 1994035954
>>1958281 (OP)
Пацы, у кого есть опыт собесов по скайпу? Меня прогоняли по тому, что было на прошлой работе, что знаю, что использовал и всё такое и назначили собес по скайпу. Как это происходит, будем мило болтать с тимлидом за чашечкой кофе, задачи через share-screen, гонять по теории или что? Как у вас было?
Аноним 12/04/21 Пнд 20:53:27 1994119955
Анончики, вопрос.

Есть данные, сохранененные в сессию, стоит session.gc_maxlifetime ебовый и лайфтам сессионной куки ебовый, около недели. Данные из сессии выводятся на форму. Вижу, что PHPSESSID в куке остается тем же, но данные на форме через некоторое (рандомное) время исчезают. В какую сторону копать?
Аноним 12/04/21 Пнд 23:15:52 1994201956
>>1993890
>Доктрина ж никак не поймет что при обращении к $post->images нужно искать в таблице images записи, где imageable_class = App\Entity\Post.
Нихуя не понял, что ты делаешь. У самого примерно такая же структура, все заебись ищет. Из сущности делаешь запрос ->getImage() и всё ок. Там же по id связь.
Аноним 13/04/21 Втр 10:40:30 1994416957
laravel
Аноним 13/04/21 Втр 11:37:40 1994448958
>>1993590
Вот и возьмись за 20 баксов.
Пиздеть - не мешки ворочать. Тут больше будет.
Аноним 13/04/21 Втр 12:34:02 1994510959
>>1994035
По опыту моих нескольких собесов:
- будут херочка и кто-то из менеджеров спрашивать базовые вещи и с чем работал, что писал, могут попросить примеры кода.
- будет тимлид или ЧСВшный синьор-помидор, будет спрашивать и качать головой типа какой ты убогий. Спрашивать будет примерно ту же хуйню что и верхние, пояснять почему ты убогий тоже не будет - он сам не знает и делает это чтоб продавить тебя по зарплате.
- будут левые пацаны, которые замутили бизнес на коленке и пока сами ещё не знают что спрашивать. Ждать можно что угодно - от нормальных вопросов, до в стиле "почему крышки люка круглые?"
Аноним 13/04/21 Втр 12:36:20 1994511960
>>1994035
И самое главное - собес не означает трудоустройство. Будь на похуе и даже не думай волноваться - это просто досужий пиздёжь, по большому счёту. Как пройдёшь с десяток таких, то сам поймёшь.
Аноним 13/04/21 Втр 12:47:34 1994514961
>>1994511
>>1994510
Спасибо большое, анон! У меня очень слабые нервы. После съёба со старого места работы всегда несколько месяцев отдыхаю чтоб нервы восстановить. Мне всё равно сейчас, попаду я на эту должность или нет, но страх обосраться никак не исчезает.
Аноним 13/04/21 Втр 12:49:32 1994517962
>>1994514
>Мне всё равно сейчас, попаду я на эту должность или нет, но страх обосраться никак не исчезает
Скорее всего нет - первый собес почти всегда провальный. Посмотришь просто, что ничего особенного.
Аноним 13/04/21 Втр 12:54:08 1994520963
>>1994517
В том то и дело, что собес не первый, я до этого несколько раз обосрался ну и несколько раз прошёл, поработав по стеку год, а страх так никуда и не девается. Видимо, пора к психиатру.
Аноним 13/04/21 Втр 13:01:00 1994528964
>>1994520
Видимо недостаточно собесов было.
После пары десятков собесов в основном провальных уже на похуях прохожу или не прохожу.
Начал относится к собесам как к игре. Планирую, на что и как отвечать, какие вопросы задать, как себя повести.
Аноним 13/04/21 Втр 13:17:59 1994535965
Аноним 13/04/21 Втр 16:18:31 1994729966
>>1993975
>ну либо таблица связей.
Точно, почитал доку, вспомнил что можно городить One-To-Many-Unidirectional связь через костыль как Many-To-Many с уникальными id изображений в промежуточной таблице.
Но как-то муторно это. С inheritance-mapping то же самое в два клика делается, еще и красиво это всё по-моему, в одной таблице концентрируется, а не по всей базе размазано.
Но я так понимаю, на практике все делается предложенным тобой способом.
Аноним 13/04/21 Втр 16:23:22 1994737967
Нужно перекатиться с Java + Spring на PHP + Laravel, какие подводные и насколько тяжело будет освоиться?
Аноним 13/04/21 Втр 16:41:27 1994776968
>>1994737
Лара это вообще почти как CMS считай. Можешь столкнуться с болью, пытаясь применять нормальные паттерны и практики в среде ебанутых антипаттернов ларки и таких же ебанутых кодеров на ней.
у меня такая детская травма присутствует
Если уж к тебе во сне пришел Иисус и сказал что нужно стать пыхарем или ты умрешь через год, то может все таки Симфони? Зайдешь как по маслу: те же концепции, те же аннотации с теми же названиями и параметрами, те же принципы и т.д.
Хотя, лучше всего выбей дурь из головы и уходи из треда. Если начальство вынуждает или еще кто-то, шли их нахуй.
Аноним 13/04/21 Втр 17:05:44 1994805969
>>1994776
Да, на РАБоте попросили поРАБотать в проекте на Ларе, потому что им типа разработчиков не хватает :(
Аноним 13/04/21 Втр 18:03:31 1994871970
>>1994805
Два чаю этому >>1994776 господину.
Если проект позволяет, можешь хотябы прикрутить на лару Doctrine, она больше похожа на Hibernate. Но от некоторых подходов лары, после спринга у тебя все равно шары на лоб полезут.
Аноним 13/04/21 Втр 18:25:15 1994896971
>>1994805
Лол, а говорят рынок перегрет, хуе мое, требования космические, специалистов имея в виду не вкатывальщиков с курсов, конечно, их то достаточно в тыщу раз больше чем вакансий и прочее.
Хуй там правда, джуна на лару найти не могут.
Аноним 13/04/21 Втр 19:14:54 1994954972
>>1994896
Это как раз нехороший знак, что спеца с норм стека пересаживают на стек похуже. Сначала ухудшаются условия работы, а следом пойдут снижения зп и сужение рынка вплоть до битриксов
Аноним 13/04/21 Втр 19:23:29 1994965973
>>1994954
Ну с битриксами ты конечно загнул. Уже даже в провинциях понемногу переходят на что то более вменяемое, это говно могло расти только в условиях тотальной безграмотности кабанчиков.
Аноним 13/04/21 Втр 21:33:16 1995132974
>>1994896
>джуна на лару найти не могут
Не "не могут", а "не хотят". У некоторых контор требования как к иному мидлу не прёдъявляют. Меня лично какой-то важный и опытный опущ спрашивал про опыт с высокими нагрузками, когда я к ним на джуна шёл. Порой пишут стек 100% твой, и даже предлагают типа "мы научим и покажем как и куда, только хотя бы азы знай и куда там эту sql-строку пихать", пишешь им - "сам знаю куда строку пихать, писал то-то и то-то, вот вам пример моей работы, вот исходники - смотрите, буду радостно развиваться и даже денег много просить не хочу" и тишина блядь. У других висит вакансия - нужен разработчик, пишите на мыло. Стек мой - пишу, что умею, пруфы даю и тоже, сука, мороз.
Со всей этой индустрией что-то сильно не так.
Аноним 13/04/21 Втр 21:37:44 1995143975
>>1995132
Уже мысли с лары на битрикс\вордпресс перекатываться т.к. там кабанчики в личку регулярно пишут с предложениями. Давно бы перекатился, да не нравится мне там код и подходы.
Аноним 13/04/21 Втр 21:44:47 1995157976
>>1995132
Что за "твой стек" такой, мне прям интересно стало. И какие пруфы того что умеешь ты отсылаешь, что тебя везде морозят?
Аноним 13/04/21 Втр 21:55:16 1995168977
>>1995157
>Что за "твой стек" такой
Лара\Октобер + Вью\Бутстрап.

>какие пруфы того что умеешь ты отсылаешь
Есть несколько рабочих сайтов, на гитхабе пара апишек на Люмен.
Что ещё им надо от джуна?
Аноним 13/04/21 Втр 22:02:23 1995180978
>>1995168
Ну вообще звучит норм, может быть код очень корявый? Гит, sql, сервера указано в резюме?
Аноним 13/04/21 Втр 22:11:25 1995190979
>>1995180
>Гит, sql, сервера
Я сперва написал всё, что пробовал и игрался, но писали не очень активно. Сократил до 10 именований где-то совет увидел - стали писать активнее, но всё какое-то левое.
А так конечно - гит даже на своих проектах юзаю гениальная штука, sql умею, но всё больше на ОРМ последнее время, сервера - апач, нжинкс. SSH, Ubuntu server норм знаю - на ноуте игрался полгода с ней ещё до вката в ПХП.
Хз что не им так. На собеседованиях не матерюсь и мамок не ебу. Может стоит начать?
Аноним 13/04/21 Втр 22:23:03 1995203980
>>1995190
Без понятия чесно говоря почему так. У нас приходили джуны, незнакомые с ООП практически даже, зато с миксом разной херни на гитхабе, брали на испытательный, один из двух выреб даже, второй по учебе слился. Единственное может скажу, не бойся писать в крупные галеры, даже если стек не совсем подходит а то вдруг стесняешься и пишешь откровенным васянам в студии онли. Ну и на гитхаб что нибудь по алгоритмам например залей для солидности, а не онли бложики на ларе.
Аноним 13/04/21 Втр 22:31:22 1995210981
>>1995203
>У нас приходили джуны, незнакомые с ООП практически даже
Вот и я в ахуе от ситуации. Может это из-за того, что на удалёнку лезу?
Попробую алгоритмов в гитхаб накидать - не проблема.
Аноним 14/04/21 Срд 00:12:03 1995343982
Такой вопрос ньюфажный. Так или иначе, сейчас почти весь современный веб на реактивных фреймворках. И хоть тут бывает начинаются холивары о том что они не нужны и twig с jQuery удобнее, но против тенденций не попрешь.
Так вот, изучаю тут Симфони, уже убедился что Symfony Forms воистину очень крутая и мощная вещь. Но... Как эти формы вообще комбинируют с фронтендом на каком-нибудь Vue?
Упустим простые примеры, рассмотрим более-менее сложную форму с CollectionType'ами, несколькими уровнями вложенности сущностей и т.д.
Вот я ее прописал на бэкенде, отправил в twig, в шаблоне написал {{ form(form) }} и все, у меня все готово.
Ладно, на самом деле нет, надо еще прототипы вывести и на jQuery с их помощью сделать кнопочки удаления и добавления элементов в коллекцию. Но всё равно работы на 5 минут.
А что люди делают если весь рендеринг на джаваскрипте? В доке этому, блин, ни слова не уделено.
Ввел в гугл "symfony forms vue", что-то мне увиденное не понравилось.
В основном советуют выводить по api на фронт уже отрендеренную на бэкэнде форму. Как-то не очень это, фронтовик получается никакой власти над этой формой не имеет, на каждый пук приходится в php лезть. А в таких случаях это ведь два разных проекта.
Еще и, получается, все вокруг на фронте реактивно и завязано на объектах, а добавление/удаление элементов в форме внезапно осуществляется старым дедовским способом через прямую работу с DOM-деревом, лол.
Еще прочитал статью от чела который тонну костылей на бэкэнде нагородил, чтобы отдавать эту форму в виде адекватного JSON, и еще тонну костылей на фронте, чтобы слепить с этого JSON форму во вью компоненте.
Похвально конечно, но я уверен что больше никто таким не занимается.
Пока что мне таки кажется, что самым нормальным решением в таком случае будет лепить такую форму на фронтенде с нуля. Хотя подводные камни есть, и времени это тоже много займет. Такого кстати совета я в интернете не встретил.

Так вот, мудрые аноны, у вас на реальных проектах были такие проблемы? Как решали?
Аноним 14/04/21 Срд 02:04:33 1995419983
>>1995343
>twig с jQuery удобнее, но против тенденций не попрешь
Нет никаких тенденций - есть бюджеты и требования к проекту. Пилить полноценные микросервисы нет никакого смысла для простых сайтов без сложного взаимодействия на клиенте. Тот же двоч - без фронтенд-фреймворков работает, если ты не заметил, как и подавляющее большинство интернета.
По моим наблюдениям есть некоторый избыток фронтенд-разработчиков уже - общался с некоторыми начинающими студиями и вот там всегда есть фронтенд, а то и не один, уже со старта, при отстутсвии всех остальных.
Аноним 14/04/21 Срд 09:47:49 1995503984
Аноним 14/04/21 Срд 10:07:24 1995544985
>>1995419
> По моим наблюдениям есть некоторый избыток фронтенд-разработчиков уже

Зарплатные вилки фронтендеров чот не согласны с твоми наблюдениями. На ангуляр уже мидлов на 150+ ищут. Джунов-вкатунов везде много, да.
Аноним 14/04/21 Срд 11:24:00 1995595986
>>1995190
Мб у тебя с софтами плохо? Не показываешь заинтересованности в проекте?
Аноним 14/04/21 Срд 11:44:15 1995611987
Аноним 14/04/21 Срд 12:16:37 1995623988
>>1995544
>Зарплатные вилки
Потому, что нужны только в больших конторах, а у тех деньги есть. А в мелких студиях больше мешают со своим Vue - мне предлагали микросайты за 5к на этом Вью пилить, в другом месте "фронтенд-разработчик" себе отдельно верстальщика требовал, потому, что не умел верстать - он дескать погроммист у мамы, и не для того его роза цвела. Кстати частое являние у макак.
Если же рассматривать фронтенд-разработчика как универсала, которому можно отдать клинетскую разработку в любом виде, то да - везде нужны и цены будут расти.
Аноним 14/04/21 Срд 12:43:16 1995648989
>>1995623
>он дескать погроммист у мамы, и не для того его роза цвела. Кстати частое являние у макак.
Ну это охуевший в край бездарь просто. Странно что держат вообще.
Везде, где я знаю фронта за такие заявления выкинули на мороз бы сразу.
14/04/21 Срд 12:54:10 1995655990
>>1995168
>>1995190
Довольно средний стек средненького кодера :) Извини, но чтобы доказать компаниям, что ты достоин рабочего места, нужно нечто большее, чем быть просто средненьким специалистом :)
HR-тян
Аноним 14/04/21 Срд 13:02:38 1995664991
Аноны, васяню приложуху за деньги лол, короче суть такова что архитектура у меня чет не получается.
Не очень пойму как по сервисам раскидывать нужно.
Если просто - есть у меня в контроллере ( понятно что бизнес-логика не в контроллере, а в каком нибудь классе который в общем описывает то что должно твориться по этому роуту ) нужно вызывать "сервис" генерации отчета exel.
Суть в том что этот сервис у меня из разных контролеров может вызываться.
Сам сервис в каталогк "сервисы" сидит.
Но чето у меня оч высокая и кривая связность всего этого.

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

хуй знает че я вообзе спросил, лол
Аноним 14/04/21 Срд 13:11:47 1995668992
>>1995343
>Как эти формы вообще комбинируют с фронтендом на каком-нибудь Vue?
Я с Symfony не знаком, но скорее всего никак. Разве что оставляют валидацию входящего запроса. UI отрисовывается полностью на фронте.
>В основном советуют выводить по api на фронт уже отрендеренную на бэкэнде форму
Мне приходилось быть по обе стороны баррикад, и я делал и бэк, и фронт, и с точки зрения фронтера могу сказать, что за такое надо по рукам бить.
>Еще прочитал статью от чела который тонну костылей на бэкэнде нагородил, чтобы отдавать эту форму в виде адекватного JSON, и еще тонну костылей на фронте, чтобы слепить с этого JSON форму во вью компоненте.
Только вот какой вообще в этом смысл? Единственное применение этому, которое я вижу, это если у тебя какая-то охуенно сложная динамическая форма, состав полей которых фронтеру заранее неизвестен. Но такое редко случается.
Аноним 14/04/21 Срд 13:37:49 1995681993
>>1995419
>Нет никаких тенденций - есть бюджеты и требования к проекту.
Ну ок, допустим бюджет хороший, из требований - шобы все было модно стильно как у других кабанчиков, перед пацанами не стыдно.
Тебя если такое попросят, ты с работы уволишься и будешь искать веб студию где позволят на jQuery писать?
>Тот же двоч - без фронтенд-фреймворков работает, если ты не заметил, как и подавляющее большинство интернета.
Подавляющее большинство интернета - это магазины на CMSках. А я написал "почти весь современный веб".
>>1995668
И я о том же самом
Аноним 14/04/21 Срд 15:41:18 1995792994
>>1995648
>Странно что держат вообще.
А они по-корешам с организатором вроде как были. Когда он мне начал диктовать - на чём апишку и админку делать, то был послан в пешее. Но было забавно смотреть как он пытался завязать на себя разработку, ничего не умея по-сути и всё дико усложняя, только чтобы ему таски перепадали. У них так и не вышло ничего вроде как. Я, наверное, про таких и писал в посте - пиздос у меня тогда от него пригорело.
Но таких уебанов и потом ещё встречал и всегда были без работы.
Аноним 14/04/21 Срд 19:46:36 1996193995
>>1994729

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

>>1995210

В гитхабе не забудь про РИДМИ с картинками и поясняющим текстом. Рекрутеру шлют по 100 гитхабов в сутки, ему некогда там в твоем коде самому выискивать подробности.

>>1995343

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

Минус в том, что надо писать преобразователь формы в JSON (со всеми подробностями) + на клиенте надо писать построитель формы из JSON. Плюс в том, что если форм много, то тебе не надо будет их делать руками.

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

Есть и другие варианты. Отказаться от форм и использовать Symfony Validator, который может валидировать произвольный объект по правилам в аннотациях. Данные, пришедшие аяксом, с помощью какого-нибудь Serializer преобразовывать в объект, и валидировать его. Но я не уверен, что делать, если при валидации надо обратиться к какому-то сервису из контейнера.

Так или иначе, если форм много, то нужен будет какой-то построитель, либо на основе Symfony, либо на JS фреймворке. Иначе нарушится принцип DRY.

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

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

Ну и по моему, "реактивный" фронтенд мало где реально нужен. В какой-нибудь админке (а где еще бывает куча форм?) он даром не нужен.
Аноним 14/04/21 Срд 19:56:01 1996213996
>>1995611

Если ты хочешь взять, например, букву номер 20, но в строке всего 10 букв, надо выводить пробел вместо нее. А ты ничего не выводишь, и от этого строки съезжают влево.

Также, не забудь убрать из кода магические числа вроде $i < 33.

>>1995664

В сервисы помещается бизнес-логика. То есть, действия, для выполнения которых написано твое приложение, но без взаимодействия с пользователем. То есть в сервис мы не передаем POST, GET (или их заменитель Request), не генерируем там HTML-страницу.

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

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

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

Сервис ничего не должен знать о роутах, это забота контроллера.

> Но чето у меня оч высокая и кривая связность всего этого.

В чем это проявляется? Не очень понятно.
Аноним 14/04/21 Срд 19:58:43 1996219997
>>1995668

> Разве что оставляют валидацию входящего запроса. UI отрисовывается полностью на фронте.

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

> Только вот какой вообще в этом смысл?
Смысл в том, что ты описываешь форму один раз на сервере и не пишешь руками однотипный HTML для каждой новой формы.
Аноним 14/04/21 Срд 20:11:00 1996240998
>>1996219
>Это плохой подход, если форм много,
Это плохой подход для твоих микропроектов, которые полтора васяна-оркестра лепят, не проецируй его на всю индустрию плз.
>Смысл в том, что ты описываешь форму один раз на сервере и не пишешь руками однотипный HTML для каждой новой формы.
Вообще ахуеть. Про банальные компонентны ты видимо не слышал. В любой уважающей себя продуктовой галере тебя с такими историями отправят чистить древнее легаси вилкой и к нормальной разработке близко не подпустят. А ты еще без стеснения такое втираешь тут, пздц.

Я искренне непонимай, откуда вы блядь лезете постоянно такие пещерные? Из 2005го?
Аноним 14/04/21 Срд 20:18:39 1996252999
>>1996193
Спасибо за развернутый ответ)
>Не надо смотреть, кто чем занимается.
Не могу, у меня культ лучших практик головного мозга.
Аноним 14/04/21 Срд 20:25:53 19962611000
>>1996240
>проецируй его на всю индустрию
Ты сейчас сам проецируешь свой подход на всех остальных. Кто сказал, что подход помойной галеры на пару сотен сотрудников есть смысл использовать вообще везде?

>плз
Зумер, спок.
Аноним 14/04/21 Срд 20:36:25 19962721001
>>1996252
>Не могу, у меня культ лучших практик головного мозга.
Тогда лучше закрой этот тред навсегда. Тут такие best practices советуют каждый день, что понять где жирнота, а где необучаемость тяжело.
>>1996261
Где ты видел фулстак-макакенов, кроме веб студий сейчас? Или вебстудии у нас на острие индустрии для тебя? Разделение фронтенда и бэкенда произошло еще в начале десятых, а ты неможешь этого принять и живешь в манямирке, еще и сюда свою шизофазию постишь. Не хочешь учиться и развиваться - смирись и оставайся на обочине, это айти 2020х, дедушка.
Аноним 14/04/21 Срд 20:40:06 19962741002
Что скажете за использование Vue не для SPA?
Например, там, кнопку лайка на нем сделать, добавления в избранное, прогрузку комментариев и т.д.
Вью вроде как намного меньше весит чем тот же jQuery, легко интегрируется в проект на Симфони и Ларе. Прикольная концепция хранения скриптов и стилей в одном файле с компонентом.
Читать и расширять vue-компонент намного легче, чем лапшу на jQuery. Могу тут до бесконечности продолжать, но это всё лишь мои фантазии, а мне интересно ваше мнение послушать.
Покрывает ли Vue достаточное количество случаев, чтобы использовать его вместо jQuery? Видели ли где-то такое на проде?
Аноним 14/04/21 Срд 20:47:14 19962831003
>>1993590
хуйня вопрос, оставляй контакты.

>>1994448
>больше
а больше это сколько, няша?
Аноним 14/04/21 Срд 20:51:15 19962901004
>>1996219
>Это плохой подход, если форм много, так как при добавлении поля в форму надо лезть в фронтенд и там руками добавлять инпуты.
Так это вообще можно сказать про любой запрос к API, лол. Добавилось/поменялось какое-то новое поле в ответе — надо лезть во фронт и менять его логику. Только плюсов реактивного SPA это не перекрывает. И тебя как бэкендера вообще не должно волновать, чо там на фронте, даёшь им документацию к API на каком-нибудь Swagger и пусть там ебутся как хотят :)
Аноним 14/04/21 Срд 20:53:12 19962931005
>>1996274
Звучит как какой-то костыль. Если у тебя сложный фронт и тебе уже не хватает JQuery, то стоит задуматься, чтобы сделать полноценный фронт на SPA-фреймворке.
Аноним 14/04/21 Срд 21:01:55 19962971006
>>1996240

Ты пишешь какую-то ерунду. Чтобы провалидировать форму, мы создаем ее описание на стороне сервера. Дальше, нам надо отобразить ее на клиенте. Это можно сделать двумя способами: а) получить с сервера описание формы (которое там уже есть) или б) повторно описать форму руками на стороне клиента. Вариант б) предполагает двойную работу, и требует обновлять обе версии формы (на сервере и на клиенте) при изменениях, в то время как вариант а) не требует что-то менять на клиенте.

При чем тут какие-то "мои" "микропроекты" и какие-то мифические "best practices", я не понял.
Аноним 14/04/21 Срд 21:11:17 19963131007
>>1996274

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

Подгрузка комментариев с сервера на jQuery займет строк 20, и это с обработкой ошибок (а делают ли правильно обработку ошибок все, кто тут советует везде пихать SPA? Уверен, что нет, ведь в best practices об этом забыли написать).

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

>>1996290

Если где-то так делают, это не значит, что это правильно. Когда форм много, гораздо разумнее настроить автоматическое отображение форм на основе конфигурации с сервера (кстати, ее логично не запрашивать аяксом, а вшить в фронтенд-приложение).
Аноним 14/04/21 Срд 21:21:27 19963261008
Пасаны, вот я хочу проверить если ли слово в строке с помощью strstr(), а как проверить несколько слов без запуска цикла? Есть функция в которую можно передать строку и проверить в ней наличие нескольких слов? Здесь подойдёт только preg_match()?
Аноним 14/04/21 Срд 21:51:24 19963601009
>>1995132
у меня была обратная история: 3 месяца я не писал ничего, кроме дешевых парсеров с досок объявлений.

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

Я спросил - "А чего так, неужто я так хорош". Сказали, мидлы слишком дороги, я в самый раз. Полгода охуевал с симфони
Аноним 14/04/21 Срд 21:53:26 19963621010
>>1996313
>Вью нужен там, где есть сложный интерактивный фронтенд (построитель чего-нибудь, редактор чего-нибудь), или там, где нужно сделать что-то похожее на приложение (например, чтобы была работа при перебоях со связью). В блоге или интернет-магазине он даром не нужен, на мой взгляд (усложняет разработку, утяжеляет фронтенд, замедляет рендеринг сайта).
В этом параграфе написан полный бред.
>Вью нужен там, где есть сложный интерактивный фронтенд
SPA-фреймворки убирают необходимость манипуляций с DOM, автоматически обновляя его при изменении состояния приложения, и нет, это полезно не только в охуенно сложных приложениях.
>или там, где нужно сделать что-то похожее на приложение
То есть 90% современных проектов? Потому что уже давно трендом в UX является предоставление пользователю опыта, близкого к использованию нативных приложений.
>например, чтобы была работа при перебоях со связью
То есть, опять же, подавляющее большинство современных проектов, потому что сейчас бОльшая часть трафика веб-приложений идёт с мобилок, где со стабильностью связи всё очень не очень. Конечно, обеспечение полноценной работы в оффлайне — это довольно редкий кейс, но вот показать юзеру надпись "Вы оффлайн" и отображать данные из последнего состояния приложения при навигации — кейс вполне себе актуальный.
>усложняет разработку
Усложняет разработку только на начальном этапе, потому что тебе придётся учить новую технологию. Как только освоишься, то ничего оно не усложняет, наоборот, поддерживать и разрабатывать SPA намного проще, чем лапшу на JQuery, потому что там есть устоявшаяся архитектура, паттерны и best practices.
>утяжеляет фронтенд, замедляет рендеринг сайта
Ты упускаешь охуенно важную деталь: это актуально только при первой загрузке приложения либо при выпуске обновления. Если у тебя на серваке нормально настроено кэширование или если ты используешь service worker, то при дальнейших загрузках приложение будет загружаться очень быстро. Также есть разбиение приложения на чанки и ленивая подгрузка модулей, а ещё есть SSR.
Аноним 14/04/21 Срд 21:57:01 19963681011
>>1996313
>Если где-то так делают, это не значит, что это правильно. Когда форм много, гораздо разумнее настроить автоматическое отображение форм на основе конфигурации с сервера (кстати, ее логично не запрашивать аяксом, а вшить в фронтенд-приложение).
Бумер, ты реально в 2006м застрял? Сейчас фронт это отдельное приложение в отдельном репозитории, которое деплоится на отдельный сервак отдельным CI/CD пайплайном. Ну какое нахуй вшитие конфига с бэка на фронт? Уже давно в тренде полное разделение бэка и фронта. Мухи — отдельно, котлеты — отдельно.
Аноним 14/04/21 Срд 22:54:15 19964081012
>>1995343
>Так или иначе, сейчас почти весь современный веб на реактивных фреймворках.
Развек что в твоем манямирке

Ты вопрос нормально задай. Как вью конфликтует с формами симфони?
Аноним 14/04/21 Срд 23:37:02 19964301013
>>1996408
Ты на тролля похож, смысл тебе отдельно разжевывать? Хотя ладно:
>Развек что в твоем манямирке
Читай выше, магазины на CMSках к современному вебу я не отношу.
>Ты вопрос нормально задай. Как вью конфликтует с формами симфони?
Ну видишь, после моего вопроса тут у одного молодого человека с не очень молодым возникла дискуссия насчет разных подходов к решению этой проблемы.
А ты похоже самый умный, раз никакой проблемы не видишь и всё очевидно. Может быть поделишься мудростью? Или я это все зря пишу?
Аноним 14/04/21 Срд 23:51:06 19964401014
>>1996430
Зачем ты ему пытаешься доказывать что то? Там чел кроме любимой цмсочки ничего не видел уже лет десять.
jQuery блять в 2021, jQuery карл! Этот объёбыш даже про современный js не слышал, о чем ты ему рассказываешь. CI какой то, пайплайны блять, с таким же успехом можешь еще про контейнеризацию и событийную модель своей бабушке рассказать.
Я не удивлюсь, если он еще и процедурно свое говно хуячит и нахваливает.
Аноним 15/04/21 Чтв 00:39:09 19964641015
>>1996430
>Ты на тролля похож, смысл тебе отдельно разжевывать?
Мне тебя и твоего дружка искренне жаль, честно. Зашел глянуть как тред поживает, а тут такое.

> Хотя ладно:
Ладно что? Ты либо вопрос нормально формулируешь - либо нахуй идешь. Так не только на дваче, привыкай

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

>А ты похоже самый умный, раз никакой проблемы не видишь и всё очевидно. Может быть поделишься мудростью? Или я это все зря пишу?
Проблемы запихнуть вью в твиг? не вижу. Как это мне мешает выводить формы? Ты хочешь формы кастомизировать? Это делается стилями и жсом. Что еще тебе нужно? Я не вижу проблемы от слова совсем. Если у тебя спа-админка на реакте, о каких симфони формах речь может идти?

>>1996440
Клоун
Аноним 15/04/21 Чтв 00:49:56 19964681016
>>1996464
>Мне тебя и твоего дружка искренне жаль
Еще и уровень дискусии прямиком из одноклассников.
>Мне ебать что ты там думаешь
Ну бывает, тебя просто пару раз мокнули в твою же неграмотность, чтобы другие аноны всерьез твои шизодные высеры не воспринимали.
> и идите оба нахуй отсюда
Нихуя начальник двача разбушевался.

Дед, проснись, у тебя джиквери из вордпреса опять протекает, иди чини.
Аноним 15/04/21 Чтв 01:13:33 19964791017
>>1996464
Пиздец у тебя мозги отсохли, завязывай лучше с CMSками, это действительно приводит к деградации.
Ощущение что ты вообще вопрос не читал и сам с собой разговариваешь сейчас. Я прямо спросил, отдают ли люди форму с бека на фронт и каким образом.
Два нормальных человека вопрос поняли и начали обсуждать плюсы и минусы данных подходов. А тут ты, словно король заваливаешься, и выдаешь перл
>Проблемы запихнуть вью в твиг? не вижу. Как это мне мешает выводить формы? Ты хочешь формы кастомизировать? Это делается стилями и жсом. Что еще тебе нужно? Я не вижу проблемы от слова совсем.
Просто пиздец, у меня слов нету. Я уже молчу о том, что ты вопрос мой не понял. Но какой нахуй TWIG вообще? Ты знаешь хоть что такое Vue? Ты знаешь что такое SPA?
Да ты вообще похоже даже представить себе не можешь, что фронт и бэк могут быть разделены, это за гранью твоего понимания.

Пиздец, мне плохо уже, нахуй я в этот ебучий пхп подался? Предупреждали же меня не раз.
Таких как ты ведь тысячи, у вас мозги от маразма поплыли, вы уже не понимаете какой на дворе год и не помните как вас зовут, зато ваши закостенелые пальчики еще как-то по инерции пишут хоть и плохой, но как-то работающий код.
Я просто боюсь, что когда в моем городе появится вакансия для джуна на симфони а таких уже пол года не было, я туда приду и встречу в команде таких же идиотов как ты, которые будут меня жизни учить.
Конечно же сразу уволюсь и буду еще пол года ждать следующую.
Аноним 15/04/21 Чтв 03:07:21 19965011018
>>1996464
Чувак, я с этим сталкиваюсь не у блоггеров на Ютубе, я с этим сталкиваюсь на работе постоянно. Я хз, может мне повезло попасть в компанию, в которой это всё реально применяется, но я так не думаю. Открой любую вакансию на фронтера и я почти уверен, что в требованиях ты найдёшь там вовсе не JQuery, а React / Angular / Vue, какой-нибудь стейт менеджер и опыт работы с RESTful API / GraphQL. Конечно, есть вероятность, что они все врут и на самом деле тебя посадят ковырять говно на JQuery, но что-то мне подсказывает, что это не так.
Аноним 15/04/21 Чтв 03:12:30 19965031019
Не понимаю, почему бумер так копротивляется за формы и шаблонизаторы? С точки зрения бэка это же наоборот круто, когда ты просто отдаёшь фронтеру API и тебе вообще не надо с фронтом ебаться, тупо чиллишь.
Аноним 15/04/21 Чтв 04:38:08 19965151020
>>1996503
Видимо когда десяток лет клепаешь шаблонную хуйню - мозг атрофируется и перестает воспринимать новую информацию. Таких и называют веб-макаками и негативное отношение комьюнити к вебу, пыхе и джсу сформировалось на фоне именно таких формошлепов.
15/04/21 Чтв 07:34:36 19965611021
>>1990077
PHP будет актуален, и для РАБоты это заебись

Но как первый язык, конечно, печальный вариант.
Если нужны прям настоящие знания -- начинай с C.
Если только прикладные для работы -- бери РНР и не парься.
15/04/21 Чтв 07:40:03 19965671022
>>1993589
>теснить даже яву и си шарп на их поле.
лол, с такой скоростью работы этого точно не произойдёт

но и производительность растёт, посмотрим-с
Аноним 15/04/21 Чтв 10:04:51 19966221023
Аноним 15/04/21 Чтв 10:26:55 19966421024
>>1996479
>Я прямо спросил, отдают ли люди форму с бека на фронт и каким образом.
Отдавать форму с бека для спа на реакте? Чёт даже не смешно уже

>Пиздец у тебя мозги отсохли, завязывай лучше с CMSками
При чем тут cms. С чего ты думаешь что я с ними работаю? Ты правда ещё не понял, что с двумя разными людьми общаешься? Пиздец развелось вас

>ты знаешь хоть что такое Vue? Ты знаешь что такое SPA?
Я то знаю и работаю с этим, а вот у тебя, видимо, провал в этом. С каких пор любой приложение с использованием vue должно быть spa? Это тебе кто такое сказал, или где это написано? Если это спа, то как и для чего тебе формы с бека отдавать. Пойди в жс тред и спроси у ребят, которые на реакте работают - как им такая идея.

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

Я весь тред не читал, но заходит ли Оп? И тот ли ОП это?
Аноним 15/04/21 Чтв 11:26:10 19967181025
>>1996642
>Вокруг одни семены, а там, где обосрался - это не я постил
Ебать маневры.
Аноним 15/04/21 Чтв 11:36:46 19967201026
>>1996718
По тредам пройдись, расскажи анонам про контейнеризайию и ci. Клоун малолетний
Аноним 15/04/21 Чтв 11:40:36 19967281027
>>1996283
>а больше это сколько
Неебу - из описания задачи мало конкретной информации. Что за модули? На сайт какой-то или что? Интерфейс нужен или нет? Ещё пачка уточняющих вопросов по ходу дела.
Никакой кастомный код не стоит 20$ - 1500 рублей. Это цена одной копии плагина, который продают сотнями штук.
Аноним 15/04/21 Чтв 11:58:45 19967501028
>>1996360
>позвонили, позвали в относительно крупный проект, приложение для таксы. На Симфони нахуй, хотя я даже Yii не трогал.
Мне тоже пишут такие, но там нужны мидлы и синьоры на тот стек, где я не работал почти. Последнее предложение даже ножкой топнули и требуют ответа, но там требуют переезда и я не готов внезапно сорваться куда-то в даль пока что.
Аноним 15/04/21 Чтв 12:14:54 19967711029
>>1996501
>любую вакансию на фронтера и я почти уверен, что в требованиях ты найдёшь там вовсе не JQuery, а React / Angular / Vue, какой-нибудь стейт менеджер и опыт работы с RESTful API / GraphQL.
jq не для фронтендеров, а для бекендеров, которых посадили ажакс на фронте дёргать и шаблончики натягивать. Действительно - требовать жиквери от фронтендера это ебануто и слишком просто, это уровень веб-мастера из прошлого десятилетия, если человек кроме этого ничего не знает.
Аноним 15/04/21 Чтв 12:17:00 19967761030
>>1996503
Просто тупых хипстеров почти нигде не любят. Дело не в технологиях, а их бездумном использовании без оглядкина целесообразность.
Ты - тупой хипстер от фронтенда.
Аноним 15/04/21 Чтв 12:29:52 19967871031
Опять срач какой-то долбоёб развёл.
Аноним 15/04/21 Чтв 12:46:22 19967931032
>>1996787
Ты старый пердун-бумер. KEKW. Не шаришь за ci, контенеризацию, паплайны. GraphQl.Тебе о чем нибудь говорит? Нет, конечно. Вы старые никчемные говнокодеры. Я - умный и прогрессивный. Смотрите еще че могу: синглтон, тайп скрипт, кубернетс, дженкинс. Видали? Так че, как там симфони формы моему ручному 200k/nansec фронту отдавать? А то он на ангуляре пишет (мертвый фреймворк, вообще все мои хоуми юзают vue.), сидит чета дрочит, мямлит - не выходит у него, в общем. Ну я ему и говорю: "Забирай свои формы и сьебывай. А я пойду на дваче в пхп треде спрошу, как их кастомизировать на этих ваших жс фреймворках". В современном мире, вообще то, все сайты так работают. Это у вас в ваших отстойниках цмс одни на жквери лол! И вообще жквери это так, прошлый век. Кореш у меня есть один - серьезный фронтендер, даже тайпскрипт знает. Помню рассказывал он мне, что взяли его стажироваться в одну галеру, а там проект - ну пиздец 19век. Админка, которой 15 человек пользуются, да и на шиблонизаторе ебаном, прикиньте? Ну типа тоже js,css, html, местами компоненты вью, но это же не spa-ебана рот. Ну он дело в свои руки взял, прошелся с вопросом о переписывания админки на spa по всем: от местных джунов до пмов других проектов. Ну его короче выгнали вы поняли да? Тупые старые пердуны-бумеры-цмсники не захотели переписывать админу, которой 1.5 года на новое современное спа приложение, я ебал почему они такие упертые?
Аноним 15/04/21 Чтв 12:58:20 19967981033
>>1996479
>Пиздец, мне плохо уже, нахуй я в этот ебучий пхп подался? Предупреждали же меня не раз.
Да, зря.
На скольких проектах не был, везде либо олдскульный фулстек на пхп+жиквери с фреймворками офк, либо то же самое, но с разговорами и тщетными попытками перехода на SPA.
Аноним 15/04/21 Чтв 13:02:24 19968031034
А я вот всё никак не возьмусь за фулстак симфони+реакт петик писать... Хочется потрогать современный веб, а не жить в прошлом десятилетии

мимо >>1996798
Аноним 15/04/21 Чтв 13:38:53 19968451035
>>1996793
Помню когда вкатывался только, то тоже так же себе всё представлял - всё будет модно-современно, весело, чисто и красиво. А когда с реальными проектами поработал - теми, которые людям деньги приносят, и порой неплохие, то сразу эта дурь из головы вышла. Неофитов на этом легко спалить - они из детских туториалов не выросли ещё и не видели некоторого дерьма, и поэтому прибывают в стране радуги и поей. Почти как таксисты, когда думают, что программисты за нажимание кнопок деньги получают.
Аноним 15/04/21 Чтв 13:43:28 19968491036
>>1996803
У меня была админка на реакте. Кончилось жуткой хуйней и жопоеблей.

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

Реакт - это не волшебный мир розовых единорогов, это достаточно ёбнутый фреймворк с которым нужен крайне продвинутый опыт разработки. Если ты крутой опытный разработчик, детально представляющий себе бизнес-процесс задач и паттерны проектирования, то он принесет тебе больше пользы чем вреда.
Вкатыш, научившийся делать на нем тудушки, со 100% гарантией сотворит на нем ад который придется потом выкидывать целиком.
Аноним 15/04/21 Чтв 13:46:10 19968541037
>>1996845
Хз, я начал работать с 2019 года и сам лично никогда с шаблонизаторами не сталкивался даже, кроме случаев, когда надо было с бэка посылать отформатированный email. На моей памяти, у нас в компании было только 2 или 3 проекта, где делали "по старинке", во всех остальных проектах с клиентской частью бэк давал REST API, фронт был SPA. Единственное плохое с точки зрения технологий, с чем я лично сталкивался, это SOAP-сервисы в паре проектов.
Аноним 15/04/21 Чтв 13:59:30 19968761038
>>1996849
Вангую, ты писал логику прям в компонентах, поэтому у тебя всё и посыпалось. Надо использовать стейт-менеджер (я, например, люблю MobX) и всю логику выносить туда, а копмоненты делать тупыми.
15/04/21 Чтв 14:13:03 19969011039
>>1996479
всем положить на твои петушиные маняфантазии и дроч на %библиотекинейм%, бизнес-заказчику нужен рабочий продукт за приемлемую цену и в кратчайшие сроки
Аноним 15/04/21 Чтв 14:16:44 19969041040
>>1996849
Какой стек был на фронте помимо реакта?
Аноним 15/04/21 Чтв 14:19:57 19969081041
Как же приятно наблюдать, за сгоранием бумеродаунов итт. Вкиньте им еще плз, пока не разбежались.
Аноним 15/04/21 Чтв 14:27:59 19969191042
>>1996901
>Ашоту нужен магазинчик за 30к, ты не панимаешь, я говно ем и ты ешь, хули ты захотел по-нормальному то работать?
Аноним 15/04/21 Чтв 15:06:06 19969801043
>>1996919
>Ашоту нужен магазинчик за 30к
Даже для битрикса похоже на сказку.
Больше поверю в какой-нибудь конструктор магазинов, который за 30к тебе только развернут, а всякие доработки и поддержки пойдут отдельным чеком
Аноним 15/04/21 Чтв 15:11:07 19969911044
>>1996362

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

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

Вот пример: показать первые 10 комментариев и сделать кнопку "показать следующие". Здесь выгоднее рендерить комментарии на сервере и подгружать их через JQuery (или его облегченный аналог). Это будет 20 строк на jQuery. При этом страница будет загружаться уже с отрендеренными первыми комментариями. Просто и удобно. Ты можешь при рендере шаблона вызывать вспомогательные функции из серверного кода. В то время как с фронтенд-фреймворком тебе надо будет переносить шаблоны на клиента, переносить все вспомогательные функции на клиента, загружать огромный бандл JS кода, делать аякс-запросы, чтобы отобразить первые комментарии. С Vue ты потратишь больше труда и получишь более тяжелый и медленный сайт.

Другой пример: форма, где при выборе опции надо показать/скрыть часть полей, сделать аякс-валидацию по мере заполнения. Опять же, решение на jQuery здесь более простое. Так как на сервере форму может рендерить фреймворк, а на клиенте пришлось бы ее руками составлять из элементов и удваивать объем работы.

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

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

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

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

> это актуально только при первой загрузке приложения либо при выпуске обновления.

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

> если ты используешь service worker,

Это одна из самых уродливых и кривых фронтенд-технологий. Ради кеширования тратить большой объем памяти на отдельный постоянно запущенный JS-процесс.

> есть SSR.

Это вторая уродливая и кривая технология. Как ты сделаешь SSR, если разным пользователям надо показывать разные страницы? Например, в интернет-магазине пользователю показывают стоимость и сроки доставки в зависимости от его города, выбранной валюты. SSR это нерабочая кривая фигня.
Аноним 15/04/21 Чтв 15:17:32 19970061045
С чего начинаете разработку пета?
Сначала пишете тз, продумываете архитектуру, накидываете мокап?
Или тупо херачите, что получается?
Аноним 15/04/21 Чтв 15:23:02 19970191046
>>1996368

Выше я уже все расписал: >>1996297 . Либо ты автоматически конвертируешь и встраиваешь формы с сервера в фронтенд, либо ты делаешь двойной объем работы.

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

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

>>1996440

Я еще и к атрибутам вроде onlick нормально отношусь, как тебе такое?

>>1996479

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

Что касается "разделения фронта и бека", я когда-то генерировал классы-модели в JS на основе классов в PHP. Так как у меня был редактор кое-чего и мне надо было работать с документом и на сервере и на клиенте. Чтобы с ним работать, надо было его представить в виде дерева объектов. Но не хотелось делать двойную работу и делать по две версии каждого класса (в JS и в PHP). Этот подход упростил мне жизнь.



Аноним 15/04/21 Чтв 15:35:08 19970311047
Раз уж зашла речь про фронтенд, давайте еще объективно поговорим про их убогие технологии (или их неправильное использование). Какое-то время у фронтендщиков модно было использовать LESS и подобные препроцессоры. В них они пишут такой код:

.product {
&__price {
color: red;
}
}

Который компилируется в такой CSS:

.product__price { color: red }

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

Поэтому я очень скептически отношусь к так называемым "фронтенд-специалистам" и их "best practices". Они пишут плохой код и не видят его недостатки.
Аноним 15/04/21 Чтв 15:37:01 19970341048
>>1996876
Я её оттуда вытаскивал, лол. Делал не я, а какой-то хуй который так-же лечил про SPA, и съебался раньше чем все распидорасило. С тех пор у меня глаз и дергается при рассказах о том как это заебись.

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

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

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

>>1996904
Из крупного - редукс.
Аноним 15/04/21 Чтв 15:40:57 19970401049
>>1997034
Та как бэ принцип "нормально делай - нормально будет" везде применим.
Сам же пишешь, что на фронте говнокод был.
Бек на пыхе тут принципиально мало чем отличается, разве что количеством вкатунов
Аноним 15/04/21 Чтв 16:00:44 19970641050
>>1997031
>если мы захотим поиском по файлам найти, где задан идентификатор product__price, то мы ничего не найдем

Аргумент уровня б. Когда так пишут, то ОБЫЧНО есть конвенция что это лежит в файле _product.scss или чем-то подобном, поэтому ты не ищешь по всему проекту, ты знаешь в каком хотя бы файле это находится. Конечно, если ребята работали на отъебись, то будешь два дня искать где поправить, но это не значит сам подход плохой.

>>1996991
>Это вторая уродливая и кривая технология. Как ты сделаешь SSR, если разным пользователям надо показывать разные страницы? Например, в интернет-магазине пользователю показывают стоимость и сроки доставки в зависимости от его города, выбранной валюты. SSR это нерабочая кривая фигня.

Абсолютно так же, как это делается и на пхп, сср фронтенд фреймворков "уродливым" можно назвать потому что иногда нужно понимать где ты находишься, на клиенте или сервере, получается такой гибридный ком кода.
15/04/21 Чтв 18:38:10 19972741051
дауны задроты ебаные лучше тред перекатите или я это сделаю бещ вашей даунской шапки
Аноним 15/04/21 Чтв 18:38:13 19972751052
>>1996991
>SSR это нерабочая кривая фигня.
Двачую. Сами сделали проблему и сами же её решили технологически-всратым велосипедом. Всё ради SPA даже тогда, когда оно не нужно и создаёт проблемы.
Аноним 15/04/21 Чтв 18:51:02 19972871053
>>1997006
Всегда сперва проектируется. Херачить что получается это детский садик - штаны на лямках.
Вернее даже - сперва неделю ходишь задумчивый и смотришь аналоги, выписывая идеи себе. Потом следующую неделю прикидываешь общее приложение и пилишь архитектуру нормальными словами технический проект или как-то так, на этом этапе всплывают почти все подводные, которые не заметил. Ну а когда всё расписано, то на код положить любая макака сможет с закрытыми глазами.
Аноним 15/04/21 Чтв 19:35:00 19973301054
>>1996642
>Отдавать форму с бека для спа на реакте? Чёт даже не смешно уже
> Если это спа, то как и для чего тебе формы с бека отдавать.
Каком реакте, дед? Ты опять сам с собой разговаривать начинаешь, таблетки выпей
Ну ведь ОП прямо здесь в треде отстаивает такую точку зрения, что это все дело нужно автоматизировать при большом количестве форм.
А индусы на стакере советуют просто форму отрендеренную отдавать. Я решил спросить на любом анимешном форуме мнения людей.
Почему я это всё повторяю специально для тебя, человека неспособного прочитать вопрос, зато громче всех смердящего?
>Ты правда ещё не понял, что с двумя разными людьми общаешься? Пиздец развелось вас
Это ты похоже не понял, что с двумя разными людьми общаешься. Что за бред шизоидный?
>С каких пор любой приложение с использованием vue должно быть spa? Это тебе кто такое сказал, или где это написано?
Не должно. Но когда голова твоя отойдет от пивасика, почитай хоть раз мой вопрос, не позорься. А пока что, пока ты не в состоянии, еще раз разжую:
> Вот я ее прописал на бэкенде, отправил в twig, в шаблоне написал {{ form(form) }} и все, у меня все готово.
> А что люди делают если весь рендеринг на джаваскрипте?
Что ты отвечаешь?
>Да засунь весь этот рендеринг на джаваскрипте в твиг, тю ебать, дурачок.
И после этого ты спрашиваешь, почему я думаю что ты работаешь с CMSками?
>Не напрягайся ты так, лучше на манерами поработай
Ты свои то посты перечитай, неадекват.
>>1997019
>Ты написал какую-то фигню. "фронт и бек разделены" это не абсолютная истина, а один из возможных подходов.
>То, что кто-то где-то разделяет фронт и бек и потом делает в два раза больше работы при выводе формы, не значит, что остальные должны так же делать.
Слушай, ну я в вопросе написал про "что люди делают если весь рендеринг на джаваскрипте". Это уже не вывод шаблонов в твиге, чего персонаж, которому я ответил выше, не понимает.
И про то что это "абсолютная истина" я нигде не писал, возможно ты меня с кем-то спутал.
Наоборот, я полностью поддерживаю твои слова о том, что моднявые технологии даром не нужны, когда заказчику нужно максимально быстро и бюджетно выполнить какой-то сайтец, на который будут заходить по 3 человека в день, без амбиций на дальнейшее расширение и поддержку.
Но зачем мне равняться на худших, если можно на лучших? Чем плоха продуктовая компания, "сорящая деньгами"? Это мечта любого кодера, ты разве не в такой работаешь?
Аноним 15/04/21 Чтв 19:44:40 19973381055
Читаешь тред и вахуе с этих гнилозавров. Пишут на всратом языке, который славен своими жуткими практиками, но вроде начинают появлятся адекватные инструменты, язык понемногу выходит на рынок серьезной разработки, веб становится живым и интреактивным, зарплаты на этом растут и все вроде хорошо. Но заходишь сюда и видишь типичного пыхера из мемасов просто. Визгливый, токсичный и неспособный выучить ничего больше того, что узнал в 2010 году, при этом с громким воем отстаивающий свою отсталость, как чтото хорошее, но ради чего? Выпендрится перед нубами на анонимном форуме для девочек?
Аноним 15/04/21 Чтв 20:17:47 19973731056
1618507131812.png 121Кб, 800x450
800x450
>>1997338
Чаю. Они же когда-то были молодыми и шутливыми, доказывали другим дедам о преимуществах ООП, MVC, фреймворков и т.д., на что те деды плевались и отвечали:
>Мань, то что ты начиталась умных книжек про всякие ООП не значит, что бизнесу это нужно. Пойми, они в твой код заглядывать не будут, бизнесу нужен только результат.
>Процедурный стиль выигрывает по всем параметрам. В нем быстрее писать, вот "хуйня_нейм" у меня в процедурном стиле занимает 20 строчек. Ты бы эту же вещь написал в четырех классах, миллениал ебучий.
>Эти же 20 строчек легче читать, и они все в одном файле, что немаловажно. Не нужно по классам бегать, искать кто кого вызывает, кто с кем общается, всё как на ладони. Зачем утяжеление на ровном месте?
>Вот тебе бенчмарк: вызов глобальной функции и вызов метода класса. Вы же просто вставляете палки себе в колеса, делая код более медленным.
>То что кто-то выводит html не через echo, а как шаблон, еще не значит что так должны делать все.
Аноним 15/04/21 Чтв 20:43:11 19973941057
>>1997338
Просто никто не собирается подмахивать фронтенд-макакам, которые кроме SPA ничего не знают и знать не хотят. Такая-то детская маняпопытка всех построить и оправдать своё существование.
Аноним 15/04/21 Чтв 21:12:38 19974321058
>>1997394
У тебя просто горит жопец, от того что у так называемых фронтед-макак зарплата больше, а за твой говнокод в 2021 не хотят платить столько же.
Sad but true.
Аноним 15/04/21 Чтв 21:21:36 19974341059
>>1997432
У тебя так вообще никакой зарплаты нет, маня.
Аноним 15/04/21 Чтв 21:32:13 19974441060
Аноним 15/04/21 Чтв 22:16:50 19974641061
>>1996362
>SPA-фреймворки убирают необходимость манипуляций с DOM, автоматически обновляя его при изменении состояния приложения, и нет, это полезно не только в охуенно сложных приложениях.

Вот тут дико дваждую, васянил нативный JS для формы в которой много всяких AJAX списков + некоторое количество условно появляющихся полей. Как же меня заебала возня с DOM это пиздец просто. За неделю освоил вью по верхам - задышал просто пиздец как по другому. Стало приятно писать клиентские формы и логику в них.
Аноним 15/04/21 Чтв 22:26:11 19974761062
>>1997464
пс вообще не понимаю прям батхерта от изучения react|angular|vue - что бы по верхам хрюкнуть - неделя, и вперед.
Мне вью реально жизнь облегчил. И что важнее- я начал удовольствие от дрочки с написанием клиента получать.
Аноним 15/04/21 Чтв 23:20:46 19975101063
>>1997476
Просто ты либо молодой, либо не сидел всю жизнь на жопе без амбиций в региональной веб-студии, выполняя ту самую работу и смотря сериалы по выходным, а шевелил мозгами.
Те, кто бугуртят от необходимости изучения новых технологий и оправдывают это НИНУЖНОСТЬЮ - это просто несчастные люди у которых атрофировались соответственные участки мозга.
Да, такое не только у заводских рабочих всяких бывает, сам в ахуе.
Аноним 15/04/21 Чтв 23:26:43 19975211064
>>1997330
>Каком реакте, дед? Ты опять сам с собой разговаривать начинаешь, таблетки выпей
Фреймворк такой, почитай на досуге.
>Ну ведь ОП прямо здесь в треде отстаивает такую точку зрения, что это все дело нужно автоматизировать при большом количестве форм.
>гррряяя вы старые и не прогрессивные, в моем современном мире все пишут спа на жс фреймворках
>фронт не может написать форму на фреймворк-нейм, давайте будет отдавать ее с бека?
>ой а как он с ней работать то будет(((
Ну че, как? Сходил в жс-тред как я советовал? Сколько человек тебя послали нахуй?

>Пиздец развелось ВАС
>Это ты похоже не понял, что с двумя разными людьми общаешься
Ок, клоун

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

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

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

>Ты свои то посты перечитай, неадекват.
Вполне адекватное послание тебя нахуй. Любой уважающий себя и своих коллег человек так поступит. Анскильный, необразованный, невоспитанный еблан без опыта, залетевший на борду и начавший раскидывать на борде говно аля
"
ну короче вы все цмс-говнокодеры, сейчас в современном мире все на спа, все юзер интерфейсы рендерятся на жаваскрипте епта. Шаблонизаторы прошлое столетие, сейчас они нахуй никому не нужны. Что? Отдавать приложение отрендеренное на жсе с сервера? Лооол, кек, лмао. Я же говорил что вы цмс-говнокодеры, да? Пиздец убогие. А че думаете, если короче нанять фронтенд-макаку, посадить его писать приложение на реакт/вью/ангуляр (хотя реакт и ангуляр ты видимо не выкупаешь что такое, блогер-ютюбер рассказал только про обоссаный вью, да?), а короче формы (пиздец рофл) мы будем отдавать с сервера. Ну типа автоматизация. Мне так индусы на стаковерфлоу написали. А вот писать код на том же vue и отдавать его отрендеренным с сервера можете только вы - ебаные цмс бумеры-деды (22y.o)

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

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


>>1997476
> изучения react|angular|vue
А как же разделение ответственности. Ах ты старый цмс-разработчик с 2010 года. Сам что ли будешь вот это все трогать? Шок, эти вебмастера вонючие как же меня от вас тошнит. Вылечить бы вас
>И что важнее- я начал удовольствие от дрочки с написанием клиента получать.
Нахуя, если можно написать спа на вью, а потом с сервера html код отдавать и рендерить его в этом же вью? Ну не гениально ли? Почитай как нибудь, indus.stackoverflow
Аноним 15/04/21 Чтв 23:44:34 19975471065
>>1997476
>vue
Норм тема, прекрасно мешается с jquery, применяется в конкретных местах и здорово облегчает жизнь там где надо
>angular
не сталкивался с проектом, где бы он был прям так оправдан, обычно это оверкилл, но он неплохо форсит архитектуру диким фронт макакам.
>react
Спидозное говно говна. Самое популярное ко всему прочему. 1001 способ сделать всё через жопу, практики, меняющиеся каждые полгода (как раз когда сойбои выясняют, что залупа с которой они бегали полгода назад - кусок говна).
Аноним 15/04/21 Чтв 23:52:56 19975511066
>>1997521

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

Кстати, генерация форм нужна не только когда хочется избежать двойной работы. Бывает, что формы вообще генерируются динамически (а не описаны где-то в коде). Пример: бизнес-процессы. Пользователь создает новый бизнес-процесс (закупка офисных принадлежностей), описывает какие у него есть свойства (товар, цена), какого они типа и где-то должна появиться форма с соответствующими полями.
Аноним 16/04/21 Птн 00:08:03 19975601067
>>1997551
В чем проблема сделать это на вью?
Аноним 16/04/21 Птн 01:17:23 19976051068
>>1997521
Нихуя тебя порвало, иди валерьяночки выпей. Выдал просто поток сознания несвязный, тут нету даже что цитировать чтобы тебя, собачку глупую, мордой в говно макнуть, ты сам себя в говно макнул глубже некуда.
Мой тебе совет: если ты не умеешь отличать людей в потоке сообщений без аватарок и никнеймов, лучше не сиди на дваче. Ну очень убого смотришься.
Ты даже в этом посте под меня приписал посты половины треда, при том что я только спросил у людей как они используют формы при условии разделении бэка и фронта, ну и непосредственно с тобой в нескольких постах поигрался.
Наверное тебе так удобнее, из-за того что я заявил о своем сравнительном ньюфажестве. Тут-то появляется что ответить, вместо реальных аргументов можно просто заявить что ты уже два с половиной года интернет магазины на битриксе делаешь, а потому лучше меня не меня во всем смыслишь.
Аноним 16/04/21 Птн 01:40:04 19976221069
>>1997605
Так а с формами то что?
Аноним 16/04/21 Птн 09:31:01 19977001070
>>1997622
А хуй его знает, просто увольняемся с работы когда появляется проект на Vue/Angular/React и ищем нормальную веб-студию без всей этой пидорской хуйни.
Аноним 16/04/21 Птн 09:31:03 19977011071
Вы нахуя деда >>1997521 доводите, ироды? Он сейчас от гнева челюсть выронит же.
Аноним 16/04/21 Птн 09:33:08 19977021072
>>1997510
>Просто ты либо молодой
мне 34
>либо не сидел всю жизнь на жопе без амбиций в региональной веб-студии
Я вообще в студиях не сидел - самозанятый типа + госшарага.
Аноним 16/04/21 Птн 09:41:32 19977081073
>>1997521
Че ты несешь, поехавший? Я в вашем сраче вообще не участвовал.
vue и в меньшей степени реакт ( потому что в нем нет на сколько я понял альтернативы директивам для уже существующего хтмл) изучил для своих нужд пока что на уровне своих нужд за неделю. Доволен.
>>А как же разделение ответственности.
Разделения чего? Разделения куда? Меня тошнило от возни с DOM, ща на вью васяню свои условные пагинаторы и получаю удовольствие от того что на клиенте и бэке пишу приятный для меня код.
Меня не ебут экзистенциальные вопросы нубарей "какой вэб-фреймворк выбрать" с абсолютным не пониманием зачем эти фреймворки вообще нужны.
Аноним 16/04/21 Птн 11:27:48 19978031074
Бля, это ж насколько ебанутым нужно быть чтобы на самоподдуве закатиться в тред бекенда и навязывать свои хипстерские тренды, нихуя толком ещё не сделав либо работая тупорылой однобитной обезьяной на одной технологии.
Ещё токсичность эта зашкаливающая - безработного за версту видать т.к. с таким говном никто работать не будет. Либо возьмут на позицию хуесоса у джунов, откуда эта обида ёбаная.

CMS у него, видите ли, говно и вообще для дидов, а модные-молодёжные все даже сраные визитки на SPA пилят с сотнями эндпоинтов. Сразу видно идиота не умеющего подбирать инструмент под задачу.
Аноним 16/04/21 Птн 12:24:13 19978551075
>>1997622
Еще как вариант нанять макаку, которая умеет кастомные формы делать, а не верстальщика, который выдает себя за фронта

>>1997701
Выронил тебе за щеку, сынок

>>1997510
А кто говорил что js нинужон и все будем писать хуй пойми как? Завтра выпустят новый функциональный вантуз для унитаза - ты им вместо унитаза жопу свою чистить будешь?

>>1997708
>vue и в меньшей степени реакт
А laravel в меньшей степени yii? Попробуй посмотреть что то кроме ролика "vue за час" или "реакт для чайников"

>Разделения чего? Разделения куда?
Пиздец, ты ироничный рофлан над лохами-джунами, которые symfony формы на spa присылают не выкупил?
Аноним 16/04/21 Птн 12:27:54 19978591076
Аноним 16/04/21 Птн 13:25:48 19979371077
У вас опять тред УТОНУЛ.

Какие IDE для ПиЭйчПи-разработчика посоветуете?

PHPStorm - тормознутый
VSCode - тупит с intellisense
Аноним 16/04/21 Птн 13:26:02 19979381078
>>1997803
>>1997855
Дед, ну хватит тебе позориться, все хорошо, и твои cms хорошие и ты умница, они маленькие еще прост, непонимают. Давай, таблеточку выпей и баиньки, а то уже вон ручки трясутся видимо, постов не видишь.
Аноним 16/04/21 Птн 13:33:05 19979431079
>>1997937
Это исключительно вопрос вкуса и привычки.
По количеству всяких свистелок полезных наверное все таки шторм, но подглючивает и обновы корявые часто. Плюс, если разные языки используешь приятно по Intelij идешкам скакать.
В VS можно плагинами вцелом поднастроить и будет не хуже, но при этом стабильнее и легковесней.
Остальное не юзал особо.
Аноним 16/04/21 Птн 13:34:46 19979441080
>>1997943
Вот привыч нащадно к Шторму, но он стал жрать под 90% проца при печати, я и переустанавливал разные версии и на новом проекте пробовал - не помогает.
Поэтому решил свитчнуться в VSCode и теперь страдаю от непривычки.
Аноним 16/04/21 Птн 13:35:34 19979451081
>>1997938
В твоей дурной головушке не умещается осознание, что тебя тут хуесосят больше чем 1 человек?
Вот это манямирок у зумера.
Аноним 16/04/21 Птн 13:36:31 19979481082
>>1997937
>тормознутый
>тупит
Ну пеку тогда поменяй, раз у тебя всё тупит и тормозит.
Аноним 16/04/21 Птн 13:37:33 19979501083
>>1997937
Шторм.
Все остальное говно.
Аноним 16/04/21 Птн 13:38:51 19979521084
Аноним 16/04/21 Птн 13:43:54 19979561085
Не понимаю зачем нужен Сваггер. Ну да, типа, красивенькая документация и всё. По факту оно ничем не отличается от рукописной - зачем везде пердят про автоматическую, если разработчик вынужден поддерживать её вместе с кодом? Реально двойная работа получается - пишешь код для АПИ, а потом то же самое для документации этого АПИ.
Аноним 16/04/21 Птн 13:44:09 19979581086
>>1997944
С памятью кстати ни разу не было проблем, открыто несколько инстансов из их семейки - жрут стабильно вцелом, хотя коллеги иногда жалуются на похожие косяки.
Я пользуюсь VS на ноуте иногда, тоже сначала привыкал долго и плевался. Через месяц +- попривык.
>>1997945
Ты уже реально заебал со своей шизой, иди в срачетред. Я сомневаюсь, что в треде одновременно заспавнилось несколько таких долбоебов.
Аноним 16/04/21 Птн 13:46:58 19979611087
>>1997958
>Я сомневаюсь
Я ж говорю - манямир зумера непобедим.

>иди в срачетред
Иди нахуй, малолетка ограниченная. Это ты сюда пришёл учить нас как приложения писать - сиди и слушай, что тебе умные люди говорят.
Аноним 16/04/21 Птн 13:47:16 19979631088
>>1997956
Ну в первую очередь он нужен там, где большие команды и есть нормальный QA, чтобы не шарить постмановские коллекции и не мучится с их актуальностью. Если у тебя небольшое публичное апи - обычной доки за глаза хватает.
Аноним 16/04/21 Птн 13:47:58 19979651089
>>1997961
Я с тобой ни о чем не спорил, успокойся, ты реально какой то больной.
Аноним 16/04/21 Птн 13:53:21 19979721090
>>1997961
> Пишет индусокал на cms и джиквери в 2021
>Ни учите миня ПРИЛАЖЕНИЯ писать!!
Мань, приложение тут только моего хуя к твоему тупорылому еблету.
Аноним 16/04/21 Птн 13:59:48 19979821091
>>1997855
Траллируй - траллируй
>>1997938
А чем условные cms плохи? В рамках своей ниши? Хочет кабанчик у которого два-три ИРЛ магазина по продаже плинтусов и фурнитуры выйти в интернет, он хочет масимально типовую поебень, с каталогом и номером телефона. Бюджет 30 тыщ максимум - и хуле? На реакте + нода + деплоить в облаках + личный дизайн тыщ за 400 ему предложишь? И этот рынок существует, и не такой уж он узкий.
Другой вопрос что на говне уровня вордпресса писать противно.

Но я для своих быстрых нужд хочу Октябрь освоить, что бы и я не страдал, и быстро/просто реализовывал типовые проекты. У меня есть круг знакомых, мелких коммерсов, которым такой вариант очень подойдет.
Аноним 16/04/21 Птн 14:09:15 19979911092
>>1997982
Да ничем они не плохи, нишевое решение, магазинчики нужны всегда, просто местный шиз, из за своей ограниченности продвигает ебанутые походы оттуда, как стандарт в индустрии.
Аноним 16/04/21 Птн 14:27:49 19980101093
>>1997982
>хочу Октябрь освоить
С Октябрём сложно всё - у него скоро будет версия 2, которая платная будет и бесплатная какая-то. Часть разрабов прихуела от таких раскладов и сделала Винтер.цмс на базе первой версии.
Они там год-полтора только бурлить в говнах будут без явного результата.
Аноним 16/04/21 Птн 14:32:20 19980111094
>>1998010
>версия 2, которая платная
Если у них получится сделать аналог Битрикса, но с нормальным кодом внтури первый Октобер вполне годный, то вообще заебца будет. Правда Битрикс только для рашкинских бизнесменов, а тут глобально.
Аноним 16/04/21 Птн 14:45:25 19980191095
>>1998011
>первый Октобер вполне годный
Там же лара с eloquent под капотом? Не сказал бы что в ларе прям очень годный код. Хотя конечно в сравнении с битриксом все равно победа.
Аноним 16/04/21 Птн 14:55:54 19980261096
>>1998019
>нечно в сравнении с битриксом все равно победа.
Ну да - Ларовские Элоквент, Роутер, вместо Блейда - Твиг, Контейнер с зависимостями и поддержка композера из коробки. Но там не вся Лара, а некоторые компоненты только + они свои понапилили вполне удобные. В принципе, на уровне разработки плагинов всё пишется в стиле фреймворка - с контроллерами, маршрутами, моделями и их отношениями. С вордпрессом тем же не сравнить, да и много из коробки уже нормально работает без танцев с бубном и установки ёбаных сотен плагинов.
Аноним 16/04/21 Птн 14:58:19 19980311097
>>1998026
Прикольно звучит, а конкуренты сейчас есть популярные у нее? Может на симфони чот похожее наклепали уже?
Аноним 16/04/21 Птн 15:05:59 19980471098
>>1998031
>конкуренты сейчас есть популярные у нее?
Вроде как конкуренцию вордпрессу хотели сделать, но тут без вариантов - эту гору закаменевшего векового дерьма уже не сдвинуть. На ней веб-студии среднего ценового диапазона любят работать, по моим наблюдениям, да и удобен он в штамповке типовых сайтов - понаписал плагинов по частые кейсы и только собирай из них сайты.

>Может на симфони чот похожее наклепали уже?
Друпал на симфони переехал давненько уже.

Алсо можно и на вью сайтики делать, если кто думает, что CMS этого не умеет https://www.youtube.com/watch?v=9A-obKktlYw
Аноним 16/04/21 Птн 15:50:53 19980911099
>>1997956

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

Во-вторых, можно не писать swagger файл руками, а писать в коде аннотации, из которых потом генерируется swagger. Так документация хранится радом с кодом и ее легко поправить при исправлениях кода.

Тебе в любом случае надо как-то описать API для фронтендщиков. Лучше сделать это нормально, а не как попало.

Также, теоретически можно бы использовать swagger-описание для автоматической валидации приходящих параметров, но я не сталкивался с библиотеками, которые это реализуют.
Аноним 16/04/21 Птн 16:26:08 19981461100
>>1998091
>В рукописной документации ты замучаешься рисовать все таблички, которые тебе предоставляет swagger.
Кроме красивых вьюшек - я сразу сказал.

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

>Лучше сделать это нормально, а не как попало.
Какая разница где править документацию - в файле кода или разделе документации? И там - и там проебаться можно по чисто человеческим причинам.

Как минус получаем добавление очередного синтаксиса в проект, довольно всратого при этом, и увеличение объёма работы т.к. описывать он требует очень досконально.
Аноним 16/04/21 Птн 16:29:44 19981521101
>>1998010
>>С Октябрём сложно всё - у него скоро будет версия 2, которая платная
Нихуя се, жаль.
>>Они там год-полтора только бурлить в говнах будут без явного результата.
Это да. Попридержу коней тогда.
Аноним 16/04/21 Птн 16:30:16 19981531102
Screenshot20210[...].png 49Кб, 1326x267
1326x267
Screenshot20210[...].png 12Кб, 542x55
542x55
Screenshot20210[...].png 9Кб, 281x75
281x75
Как же затрахал этот даунский фреймворк...
Аноним 16/04/21 Птн 18:00:59 19982341103
wp.png 6Кб, 225x225
225x225
>>1958281 (OP)
Анончики. Я очень не шарящий в кодинге и тем более в пхп. Есть один магазинчик wordpress+woocommerce+astra theme. Я хочу изменить какое-то свойство товара прямо в БД вордпресса.
Но, когда я меняю значение (цена или название товара или наличие) в соответствующей таблице бд, сохраняю. На сайте оно не обновляется.
Поясните мне балбесу, как это работает и как сделать, чтоб значение внесенное руками в бд отображалось на сайте?
Аноним 16/04/21 Птн 18:03:17 19982401104
есть ли способы подсчитать и вывести число аккаунтов юзеров если их много на страницу админа?
Аноним 16/04/21 Птн 18:14:07 19982551105
>>1998234
Смотри плагины\настройки кеширования и сбрасывай их кеш.

>>1998240
Обратиться к таблице пользователей с определённым sql-запросом, который и вернёт количество пользователей. Как выводить - уже сам.
Аноним 16/04/21 Птн 18:15:46 19982581106
>>1998255
но тут загвоздка,много полей тяжко обрабатывать
Аноним 16/04/21 Птн 18:19:43 19982611107
>>1998258
Сколько пользователей? Вообще-то этот довольно простой запрос база должна быстро выполнить, если у тебя структура не въёбана.
Или там таблица терабайт на 5? Тогда хуйле тебя на этот проект посадили, ёбу дали штоле?
Аноним 16/04/21 Птн 18:29:51 19982721108
>>1998255
>>Смотри плагины\настройки кеширования и сбрасывай их кеш.

А не, все ок. я не в той таблице менял просто. Спс.
Аноним 16/04/21 Птн 18:33:31 19982751109
Аноним 16/04/21 Птн 18:52:02 19983061110
>>1998275
SELECT COUNT(*)as num FROM users
нашел на СО
Аноним 16/04/21 Птн 19:00:13 19983161111
а интеграция пхп кода это норм практика?
вот насчет вывода числа юзеров в админке-обращение к массиву?
Аноним 16/04/21 Птн 19:06:15 19983261112
>>1997855
>Пиздец, ты ироничный рофлан над лохами-джунами, которые symfony формы на spa присылают не выкупил?
Красавчик, два года назад задачку для дэбилов про айфон в кредит решить не мог, а теперь ОПа джуном называешь, лол
Аноним 16/04/21 Птн 19:28:03 19983611113
>>1997803
>на самоподдуве закатиться в тред бекенда
Лол, какой тред бекенда? Здесь большинство - такие же пхп жиквери фулстек макаки как ты.
А теперь зайди к чистым бэкэндерам: к гоферам, джавистам, нодистам или еще куда хочешь, и расскажи им свою позицию.
Хотя ладно, ничего интересного с этого не выйдет, тебя там с твоими охуенными идеями за такого толстяка примут что даже нахуй не пошлют.
Аноним 16/04/21 Птн 20:14:41 19984071114
Аноны, я довольно уважаемый миддл-программист, работаю в банке, и вот начальство поставило задачу типа сделай простенькую авторизацию, а то зачет не поставлю. Ну я такой ну ок. Погуглил про авторизацию и возник вопрос безопасности. Подскажите пожалуйста, как быть с сессией? Вот кусочек алгоритма, который смущает:
-Показываем пользователю форму логина
-Получаем от него пароль
-Проверяем пароль на наличие в базе данных
-Если пароль есть - генерируем хеш, сохраняем хеш в таблицу сессий, и вместе с айдишником пользователя записываем в сессию.
-После этого на каждом важном действии сверяем айди и хеш текущего пользователя с табличным.
А вот вопрос: что если хакер украдет текущий хеш из сессии браузера клиента? Это можно вообще сделать?
Аноним 16/04/21 Птн 20:36:23 19984191115
>>1998407
>Проверяем пароль на наличие в базе данных
Проверяют не пароль, а хеш пришедшего пароля с хешем пароля в БД. Обязательно посолить - соль тоже хранить в БД.

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

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

Хуевасто как-то для миддла у тебя, через постель на работу попал?
Аноним 16/04/21 Птн 20:44:07 19984231116
>>1998419
>На https все данные шифруются и их перехват ничего не даст.
Спасибо за ответ, аношка. Но что если есть только http? Гипотетически хакер может как-то украсть данные сессии и использовать их? Или не беспокоиться?
Аноним 16/04/21 Птн 20:48:22 19984261117
>>1998423
Если тебе для зачёта, то не трахай мозги и делай хоть как. Если для реального дела, то обязательно https и никаких велосипедов - бери проверенный фреймворк и делай на нём. Начальству скажи, что по требованиям безопасности обязаны предоставить https - это не прихоть.
Аноним 16/04/21 Птн 20:49:28 19984281118
Аноним 16/04/21 Птн 21:11:24 19984541119
>>1998407

Тебе стоит изучить, как работают сессии.

Данные сессии хранятся на сервере (в файле, БД, редисе в зависимости от настройки). Они не передаются в браузер.

В БД надо хранить не пароль, а соленый хеш от пароля.

>>1998423

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

Аноним 16/04/21 Птн 21:19:26 19984621120
А как считать пени на счете автоматом?
Аноним 16/04/21 Птн 21:30:26 19984681121
>>1998454
и тебе спасибо аноний
Аноним 16/04/21 Птн 21:41:05 19984771122
Аношки, этот тред закончился, для продолжения холиваров создан новый тред >>1998470 (OP)

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

А я напомню, что в нашем треде есть заказчик >>1982834 Вы можете не только решить его интересную задачку, но и даже получить за это деньги (но это не точно).

17/04/21 Суб 21:34:35 19995771123
>>1997952
тащем-та он прав

как ты собрался работать разработчиком без нормального компа?
ну Notepad++ тогда юзай, чо доебался до анона?
Аноним 18/04/21 Вск 11:40:26 20000711124
Аноны, здравствуйте всем, скажите, появился уже какой-нибудь учебник по php 8 для вката? Сейчас читаю мануал, он вообще не годится для вкатыша.
Аноним 18/04/21 Вск 13:06:29 20001561125
>>2000071
8 это тот же 7.х по большей части. Так что бери любой по 7.х учебник. Вау отличий нет.
Аноним 22/04/21 Чтв 14:17:40 20044151126
>>2000156
Если я хочу просто найти работу, лучше сразу начать ковырять фреймворк? Одного laravel хватит или еще что-то и в каком порядке?
Аноним 22/04/21 Чтв 23:24:27 20050341127
>>2004415
В принципе да. Делаешь гостевую книгу и тут же ищешь должность ждуна на галере. За еду. На реальных задачах быстрее развиваться будешь.

А вообще тред перекатится. https://2ch.pm/pr/res/1998470.html
мб ты там уже и спрашивал
Регулярка Аноним 22/05/21 Суб 01:15:11 20381831128
IMG202105220313[...].png 67Кб, 720x333
720x333
IMG202105220313[...].png 19Кб, 720x149
720x149
Парни, у меня вопрос по поводу регулярных выражений. Конкретно интересует группа символов \D. Как помнят многие отсюда - это группа символов, которая включает в себя какой угодно символ, кроме цифр(!).

Но я столкнулся с непонятной проблемой. По какой-то причине в моём коде \D меняет лишь буквы, и при этом не затрагивает, как и положено - цифры, но в то же время и специальные символы, пример: #, |, ~ и так далее.

Я понимаю что есть квадратные скобки и всё такое, но меня интересует сугубо данный вопрос: что здесь не так? Почему \D вместе с цифрами не трогает и специальные символы?
Аноним 22/05/21 Суб 01:17:58 20381911129
>>2038183
Блядь, я долбоёб тупой. Там же начало и конец подстроки не подпадают под регулярку. Нужно чтоб было вначале 'a', потом в конце 'b', а у меня в примере со спец. символами не так. Сорян, в глаза ебусь.
Аноним 25/05/21 Втр 18:16:47 20427511130
Господа, ситуация такая, устроился в стартапчик с стеком Vue + Laravel, но пыху знаю на джуновском уровне, что уж говорить про ЛарОчку.

Вопрос такой: где можно почитать/посомтреть в кратце про ларку (документация мимо), что бы за пару дней влиться и спокойно на ней писать? Учитывая тот факт, что мне нужно освоить ее синтаксис, так как я шарю в беке и понимаю принципы его работы.
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов