«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #122 Аноним 2021/03/05 12:54:16  №1958281 1
php-noob-1.png (32, 500x500)
500x500
cat-cafe-osaka.jpg (140, 1024x683)
683x1024
l0-sensei.jpg (34, 650x384)
384x650
cat-eats-php-book.jpg (93, 561x800)
800x561
Здесь мы изучаем язык 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? — Да, однозначно. Посмотри любую вакансию.
Аноним 2021/03/05 12:56:08  №1958286 2
grammar.png (55, 500x644)
644x500
Код надо писать аккуратно и оформлять, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

Для этого достаточно вставить код на 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/
Аноним 2021/03/05 13:34:13  №1958338 3
Первый
Ответы: >>1994535
Аноним 2021/03/05 15:01:46  №1958434 4
Ответы: >>1958465
Аноним 2021/03/05 15:48:52  №1958465 5
>>1958434

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

Завтра ты захочешь сделать, чтобы при ошибке выводилась форма с введенными значениями, и эту функцию придется переделывать. А вот если ее сделать, как я написал, то не придется.
Ответы: >>1958479
Аноним 2021/03/05 16:04:26  №1958479 6
val.jpg (47, 517x616)
616x517
Ответы: >>1958481 >>1958499
Аноним 2021/03/05 16:09:02  №1958481 7
>>1958479
> trim($login)
У тебя trim вникуда делается, сама переменная $login после trim останется неизменной. Нужно писать так $login = trim($login);

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

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

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

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

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

Ответы: >>1958503
Аноним 2021/03/05 16:21:00  №1958501 10
>>1958496

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


Ответы: >>1958953
Аноним 2021/03/05 16:40:39  №1958529 12
>>1958281 (OP)
А почему код ниже выводит 1?
<?php
$a=1;
echo $a++;
Ответы: >>1958532 >>1958534
Аноним 2021/03/05 16:42:00  №1958531 13
Я вкатыш и мне кажется шапка устарела. Что делать? php.net от а до я вылизать собираюсь, после этого на ларавельку пиздовать собираюсь, после этого пойду сразу миддлом за 100к+, т.к. живу в ДС и есть возможность работать в офисе, бок о бок с профи.
Какие подводные?
Ответы: >>1959886
Аноним 2021/03/05 16:42:13  №1958532 14
Аноним 2021/03/05 16:42:50  №1958534 15
>>1958529
Потому что он сначала прибавляет единицу, но не перезаписывает в переменной. Если хочешь, шобы сразу выводило, юзай ++$a;
Ответы: >>1958543
Аноним 2021/03/05 16:48:33  №1958543 16
>>1958534
Немного непонятно. А почему тогда в гайде написано что $a++ это $a=$a+1 ?
Аноним 2021/03/05 17:10:04  №1958564 17
>>1958543
Не читай гайд из шапки, его писал двачер блять. Двачеры априори не могут писать гайды. Учи на php.net + google. Всё.
Ответы: >>1958567 >>1958861
Аноним 2021/03/05 17:11:39  №1958567 18
>>1958543
>>1958564
Написано то всё верно. Только в гайде походу не уделилось времени этому достаточно.
$a = 0;
echo $a++; //выводит ноль при том, что а будет единицей.

$a = 0;
echo ++$a; //а единица и выводит единицу
Ответы: >>1958580
Аноним 2021/03/05 17:18:29  №1958576 19
>>1958543
Это просто бездумно пизданутая хуйня из си.
Просто всегда делай $var++ и не пихай его в выражения, а отдельной строчкой.
Аноним 2021/03/05 17:21:16  №1958580 20
>>1958567
Я это понял, но я не понимаю как это работает.
Получается $a++ это оператор, который возвращает значение $a вызывающей его функции, а после ее выполнения увеличивает ее на единицу?
Ответы: >>1958585 >>1958864
Аноним 2021/03/05 17:28:27  №1958585 21
>>1958580
> я не понимаю как это работает
Я тебе даже ссылку скинул на офф документацию, ты хоть открывал её?
Аноним 2021/03/05 17:39:51  №1958592 22
>>1958501
не взлетела попытка
Ответы: >>1958648 >>1958867
Аноним 2021/03/05 19:09:18  №1958648 23
>>1958592
Почитай для чего используется оператор return
Ответы: >>1958649
Аноним 2021/03/05 19:10:22  №1958649 24
>>1958648
чтобы вернуть значение в куда-то,здесь в переменную
Ответы: >>1958650 >>1958663
Аноним 2021/03/05 19:13:30  №1958650 25
>>1958649
>для чего используется оператор return
>чтобы вернуть значение в куда-то,здесь в переменную

Всегда было любопытно, откуда берутся такие логические цепочки рассуждений, например. Они же и не дедуктивны и не индуктивны.
Ответы: >>1958652 >>1958659
Аноним 2021/03/05 19:14:35  №1958652 26
>>1958650
смысле блять? ретурн на английском вернуть. че не так?
Аноним 2021/03/05 19:24:23  №1958659 27
Аноним 2021/03/05 19:31:42  №1958663 28
Ответы: >>1958707
Аноним 2021/03/05 20:23:17  №1958707 29
>>1958663
Нет, именно в куда-то. В место вызова функции.
Аноним 2021/03/05 22:52:54  №1958788 30
Я тут спрашивал в прошлом треде о авторизации для AJAX запросов.
В общем сделал так:
При каждой авторизации юзера создается/обновляется токен
При выходе с аккаунта планировал токен удалять, но понял что это приведет к ошибкам при двух и более одновременных сессиях/SPOILER]
При каждом дергании токена ( эвент retrieved ) проверяется, не протух ли он. Если протух, то токен обновляется.
Токен пробрасывается в html в мета тег. При отправлении AJAX запроса в javascript, он берется оттуда и пробрасывается в header
В миддлваре, при обнаружении AJAX реквеста с токеном в хедере, реквесту назначается юзер с таким токеном ( офк, если токен не протухший )

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

Действительно ли это весомые проблемы? И если да, то как они решаются? Есть идея делать очень маленькое время протухания, например 60 секунд, и каждые 55 секунд запрашивать по аяксу новый токен, пока не протух старый. Но это по-моему как-то слишком.
Ответы: >>1958847 >>1958870
Аноним 2021/03/06 06:17:43  №1958844 31
Ответы: >>1964147
Аноним 2021/03/06 06:35:25  №1958847 32
>>1958788
Очевидная дополнительная проверка на мета данные браузера и другую тех информацию от юзера.
Аноним 2021/03/06 07:35:24  №1958861 33
>>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 не очень подходит для начинающих с нулевыми знаниями, как мне кажется.
Аноним 2021/03/06 07:38:42  №1958864 34
>>1958580

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

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

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

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

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

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

return "текст";

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

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

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

return ["текст"];

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

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

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

Ответы: >>1958871 >>1959068
Аноним 2021/03/06 07:53:55  №1958870 36
>>1958788

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

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

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

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

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

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

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

Ответы: >>1959018
Аноним 2021/03/06 07:57:17  №1958871 37
>>1958867
тут фишка в чем,изначально я просто сделал проверку.где просто проверяли и выводили все найденные ошибки,но выполнение проги не останавливается!
можно конечно после каждого echo сделать die,но токга прога выведет первую попавшуюся ошибку и завершит процесс
Ответы: >>1958954
Аноним 2021/03/06 09:10:40  №1958917 38
Какие версии встречаются сейчас в живых проектах?
Произошел перекат на 7 или как попадется?
Вымер ли рынок искаробочных хостингов?
Ответы: >>1959894
Аноним 2021/03/06 10:18:44  №1958953 39
>>1958503

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

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

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

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

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

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

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

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

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

Либо

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

Ответы: >>1959087
Аноним 2021/03/06 13:42:18  №1959087 47
>>1959079
но это массив в функции,просто так его оттуда не достать
делать через list()?
Ответы: >>1959096
Аноним 2021/03/06 13:48:46  №1959096 48
Ответы: >>1959102
Аноним 2021/03/06 13:53:59  №1959102 49
>>1959096
вот здесь хрен знает какая попытка
рядом попытка в ООП
Ответы: >>1959111
Аноним 2021/03/06 14:00:59  №1959111 50
>>1959102

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

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

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

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

Новичек-кун, @kotovoi
Аноним 2021/03/06 16:20:18  №1959263 53
>>1959111
а так ООП?
вроде работает
Аноним 2021/03/06 16:43:52  №1959281 54
>>1959263
О разделении ответственности ( на конкретном примере, что функция не должна и выводить что-то на экран, и проверять значение ) тебе уже писали.
О именовании тоже писали сотню раз. Ну какое нахуй $var?
О указании тайпхинтов тоже писали.
В чем логика, что функции lenght() и symbols() еще и возвращают логин?
И самое главное, ты проебал всю изюминку ООП - инкапсуляцию. Зачем вообще нужен такой класс, у которого я должен явно вызывать методы проверки валидности по каждому правилу?
Аноним 2021/03/06 16:43:57  №1959282 55
>>1959263
а не,оно потом сможет ошибку записать в БД
Аноним 2021/03/06 17:19:46  №1959315 56
>>1959263

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

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

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

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

Ответы: >>1959399
Аноним 2021/03/06 19:53:10  №1959399 57
>>1959315
тыб ему просто про паттерный ооп написал солид, драй и тд, банду четырех пусть читнет.
мимокрестораб
Ответы: >>1960568
Аноним 2021/03/07 04:17:13  №1959561 58
image.png (68, 1279x724)
724x1279
function longest($a, $b) {
return count_chars($a.$b, 3);
}
echo longest("hskfkwiiweqqaaa", "lllfkoioeooqioaskzz");
//вывод — aefhikloqswz

Классная функция. Вдруг кому полезно будет.
Аноним 2021/03/07 13:00:16  №1959886 59
>>1958531
>Какие подводные?
Вкатываться в пыху, проживая в дс
Ответы: >>1959959
Аноним 2021/03/07 13:04:38  №1959894 60
>>1958917
В основном 7ые версии на проде сейчас. Найти что-то на 5ых версиях нужно постараться.
Аноним 2021/03/07 13:09:53  №1959901 61
>>1959263
Бросай это дело. Программирование явно не для тебя.
Впервые вижу, чтобы так долго безрезультатно вникали в основы кодинга
Аноним 2021/03/07 13:42:30  №1959912 62
>>1959901

Но это единственный путь иметь хоть какую-то норм зпшку здесь((
Аноним 2021/03/07 13:48:35  №1959915 63
>>1959901
>Впервые вижу, чтобы так долго безрезультатно вникали в основы кодинга
значит он читал не те книжки или вообще не читал, погромирование это не искусство, а ремесло, формошлепай и прибудет с тобой трудовой стаж.
нет бы вынести Design Patterns, чистый код мартина, полюбому есть специфический учебник по пыхе по типу "как перестать писать говно", в шапку.
Ответы: >>1959976
Аноним 2021/03/07 14:43:01  №1959959 64
>>1959886
а куда вкатываться? для джавы, го, си++, сишарп я туповат. в питоне вообще дата саенс и матан, там мне дорога закрыта. я с математикой вообще не в ладах
Ответы: >>1960039 >>1960062 >>1960279
Аноним 2021/03/07 14:54:32  №1959970 65
>>1959901
нет.
я должен доделать проэкт до финала
Аноним 2021/03/07 14:56:55  №1959976 66
>>1959915
читал,и не одну-в целом поверхностое говно для полных нулей,бер рил прожект.
приходиться много гуглить,но там 99% процедурный код-зато работает и понятней
Ответы: >>1960020
Аноним 2021/03/07 15:05:20  №1959990 67
Подскажите, кто в курсе, какие тестовые задания сейчас дают джунам на ларавел?
Из того, что я находил в интернете - дают задание написать какой-нибудь CRUD. Но, возможно, сейчас какие-то ещё появились заебы?
Видел ещё инфу, что кто-то требует покрывать тестами весь код. Это действительно так важно сейчас работодателям или можно без этого устроиться? Общие знания о том, как тестами покрывать у меня есть, но мне лень было с этой еботней заморачиваться. Впрочем, если это так важно работодателям, то придется хули
Ответы: >>1960016 >>1960146
Аноним 2021/03/07 15:21:25  №1960016 68
>>1959990
>дают задание написать какой-нибудь CRUD
тот же круд везде это не системщина
>Это действительно так важно
да но времени не всегда хватает
Аноним 2021/03/07 15:25:10  №1960020 69
>>1959976
>бер рил прожект
мне уже не надо, но если код с прода != хороший код, шаблоны проектирования хотя нужно иметь представление что это, тем более на собесе за них спрашивают в любом яп.
Ответы: >>1960031
Аноним 2021/03/07 15:30:29  №1960025 70
Ответы: >>1960646
Аноним 2021/03/07 15:35:31  №1960031 71
>>1960020
я не собираюсь работать кодером
Ответы: >>1960038
Аноним 2021/03/07 15:38:54  №1960035 72
Меня заебал шарп, потому что на всех работах требуют не просто пилить бек, но и фронт на ангуляре/вью/реакте ну и прочей хренью заниматься, типа, блядь - лезть в залупу на сокетах хуячить, а я в универе наигрался с сокетами.
Так вот, в моей мухосране 2 варианта карьеры бекендера: шарп и пхп.
Вот и я заинтересовался ПХП. Поясните, не начнется ли с определенного момента эта же залупа с тем, что не достаточно просто пилить бек? Как я понимаю, чтобы вкатиться - нужно симфонию и/или ларавель покурить, да сделать какой-нибудь интернет-магазин, чтобы закрепить знания или что-то еще там нужно особое знать?
Ответы: >>1960282 >>1960289 >>1960352
Аноним 2021/03/07 15:41:24  №1960038 73
>>1960031
ты потом откроешь свой же код и нихуя там не поймешь/надо будет его расширять а там пиздец.
Ответы: >>1960043
Аноним 2021/03/07 15:43:06  №1960039 74
>>1959959
Ты реально затупок, один из популярнейших фреймворков веба как раз на питоне
Аноним 2021/03/07 15:44:16  №1960043 75
>>1960038
я согласен в целом,что даже эстетически мой код всрат-но рабочая процедурщина.Короче,как вы говорите-херак и в продакшен
Ответы: >>1960052 >>1960281
Аноним 2021/03/07 15:48:24  №1960052 76
>>1960043
дело не в эстетике, процедурный код забит гвоздями и его проще переписать чем расширить, слишком абстрактный код перегружен и хрупок, одно изменение может потянуть пол кода.
Ответы: >>1960057
Аноним 2021/03/07 15:51:04  №1960057 77
>>1960052
>слишком абстрактный код
как раз хотел спросить про ООП,если много кода,много связей,как вы ориентируетесь в нем,особенно если там несколько слоев?
Ответы: >>1960066
Аноним 2021/03/07 15:56:47  №1960062 78
>>1959959
Я не затупок. Чтобы изучить джанго, надо понять от а до я питон. Как мне кажется, без матана ты его хуй поймёшь.
Ответы: >>1960065
Аноним 2021/03/07 15:57:43  №1960065 79
>>1960062
>без матана ты его хуй поймёшь
Сказки питономакак
Ответы: >>1960086
Аноним 2021/03/07 15:58:49  №1960066 80
>>1960057
есть принципы проектирования solid, dry, kiss, grasp и другие, вот их и придерживаемся, когда несколько человек пишут в одном стиле то каша более понятная.
Ответы: >>1960537
Аноним 2021/03/07 16:09:03  №1960086 81
>>1960065
То есть питон на самом деле можно выучить без матана?
Ответы: >>1960537
Аноним 2021/03/07 16:42:39  №1960146 82
>>1959990
Задам смежный вопрос: насколько часто на джуна вообще просят тестовое? Как по мне это ебанистика полная. За пару минут беседы же можно вполне +- понять уровень человека, если не задавать вопросы с листочка. Да и есть у меня гитхаб допустим, там интересные проекты которые месяцами делались, за каждую строчку могу пояснить и доказать что не верблюд. В чем прикол заставлять соискателей делать для каждого работодателя какой-то шаблонный круд с тестами, еще и с ограничением в какие-то условные 2 дня? При том что для меня эти два дня могут являться двумя вечерами после 13-часового таскания бетонных хуев, а для какого-то Ваньки это 48 часов, за которые это все дело даже обезьяна нагуглит и сделает. И какой вообще уровень эти круды могут показать?
Ответы: >>1960217 >>1960284
Аноним 2021/03/07 17:57:52  №1960217 83
>>1960146
>За пару минут беседы же можно вполне
нет нельзя
Аноним 2021/03/07 19:31:33  №1960279 84
>>1959959
>а куда вкатываться?
Явно не в разработку.
Вон тестером попробуй, девопсом, фронтом, аналитиком. Но в бек путь заказан.
Ответы: >>1960520
Аноним 2021/03/07 19:33:53  №1960281 85
>>1960043
>даже эстетически мой код всрат-но рабочая процедурщина
Не, ты даже до рабочей процедурщины не дошел еще.
Аноним 2021/03/07 19:34:33  №1960282 86
>>1960035
А на пхп попросят пилить фронт на жиквери
Аноним 2021/03/07 19:36:04  №1960284 87
>>1960146
Если у тебя есть гитхаб и можешь пояснить за код там - навязывай его вместо тествого, типо чтобы время не терять.
Суть в том, чтобы убедить работодателя, что ты не хуй с горы и можешь код писать.
Аноним 2021/03/07 19:42:07  №1960289 88
>>1960035
На пхп такой залупы больше. Проекты проще, квалификация исполнителей часто ниже, работодатели привыкли экономить на труде, им не нужны хорошие беки, фронты, дизайнеры, поэтому ты будешь этим всем заниматься. Не одновременно же! Сначала одним, потом другим, так что не пизди, что двоя зряплата должна быть как у двух-трех спецов.
Аноним 2021/03/07 20:45:15  №1960352 89
>>1960035
> лезть в залупу на сокетах хуячить, а я в универе наигрался с сокетами.

Ору, блядь. Выкатывайся из профессии нахуй, наигрался он.
Помогите с Laravel Аноним 2021/03/08 07:22:28  №1960459 90
operaNWwQ4Kkm7a.png (13, 1120x234)
234x1120
Может кто подсказать как сделать так что бы при выборе option менялось значение цены которое соответствует для имени
Ответы: >>1960472
Аноним 2021/03/08 07:43:24  №1960472 91
Аноним 2021/03/08 09:08:15  №1960520 92
>>1960279
это схуя ли? Фронт для меня дрочь дичайшая, не хочу даже туда соваться. Хочу в бэк и пойду в бэк, на твоё мнение мне вообще поебать, выблядос
Ответы: >>1960562
Аноним 2021/03/08 09:26:05  №1960537 93
>>1960086
Ну совсем без матана нет, нужно уметь складывать, вычитать, делить, умножать, иногда ещё в степени возводить и корни извлекать, но это редко. Ещё желательно синус от >>1960066
косинуса отличать, но не обязательно.
Ответы: >>1960573
Аноним 2021/03/08 10:08:52  №1960562 94
>>1960520
Вангую, зайду через год в тред, а ты всё вкатываешься
Ответы: >>1960573
Аноним 2021/03/08 10:17:10  №1960568 95
>>1959901

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

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

>>1959399

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

Ответы: >>1960606
Аноним 2021/03/08 10:23:47  №1960572 96
1615199065420.png (315, 822x679)
679x822
>К тому же, основы кодинга - что какая команда делает - он как раз изучил. Ему нужны не основы, а учиться разбивать код на функции и тд. А для этого надо больше практиковаться и писать код.
Лол
Ответы: >>1960578
Аноним 2021/03/08 10:26:10  №1960573 97
>>1960537
Ну на таком уровне знаю, конечно, не совсем же ебанат.
Даже производные смогу решить, лол.
>>1960562
Буду рад вновь увидеть червя тут, залетай
Аноним 2021/03/08 10:30:10  №1960578 98
>>1960572
Тоже не понимаю, почему эта чмоня агрится?
Ему же советуют не тратить время зря.
Он же даже не сможет пояснить, что каждая строчка тут делает.
Аноним 2021/03/08 11:00:51  №1960606 99
>>1960568
>Что значит "впервые вижу"? Ты что, препод и тебе есть с чем сравнивать?
Да, есть с чем сравнить. Видел многих вкатунов, и они явно получше соображают.

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

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

>Ему нужны не основы, а учиться разбивать код на функции и тд.
Ему нужны основы, он даже без функций код не может написать, или написать код одной функции
Ответы: >>1960615
Аноним 2021/03/08 11:09:57  №1960615 100
>>1960606
>он даже без функций код не может написать
код без функций? че?
Ответы: >>1960643
Аноним 2021/03/08 11:29:27  №1960643 101
>>1960615
Без своих функций, обычную лапшу
Ответы: >>1960670
Аноним 2021/03/08 11:30:42  №1960646 102
>>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 и добавить скриншоты, если ты захочешь потом показывать эту работу в резюме.

Ответы: >>1960740 >>1960782 >>1962389
Аноним 2021/03/08 11:39:38  №1960670 103
>>1960643
лапша это неструктурированный код, он может работать.
Аноним 2021/03/08 12:22:21  №1960740 104
>>1960646

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

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

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

Спасибо большое, Анон, что указал на косяки и что можно исправить. Как думаешь, можно уже пытаться по собесам походить ?
Ответы: >>1961264
Аноним 2021/03/08 12:49:07  №1960782 105
>>1960646

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

Критикуй, Анонче!
Спасибо!
Ответы: >>1961293
Аноним 2021/03/08 16:14:26  №1961264 107
>>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)

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

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

- поменять названия переменных
- отформатировать код по правилам
- попробовать его укоротить, как я описал выше (не теряя читабельности. Не надо пытаться запихнуть несколько строчек в одну).
Ответы: >>1961349
Аноним 2021/03/08 16:36:58  №1961327 109
>>1961264

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

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


В остальном спасибо, Анон, ты как всегда охуенен!
Ответы: >>1962169
Аноним 2021/03/09 06:16:28  №1961634 111
Анон, тупой вопрос. Я вроде думал что понимаю что такое API, REST, вся эта блудня с create|update и т.д. Но как обычно практика все пом есстам расставила, лол.
У меня есть раздел ( группа роутов ) приложухи (слим 4), в ней роуты на просто отрисовку страниц, пост-запросы от форм, а так же c этих страниц несколько ajax-запросов к серверу.
Трабла возникла когда я захотел проверку прав закинуть в мидлвэйр на группу роутов, а роуты у меня внезапно ( ага ) есть те что возвращают шаблоны, а есть те что возвращают ajax. Соответственно мидлвэйры могут быть разные, но я хотел как то по группам группировать.
Так вот вопрос - можно ли назвать те маршруты что обрабатывают ajax запросы - API? И нужно ли мне их вынести в отдельный раздел и отдельные классы?
А то, условно, у меня в одном классе контроллера находятся как методы что обрабатывают обычные запросы от браузера, так и те что обрабатывают ajax.
Ответы: >>1962165
Аноним 2021/03/09 14:47:51  №1962089 112
Есть ли такая команда, которая позволяет выводить текст с сайта в виде файла txt? У меня есть код, который выводит данные БД в виде JSON, но я не знаю как сделать так, чтобы он выдал мне этот JSON текст в виде txt файла.
Ответы: >>1962105 >>1962108 >>1962155
Аноним 2021/03/09 15:07:56  №1962105 113
Аноним 2021/03/09 15:09:53  №1962108 114
Аноним 2021/03/09 16:23:12  №1962155 115
>>1962089

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

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

Аноним 2021/03/09 16:32:26  №1962165 116
>>1961634

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

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

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

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

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

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

-----

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

Некоторые выносят API отдельно, но мне кажется это актуально, если у тебя есть настоящее, документированное API для внешних сайтов или устройств. Если у тебя просто обработчики аякс запросов с сайта, я бы не называл это полноценным API.
Ответы: >>1962567
Аноним 2021/03/09 16:37:17  №1962169 117
>>1961349

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

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

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

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

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

$words[] = getWordForm($millions);

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

$x = $spelling[$j];

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

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

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

не добавляй в массив пустые строчки и пробелы не появятся.
Ответы: >>1963092
Аноним 2021/03/09 16:41:28  №1962175 118
>>1961327

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

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

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

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

У тебя сортировка сейчас, как мне кажется, сделана некорректно. При смене сортировки результаты на странице (например, первой) должны меняться, а у тебя они не меняются.
Ответы: >>1962389
Высрал код Аноним 2021/03/09 17:48:04  №1962255 119
image.png (75, 1434x924)
924x1434
Здраствуйте аноны в общем я хотел написать на laravel с 0 знаниями форму где динамически добавляются новые строки в таблице по нажатии кнопки. Добавление и удаление я сделал, но получилось крайне хуево, можете дать совет. Как обойтись без смешивания js, html, php
Ответы: >>1962354 >>1962391 >>1962716
Аноним 2021/03/09 19:09:24  №1962354 120
>>1962255
> Как обойтись без смешивания js, html, php
Никак. Динамическое изменение страницы без перезагрузки по другому не сделать.
Ответы: >>1962719 >>1962723
Аноним 2021/03/09 20:00:30  №1962389 121
>>1960646

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

>>1962175

>У тебя сортировка сейчас, как мне кажется, сделана некорректно.
Да, я уже исправил. Просто изначально думал, что должны сортироваться только те данные, которые в данный момент юзер видит на конкретной странице.
Ответы: >>1964928
Аноним 2021/03/09 20:01:48  №1962391 122
>>1962255
Можно переложить рендер из жс в пхп, но тогда будут перезагрузки на каждый чих, а на беке придется хранить состояние отрисованных элементов.
А от хтмл никак не избавишься, если нужен UI.
Чистый бек это какой-нибудь JSON API
Аноним 2021/03/09 20:41:26  №1962419 123
А чем отличаются Laravel и Symphony? Они разные задачи решают? Я не пыхер, просто интересно.
Ответы: >>1962421 >>1962441
Аноним 2021/03/09 20:49:28  №1962421 124
Почему в ларавеле по умолчанию в .gitignore не прописаны автогенерируемые вебпаком папки/файлы из public? Может быть в этом есть какой-то здравый смысл? Или просто потому что?
>>1962419
Symfony - джава-стайл для крупных проектов
Laravel - RAD-фреймворк для хуяк-хуяк и в продакшен. Антипаттерн на антипаттерне, почти что вордпресс.
Аноним 2021/03/09 21:12:37  №1962437 125
>>1958281 (OP)
Какие кавычки использовать более правильно и почему?
Ответы: >>1962445 >>1962450
Аноним 2021/03/09 21:14:26  №1962441 126
>>1962419
Ларавел - комбайн по типу Рельс, поставил и пользуйся.
Симфони - набор пакетов, которые можно использовать независимо друг от друга
Ответы: >>1962454
Аноним 2021/03/09 21:17:23  №1962445 127
Аноним 2021/03/09 21:20:04  №1962450 128
>>1962437
Одиночные кавычки быстрее.
Ответы: >>1962722
Аноним 2021/03/09 21:24:43  №1962454 129
>>1962441
Только не пакетов а компонент. В композер пакетах бандлы для симфони бывают, хуй ты их где кроме симфони используешь.
Ответы: >>1962457
Аноним 2021/03/09 21:30:24  №1962457 130
>>1962454
А компоненты симфони это хуйня такого уровня, что если ты кастомно из них что-то собираешь, то ты скорее сам фремворк общего назначения можешь написать. В практических задачах это не встречается. Так что не надо это постоянно повторять, типа "симфони гибкая".
Ответы: >>1962638
Аноним 2021/03/10 07:27:52  №1962567 131
>>1962165
Спасибо за ответ, и за ранее сделанные ответы на мои вопросы тоже спасибо!
>>Там можно сделать глобальную проверку
В сущности так я и реализовал.
Аноним 2021/03/10 09:36:46  №1962638 132
>>1962457
>ты скорее сам фремворк общего назначения можешь написать
О чем и речь, что симфони может выступать как фреймворком (веб скелетон), так и конструктором фреймворков.

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

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

Не гони, прекрасно можно обойтись без вставки HTML в JS, просто ты не знаешь про шаблоны.
Аноним 2021/03/10 11:43:02  №1962722 135
>>1962450

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

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

Но таким же образом нельзя поступать с массивом выбора формы слов для миллионов, тысяч и десятков, ведь там 0-й элемент массива строго соответствует разряду рублей, 1-й элемент - тысячам, 2-й элемент- миллионам.
Я все правильно понял?
Спасибо за терпеливые объяснения.
Ответы: >>1964881
Аноним 2021/03/10 17:41:22  №1963103 138
>>1962723
Ващет в жс уже завезли родные темплейты
Ответы: >>1963138
Аноним 2021/03/10 18:09:43  №1963138 139
>>1963103
Не мешай людям тащить бесконечное количество зависимостей.
Аноним 2021/03/10 18:18:12  №1963149 140
>>1962722
Ну чего ты такой серьезный. Это старый, бородатый прикол, про скорость одиночных кавычек. Да и все равно мы тут не байты вычисляем, а в бутылочное горлышко базы данных упираемся.
Аноним 2021/03/11 06:49:18  №1963391 141
Почему у меня не работает UPDATE базы данных?
Перепробовал сто вариантов из интернета ничего не работает. Как будто пустота там где строчка с командой UPDATE
как так?
остальное работает, а UPDATe ни в какую
в чём секрет?
Ответы: >>1963393
Аноним 2021/03/11 06:51:06  №1963393 142
>>1963391
Показывай код, хули.
Ответы: >>1963394
Аноним 2021/03/11 06:53:18  №1963394 143
>>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;
}
Ответы: >>1963398
Аноним 2021/03/11 07:03:10  №1963398 144
>>1963394
bind делается для ? плейсхолдеров, а ты сразу вхуячил значения в запрос. Плюс там ещё параметр с какими-то форматами нужен вроде.
Дальше query каким боком там?
Короче, у тебя там косяк на косяке, и это я ещё не шарю в этом mysqli или что это.
Читай документацию.
Ответы: >>1963400
Аноним 2021/03/11 07:07:35  №1963400 145
>>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);
}
Ответы: >>1963402 >>1963415 >>1963442
Аноним 2021/03/11 07:11:14  №1963402 146
>>1963400
В базу ту подключился?
Сделай echo $sql и попробуй исполнить руками этот запрос.
Ответы: >>1963407
Аноним 2021/03/11 07:17:39  №1963407 147
>>1963402
сообщение о соединении с базой есть

echo $sql
выдает
UPDATE `map` SET `owner` = 9 WHERE map.x = 34 AND map.y = 34
ввожу в базу руками
работает
Ответы: >>1963418
Аноним 2021/03/11 07:27:42  №1963415 148
>>1963400
Ты в курсе что это не подготовленный запрос? Ты ж подставляешь переменные тупо в строку $sql
Ответы: >>1963437
Аноним 2021/03/11 07:30:29  №1963418 149
>>1963407
Ну хуй знает тогда.
Аноним 2021/03/11 07:58:57  №1963437 150
>>1963415
Покажи подготовленный запрос
Аноним 2021/03/11 08:14:53  №1963442 151
>>1963400

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

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

Вдруг что найдется.
Ответы: >>1963443
Аноним 2021/03/11 08:16:29  №1963443 152
Ответы: >>1963489
Аноним 2021/03/11 09:18:22  №1963489 153
>>1963443

У тебя явно проблема при установке соединения с БД. Так как $link должен быть объектом, а не NULL. Покажи код установки соединения и сдампь, чему равна $link.
Ответы: >>1963580
Аноним 2021/03/11 11:06:11  №1963580 154
>>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);
Ответы: >>1963637
Аноним 2021/03/11 11:08:03  №1963582 155
Анон. Что лучше wordpress или hugo?
Ответы: >>1963629
Аноним 2021/03/11 11:08:34  №1963585 156
Говорят wp дырявая как наташа, правда?
Аноним 2021/03/11 11:09:35  №1963587 157
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) }
Аноним 2021/03/11 11:33:22  №1963629 158
>>1963582
>hugo
>cms
>на go
Чет взлольнул.
Зачем го вылез из микросервисного загона в цмс?
Ответы: >>1963654 >>1963661
Аноним 2021/03/11 11:38:23  №1963637 159
>>1963580
Короче, ты в каком-то месте неожиданно обсираешься, тут гадать можно долго, потому что причина неочевидна и не в самой работе с бд. Ищи.
Ответы: >>1963639
Аноним 2021/03/11 11:41:27  №1963639 160
>>1963637
Где искать то? Это практический весь код который проблемный.
Ответы: >>1963641
Аноним 2021/03/11 11:44:03  №1963641 161
>>1963639
Сделай в две строчки.
conn = connect
query(conn, 'update table set hui=1 where id=1')
Должно сработать без вариантов. Потом смотри что отличается.
Ответы: >>1963697
Аноним 2021/03/11 11:56:03  №1963654 162
>>1963629
цмс не цмс. но для блогинга hugo тоже подходит. в чём твой рофл?
Ответы: >>1963762
Аноним 2021/03/11 12:02:48  №1963661 163
>>1963629
wp сайты за 2 секунды ломаются. как ты думаешь, тебе такое устроит такой расклад?
Ответы: >>1963665 >>1963761
Аноним 2021/03/11 12:05:12  №1963665 164
>>1963661
А почему говорят, что wp неуязвим, если ставить последнюю версию пиэйчпи и обновлять плагины?
Ответы: >>1963676
Аноним 2021/03/11 12:20:57  №1963676 165
>>1963665
обновлять плагины? а ты думаешь избежишь от взлома? а хер там было с маслом. один фиг будут ломать школохакеры. и будут внедрять вирусы, рекламы, всякая чепуха. возможно и станет в ряды ботнетов у китайских школяров. а в hugo всё ахуенно, он железобетонен. в markdown пишешь и пушишь в github. в netlify автоматом билдиться. и всё это невъебически защищен от всех криворуких.
Ответы: >>1963677 >>1963681 >>1964878
Аноним 2021/03/11 12:27:32  №1963677 166
>>1963676
Да, говорят, что хакеры ломают только старье с известными уязвимостями, а если все обновлять, обновлять версии вордпресса, обновлять плагины, обновлять версии пиэйчпи, менять пароль все время, все время, то вордпресс будет неузявим! Так говорят в интернете!
Аноним 2021/03/11 12:32:15  №1963681 167
>>1963676
Говорят, что новая версия вордпресса неуязвима.
Ответы: >>1963688
Аноним 2021/03/11 12:38:52  №1963688 168
>>1963681
В общем тебя порадую. В даркнете есть такие форумы как exploit.in, wwh-club и т.д. Ну так вот я недавно видел в экплоите как можно ломать новую версию вп 5 и выше. Уже давно слиты как ломаются вп сайты 5.7.
Ответы: >>1963701
Аноним 2021/03/11 12:47:04  №1963697 169
>>1963641
Так работает, а когда делаю чтобы вставлялось из переменных то перестает работать
Аноним 2021/03/11 12:48:29  №1963701 170
>>1963688
Если уязвимость так широко известна, значит ее поправили или скоро поправят.
Ответы: >>1963723
Аноним 2021/03/11 13:02:06  №1963723 171
>>1963701
Да ладно не поправили. Недавно пробовал поднять в виртуалке вп блог, и попробовать взломать. Всё как есть. Ломаются на ура.

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

В том то и дело что уязвимость не известна большинству. Какой среднестатистический вася будет в onion сайтах сидеть? даже топовые менеджеры толком то и не знают, что существуют такие дыры в этих цмсках. в теплых офисах сидят пьют чай, и ничем не думают. и вдруг внезапно бегают во весь офис вырывая волосы, что их сайт взломали хакеры, что внедрили злоебучий скрипт, который копирует сам себя, распространяя во все датацентры. так ломаются крупные сайты, даже твиттер, фейсбук.
Ответы: >>1963882 >>1963898
Аноним 2021/03/11 13:34:20  №1963761 172
>>1963661
Если ломают цмс на пхп, что мешает сломать цмс на го?
Аноним 2021/03/11 13:35:23  №1963762 173
>>1963654
В странном выборе языка. Преимущества го в цмс не задействованы, а вот недостатки тут как тут
Ответы: >>1963778
Аноним 2021/03/11 13:46:37  №1963778 174
>>1963762
в общем ты даже не понял о чем идет речь. на кури https://gohugo.io, темы на любой вкус https://themes.gohugo.io. но я бы не юзал эти темы, а самому лучше создать шаблон как-то удобнее.
Ответы: >>1963847
Аноним 2021/03/11 14:30:05  №1963847 175
>>1963778
CMS
@
CLI


Это для кого вообще сделано?
Ответы: >>1963854
Аноним 2021/03/11 14:39:09  №1963854 176
>>1963847
для людей сделано карл ))
Аноним 2021/03/11 14:45:47  №1963864 177
Вы че, ебанутые? Вы тут на полном серьезе CMS обсуждаете? Насколько нужно себя не уважать, чтобы с таким говном связываться?
Аноним 2021/03/11 15:01:42  №1963879 178
>>1963864
Лучше быть просто верстаком, чем с CMS связываться?
Ответы: >>1963971
Аноним 2021/03/11 15:03:04  №1963882 179
>>1963723
А в фреймворках ты типа сам защиту настраиваешь?
Ответы: >>1963898
Аноним 2021/03/11 15:11:57  №1963898 180
>>1963723
>>1963882
З.Ы. я еще не учил, что такое фреймворк. Я пока только вордпресс изучаю.
>>1963864
Я думаю, что начну с ЦМС, потому что фреймворки - СЛОЖНА!
Ответы: >>1963971
Аноним 2021/03/11 15:47:08  №1963965 181
>>1963864
Только рофла ради. Сам это говно даже будучи джуном за км обходил.
Я кажется уже и фреймворки перерос, достался настолько большой проект, что фреймворка в нем не видно
Аноним 2021/03/11 15:50:03  №1963971 182
>>1963879
Конечно. Только конкуренция на фронте сильная, но это более квалифицированный труд, ну и зп больше намного даже больше чем у обычных пыхеров.
CMS поедают людей как раз потому, что устроиться с ними работать вообще с нулевыми знаниями проще простого.
Работодатели понимают, что осознанно в этом дерьме копаться мало кто будет, из-за чего выращивают макак с нуля.
В итоге люди по пять лет на CMS работают, а по знаниям не тянут даже на нормального trainee.
>>1963898
И кто тебе такую дурную идею посоветовал? Сам придумал?
Ответы: >>1963981
Аноним 2021/03/11 15:54:57  №1963981 183
image.png (33, 783x342)
342x783
>>1963971
>В итоге люди по пять лет на CMS работают, а по знаниям не тянут даже на нормального trainee.
И зарабатывают соответственно. Пикрил самая крупная битриксопараша в городе, берут людей чуть ли не с улицы, лишь бы мог эту коробку шатать
Аноним 2021/03/11 16:36:04  №1964053 184
>>1963864
Ну дак речь идет именно тузлов для блогинга, одно цмс пыхой, а другой генератор на golang. В генераторе hugo нужно иметь намного больше багажа знаний. Вот эти: html, js, css, flex, grid, микроразметку, golang в конце-то концов.
Ответы: >>1964062
Аноним 2021/03/11 16:39:04  №1964060 185
hugo.png (86, 1600x900)
900x1600
В upwork спокойно рубишь зеленные если владеешь ангельским. В hugo заданиях конкуренции намного меньше, чем wordpress.
Аноним 2021/03/11 16:40:06  №1964062 186
>>1964053
>Вот эти: html, js, css, flex, grid, микроразметку, golang в конце-то концов.
Оч сложно
Ответы: >>1964067
Аноним 2021/03/11 16:40:51  №1964065 187
В общем hugo - это jamstack. Кто нихуя не понимает что это за махина? Вот https://jamstack.org/generators также есть в этом списке next.js как многие сейчас в нем пишут.
Ответы: >>1964822
Аноним 2021/03/11 16:42:44  №1964067 188
>>1964062

конечно. кто может писать всё нативе? вот именно сложно.
Ответы: >>1964085
Аноним 2021/03/11 16:51:38  №1964085 189
>>1964067
Сарказм не понят.
Эти вещи из базового уровня веб макаки, хз как без них в 2к21 девелопить
Ответы: >>1964110
Аноним 2021/03/11 17:05:44  №1964110 190
>>1964085

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

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

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

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

и у меня в 11 месяце остается 4к и всё какбэ
в чем прикол?
Ответы: >>1964479
Аноним 2021/03/11 22:30:08  №1964479 193
>>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;
}
Ответы: >>1964481
Аноним 2021/03/11 22:31:22  №1964481 194
>>1964479
Блин, знак умножения исчез, короче где 0.03 там имеется в виду умножение
Аноним 2021/03/12 04:37:42  №1964568 195
А почему mysqli_query работают а когда внутрь функции пихаешь то перестают работать?
Ответы: >>1964666
Аноним 2021/03/12 08:27:25  №1964666 196
>>1964568
Пример бы хоть показал, пиздун.
Аноним 2021/03/12 08:29:53  №1964668 197
Аноны, какую либу можно заюзать для авторизаци/регистрации и проверки прав? приложуха slim 4, ORM eloquent.
Раньше юзал Cartalist/Sentinel она как раз использует улоквент, думаю ее снова заюзать. Но может другие варианты есть?
Ответы: >>1964706
Аноним 2021/03/12 09:26:46  №1964706 198
>>1964668
> Раньше юзал
Если всем устраивает, зачем наворачивать другое?
Ответы: >>1964711
Аноним 2021/03/12 09:43:21  №1964711 199
>>1964706
Для расширения кругозора мб
Аноним 2021/03/12 11:45:47  №1964822 200
>>1964065

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

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

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

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

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

И грид тоже отстой, так как не поддерживается старыми браузерами. Зачем тратить свои силы, чтобы получить убогий HTML код, работающий только на твоем компьютере, когда можно писать хорошую кроссбраузерную верстку, которая отображается даже в IE. Убогие всегда найдут какую-нибудь отмазку, лишь бы не признавать свои слабые скиллы.
Ответы: >>1964834 >>1964927 >>1964930
Аноним 2021/03/12 11:56:03  №1964834 201
>>1964822
>можно писать хорошую кроссбраузерную верстку, которая отображается даже в IE
Кто-то еще пользуется ишаком?
Аноним 2021/03/12 12:40:18  №1964878 202
>>1963676

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

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

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

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

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

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

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



Ответы: >>1965866
Аноним 2021/03/12 13:01:40  №1964907 204
Я вкатываюсь, еще учебник до конца не прошел. Уроки по вротпрессу штурмую. Фреймворки не смотрел даже. Ну, хорошо, вы говорите, что вротпресс дырявый.

А с фреймворками там че? Там как так получается, что защита лучше, чем у вротпресса? Или ты самописную защиту должен хреначить? НИЧЕ НЕ ПОЙМУ!
Ответы: >>1964923
Аноним 2021/03/12 13:05:29  №1964912 205
По вротпрессу говорят, что надо ставить последнюю версию вротпресса, плагины обновлять до последней версии, надо чтобы был SSL, https. Настроить htaccess. Все время менять пароль. И ТОГДА ВРОТПРЕСС СТАНЕТ НЕУЯЗВИМЫМ!!!!!!!! Так говорят в интернете.
Ответы: >>1964924
Аноним 2021/03/12 13:13:11  №1964923 206
>>1964907
В фреймворках зачастую единая точка входа в приложение. Соответственно навесить различных ограничителей проще, чем в вп, где этих точек может быть сотни.
Остальное зависит от настроек веб сервера.
Аноним 2021/03/12 13:13:53  №1964924 207
72414919.jpg (72, 450x450)
450x450
Ответы: >>1964947
Аноним 2021/03/12 13:16:42  №1964927 208
>>1964822

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

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

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

Аноним 2021/03/12 13:19:30  №1964930 210
>>1964822

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

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

Для этого есть disqus, isso, github issue много чего есть.
Ответы: >>1964959
Аноним 2021/03/12 13:24:34  №1964936 211
>>1964927

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

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

Хотя, я вижу, все поступают противоположно тому, что я учу и вовсю используют плохо поддерживаемые технологии. Это понятно, качественно сделать сайт мало кто может, лепят как попало. И ладно бы это были вкатуны, так нет вроде опытные разработчики тоже лепят как придется. Я от работы фронтендеров испытываю только разочарование. Хуже них разве что любители внедрить микросервисы на малоизвестном языке и свалить.
Аноним 2021/03/12 13:31:47  №1964947 212
>>1964924
Ну, значит надо не использовать плагины из списка ушатанных.
Ответы: >>1964963
Аноним 2021/03/12 13:35:07  №1964959 213
>>1964930

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

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

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

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

И ты подаешь hugo как что-то новое, хотя статические генераторы сайтов существуют уже много лет, и есть генераторы на PHP. С которыми ты можешь сделать что угодно, поменять что угодно, и тебе не надо тратить ценное время на изучение языка Го. Зачем нужен hugo, если есть генераторы на PHP?
Аноним 2021/03/12 13:36:16  №1964963 214
>>1964947
Так ты узнаешь уже после, лол.
Вордпресс это как шиндовс, все хотят его поиметь, потому что дохуя потенциальных жертв пасется.
Ответы: >>1964967
Аноним 2021/03/12 13:40:03  №1964967 215
>>1964963
Тогда надо антивирусной утилитой прочесывать код! Я видел какой-то видос, где приводился список эксполитов для пиэйчпи. Потом их пихали на сайт пиэйчпи. А потом прочесывали утилитой антивирусной, и она находила, что вот эту хуйню надо выпилить!
Ответы: >>1964997
Аноним 2021/03/12 13:52:08  №1964997 216
>>1964967
Интересно, на чем основан принцип работы подобной лабуды
Аноним 2021/03/12 14:39:30  №1965076 217
Сосоны, а вы знали, что существует punto switcher, который автоматически меняет раскладку? Типа пишешь дштл и эти буквы автоматически превращаются в link.
Ответы: >>1965178 >>1965788
Аноним 2021/03/12 14:54:35  №1965106 218
Как сделать массив $arr как $replace ?

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

$replace = ['a' => ['b','c'], 'd' => ['e', 'f']];
Ответы: >>1965109
Аноним 2021/03/12 14:56:28  №1965109 219
>>1965106
reverse на каждом из массивов
Ответы: >>1965133
Аноним 2021/03/12 15:05:43  №1965133 220
>>1965109
И как это поможет? И мне нужно только с одним массивом arr работать
Ответы: >>1965172 >>1965174
Аноним 2021/03/12 15:31:55  №1965172 221
Ответы: >>1965174 >>1965201
Аноним 2021/03/12 15:32:20  №1965174 222
Ответы: >>1965201
Аноним 2021/03/12 15:35:28  №1965178 223
>>1965076
> punto switcher
Как там в 2004?
Ответы: >>1965182 >>1965191 >>1965788
Аноним 2021/03/12 15:38:46  №1965182 224
>>1965178
А что надо использовать в 2к21 году? СКАЖИ, АНОН! СКАЖИ ГЛАСНО!
Ответы: >>1965191 >>1965217
Аноним 2021/03/12 15:45:15  №1965191 225
>>1965178
>>1965182
Я вообще никогда не понимал, зачем это использовать, хуйня какая-то.
Ответы: >>1965197
Аноним 2021/03/12 15:51:25  №1965197 226
>>1965191
Чтобы писать код я переключаю раскладку клавиатуры. Например:
echo '<b>Привет мир!</b>';
Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл. И вместо того, чтобы мне исправлять это руками punto swither сам мне все поменяет.
Аноним 2021/03/12 15:53:42  №1965198 227
>>1965197
У меня такое бывает очень редко, а если и забываю, то сразу это вижу.
Такая же программа наоборот поощряет забывать, вредный костыль.
Аноним 2021/03/12 15:53:54  №1965199 228
>>1965197
Бывало такое, что он переключал раскладку там, где не надо?
Ответы: >>1965234
Аноним 2021/03/12 15:54:38  №1965201 229
>>1965172
>>1965174
И как фореч и рекурсия может изменить вложенные массивы?
Ответы: >>1965211
Аноним 2021/03/12 15:58:36  №1965211 230
>>1965201
А ты совсем глупенький?
Может еще за тебя код написать?
Ответы: >>1965243
Аноним 2021/03/12 16:02:14  №1965217 231
>>1965182
Я хз где ты там в пхп кириллицу используешь, у меня даже с фронтом таких проблем нет, по большей части ты один хуй пишешь на английском.
Ответы: >>1965220 >>1965233
Аноним 2021/03/12 16:03:42  №1965220 232
>>1965217
Тудушки и комменты на русском офк временные
Ответы: >>1965228
Аноним 2021/03/12 16:07:42  №1965228 233
>>1965220
Привыкай сразу писать на ингрише, кириллица в коде не нужна.
Ответы: >>1965264
Аноним 2021/03/12 16:10:04  №1965233 234
>>1965217
Там где пхп код и в нем верстка.
Ответы: >>1965241
Аноним 2021/03/12 16:10:52  №1965234 235
>>1965199
Пока нет, но я только только начал использовать.
Аноним 2021/03/12 16:14:51  №1965241 236
>>1965233
Хуево, надеюсь это у тебя просто какой-то тестовый прожект. А вообще, полезно научиться слепой печати, тогда проблема неправильной раскладки уйдет на нет и скорость набора существенно вырастет. Я хз как там щас пунто свитчер работает, но раньше он часто обсирался и включал неправильную раскладку.
Аноним 2021/03/12 16:15:53  №1965243 237
>>1965211
Решил задачу так, норм?
ksort($arr);
asort($arr['a']);
asort($arr['d']);
var_dump ($arr);
Аноним 2021/03/12 16:37:06  №1965264 238
>>1965228
Она в коммиты не попадает. Тудушки сугубо для себя пишу
Аноним 2021/03/12 18:54:26  №1965404 239
>>1965197
>Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл
Такие проблемы возникают только у уверенных пользователей ПК, что смотрят на клавиатуру при печатании. Если ты из таких, то что ты здесь вообще забыл?
И, кстати говоря:
>шиндовс
Ответы: >>1965566
Аноним 2021/03/12 22:38:29  №1965566 240
>>1965404
>И, кстати говоря:
>шиндовс
А в чем собсна проблема?
Аноним 2021/03/13 04:47:56  №1965615 241
>>1965197
>Потом я могу забыть переключить раскладку, допустим мне потребуется написать слово link, а вместо этого слова я напишу дштл

Как ты можешь не заметить, что ты не переключил раскладку, когда печатаешь, если ты смотришь на текст, который печатаешь?
Ответы: >>1965625 >>1965626 >>1965654
Аноним 2021/03/13 05:41:19  №1965625 242
>>1965615
Потому, что я успею нажать пару кнопок быстрее, чем увижу, что текст стал не той раскладки. Можно конечно удалить эти пару символов, переключить раскладку и заново написать как надо.

А можно до конца дописать "дштл" и punto switcher переделает это на link.
Аноним 2021/03/13 05:42:32  №1965626 243
>>1965615
То есть печатаешь же быстро. Мгновенно нажал две кнопки, и потом увидел, что там получилось "дш" вместо "li".
Аноним 2021/03/13 07:20:21  №1965654 244
>>1965615
То есть при слепой печати тоже можно ошибиться с раскладкой, особенно, если ты очень быстро набираешь текст. Ты быстропальцый Абелардо! И ты успеешь нажать пару кнопок и лишь потом поймешь, что эту пару символов напечатал с не той раскладкой!
Аноним 2021/03/13 07:57:20  №1965666 245
Аноны, недавно, велосипедя свою приложуху понял что она кривая и косая. Короче начал читать Зандстру, 5 издание "Объекты, шаблоны и т.п." - реально книга заходит.
Ответы: >>1965672
Аноним 2021/03/13 08:00:11  №1965672 246
>>1965666
пс
Собственно я о том говорю - что до некоторых книг видимо нужно дорасти. У меня возникла проблема что мой код плохо структурирован, я понял что мой код криво - и возникло желание сделать лучше,и понимание того как я уже плохо сделал, и почему.
На мой взгляд эти ооп - проблемы скрывают современные фреймворки с DI - контейнерами работающие на рефлексии.
Когда сам делаешь косо - отлично понимаешь почему косо и неудобно.
Аноним 2021/03/13 10:11:57  №1965788 247
>>1965076

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

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

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

>>1965178

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

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

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

$serviceFabric = new ServiceFabric ( new MonologLoggerService );

$serviceLogger = $serviceFabric->getInstanseLogger();

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

}

}

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

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

Ответы: >>1966008 >>1966076
Аноним 2021/03/13 14:57:10  №1966008 254
>>1965999
Пока я придумал только два варианта:
- сохранять по датам, а потом дополнительный цикл, чтобы из этого построить новую подходящую структуру
- передавать результат в саму функцию и возвращать обратно с добавлениями, ну или через global
Оба хуевы.
Аноним 2021/03/13 15:43:34  №1966059 255
>>1958281 (OP)
Аноны:
1) Можно ли будет перекатиться из php в frontend если что или опыт php не будет учтен для frontend?
2) Какой из PHP фреймворков легче учить Symfony, Laravel или Yii2? И за сколько?
3) Нужна ли математика или знания алгоритмов для разработки и поддержки highload проектов и участия в проектировании архитектуры проектов?
4) До чего нужно дойти в php и MySQL, чтобы спокойно пойти на джуна?
Ответы: >>1966088 >>1967302
Аноним 2021/03/13 15:49:24  №1966063 256
>>1965889

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

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

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

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

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

Ну и вопрос: чем тебе не подходит DI? То есть, просто передавать логгер в конструктор твоего класса? Зачем ты начал изобретать какие-то странные решения?
Ответы: >>1966437
Аноним 2021/03/13 16:00:54  №1966070 257
>>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 или нет. На первый взгляд, он зависит, так как требует его передачи в конструктор.
Аноним 2021/03/13 16:07:53  №1966076 258
>>1965999

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

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

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

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

> Не могу придумать структуру, чтобы последовательно наращивать эти данные для последующей записи.
Непонятно.
Ответы: >>1966079
Аноним 2021/03/13 16:09:06  №1966079 259
>>1966076
Это значение для этого item для этой даты.
Ответы: >>1966092
Аноним 2021/03/13 16:22:46  №1966086 260
>>1965997

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

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

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

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

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

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

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

> И как при посимвольном разборе строки ввести поддержку дробных чисел
Я думаю, можно собирать цифры в строку, а когда мы доходим до знака операции, вызывать функцию преобразования строки в число.
Аноним 2021/03/13 16:23:41  №1966088 261
>>1966059
Да и в ОП посте уроки актуальные? Где можно найти хороший, но не длинный курс
Ответы: >>1967302
Аноним 2021/03/13 16:24:11  №1966089 262
>>1965997

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

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

и затем сразу

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

Аноним 2021/03/13 16:26:54  №1966092 263
>>1966079

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

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

Вариант 2:

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

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

Ответы: >>1966120
Аноним 2021/03/13 16:53:32  №1966120 266
Ответы: >>1966149
Аноним 2021/03/13 17:31:07  №1966149 267
1.jpg (40, 551x228)
228x551
2.jpg (23, 819x291)
291x819
3.jpg (62, 979x238)
238x979
>>1966120
уже пробовал, не работает
Ответы: >>1966164
Аноним 2021/03/13 17:43:06  №1966155 268
Написал тут часть задачи про сайт тестирования. Так как я ленивый мудень, то занято это значительно больше времени, чем хотелось. ОП, посмотри, пожалуйста
https://github.com/deadj/testhub
Ответы: >>1976395
Аноним 2021/03/13 17:55:36  №1966164 269
>>1966149
where выбирает только совпадающие, замени на and
Аноним 2021/03/13 18:21:37  №1966181 270
Нихуя не понял, как решить задачу про банкомат из гайда.
Жадный алгоритм зделол, а как заставить работать эту хуйню с усложнением условий (выдача минимальным числом купюр 6600)- хуй знает. В подсказке к задаче ебаный матан, а я не люблю математику, где букв больше, чем цифр. Я тупой? Выкатываться из треда?
Ответы: >>1966184 >>1972286 >>1972400
Аноним 2021/03/13 18:25:38  №1966184 271
>>1966181
>я не люблю математику, где букв больше, чем цифр
Во всей математике букв больше чем цифр.
Аноним 2021/03/13 19:08:59  №1966202 272
plachuschiykot.jpg (20, 426x314)
314x426
Что-то не могу найти курсов по Магенте 2. Как будто никто не работает с ней. На курсхантере пусто, ютуб разрозненные видео выдает. Подскажите, кто что знает
Ответы: >>1967290
Аноним 2021/03/13 19:13:40  №1966204 273
А зачем сделали что php из коробки без шаблонизатора в хтмл лезет?
Ответы: >>1966206 >>1966240 >>1966301
Аноним 2021/03/13 19:22:30  №1966206 274
>>1966204
90-е года, дикий веб.
Аноним 2021/03/13 20:10:53  №1966240 275
>>1966204
php это и есть шаблонизатор.
Аноним 2021/03/13 22:14:55  №1966301 276
>>1966204
> А зачем сделали что php из коробки без шаблонизатора в хтмл лезет?
YAGNI + KISS
PHP это все-таки бэкенд и шаблонизатор там нужен не всегда (например, если ты только принимаешь данные с формы и выдаешь в ответ какой-нибудь JSON). А если нужен - есть много сторонних решений, используй любое. Зачем разрабам ПХП заниматься шаблонизаторами, если им нужно сам язык развивать и поддерживать.
Аноним 2021/03/14 08:58:15  №1966437 277
>>1966063
>>Вот например, зачем ты сделал фабрику логгеров? Что тебе мешает сразу создать логгер через new MonlogLoggerService?

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

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

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

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

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

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


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

Ответы: >>1966840
Аноним 2021/03/14 18:15:32  №1966840 280
>>1966695
Я же выше скидывал как нужно переделать цикл для корректной работы алгоритма

if (($creditBalance + $creditBalance x 0.03 + 1000) < 5000) {
$sumTotal = $paymentTotal + 1000 + $creditBalance + $creditBalance x 0.03;
echo "С меня хватит! Я выплатил {$sumTotal}";
break;
}
Ответы: >>1966953 >>1966955 >>1968592
Аноним 2021/03/14 19:57:48  №1966918 281
16083948225120.jpg (167, 547x531)
531x547
https://ideone.com/PpCkDJ
Пожилой круг написал на костыличах тупа, остался ряд вопросов: нахуя нужны были $toAngle и $fromAngle? Как напечатать злоебучий пробел, если до него нет других символов? На ideone нельзя кодировку менять? Пришлось английский алфавит выводить.
Ответы: >>1976133
Аноним 2021/03/14 21:26:31  №1966953 282
>>1966840
Спасибо огромное и вообще спасибо тебе за этот Гайд, я давно хожу около этой темы и ты сделал просто супер толчок, именно этого мне не хватало, чтобы дальше изучать самому, ещё раз спасибо, уверен что задам ещё много тупых попросив, но зная что есть такие люди - не страшно делать ничего, редкость в нашей стране
Аноним 2021/03/14 21:28:43  №1966955 283
>>1966840
Спасибо тебе огромное анон, только благодаря твоему найду смог начать самообучение, редко встретишь такого человека, спасибо!!
Аноним 2021/03/15 10:21:56  №1967290 284
>>1966202
>Что-то не могу найти курсов по Магенте 2
Зачем тебе магента?
Ответы: >>1969243
Аноним 2021/03/15 10:28:15  №1967302 285
>>1966059
1. Можно, но придется изучать новые темы: работу браузера, верстку, жс, жс фреймворки (они работают немного по другим паттернам, нежели бек)
2. Laravel для простого старта. Yii2 устарел. Symfony может показаться переусложненным.
За сколько - от тебя зависит.
3. Математика не нужна. Алгоритмы только основы чтобы не делать запросы к базе в цикле и потом удивляться, а че так медленно. Higload больше про оптимизацию узких мест, про инфраструктуру, про хитровыебанные запросы в бд, про кеширование и т.д.
4. Быть в состоянии запилить CRUD приложуху (на подобии задачи про студентов) на одном из современных фреймворков
>>1966088
Ларакасты глянь например
Аноним 2021/03/15 16:37:01  №1967679 286
анонсы, я немножко в ступоре. подскажите один момент. вот есть класс с 4 протектед методами. и есть паблик метод который является аналогом конструктора (класс используется для рендера форм). и вот такой вопрос: мне сверху приходит айдишник формы от 1 до 5 если что, и в зависимости от него я должен дернуть соответствующий protected метод чтобы он отрендерил нужную форму. как такое провернуть с максимально нормально кодстайлом? а то сейчас на ум приходит только тыкать пять if где внутри будет тупо return $this->renderFormName();
Ответы: >>1967716 >>1967803
Аноним 2021/03/15 17:02:29  №1967716 287
Аноним 2021/03/15 18:24:27  №1967801 288
есть база данных с графами "ингридиенты" "блюда"
например, одна строка из базы данных: лук укроп картошка мясо = пюре зразы котлеты картошка
есть кнопка "поиск"
за сколько анон готов сделать поиск по бд?:
1) Вбиваешь "картошка" - выводятся все результаты, где "картошка" хоть слева, хоть справа
2) Вбиваешь в поиск "картошка = " и он искал картошку только в ингридиентах
3) Вбиваешь в поиск "= картошка" и он искал картошку только в продуктах
И если находится такое слово, то выводятся пользователю все строки из базы данных в изначальном формате:
"лук укроп картошка мясо = пюре зразы котлеты картошка"
на биржи не иду, хочу поддержать нашего анона
Ответы: >>1968051 >>1968348
Аноним 2021/03/15 18:24:57  №1967803 289
Аноним 2021/03/15 18:36:56  №1967817 290
Swool рабочая тема?
Ответы: >>1967869
Аноним 2021/03/15 19:16:21  №1967869 291
>>1967817
Русский программист swool становится большой богатый, много риса и нефритовый стержень
Ответы: >>1967881
Аноним 2021/03/15 19:37:16  №1967881 292
Аноним 2021/03/15 23:43:41  №1968051 293
>>1967801
Лол, задача на пару часов.
Скок платишь?
Ответы: >>1969273
Аноним 2021/03/16 09:04:03  №1968348 294
>>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/ сюда например с пруфом (чеком) или попущен.
Ответы: >>1968352 >>1968533
Аноним 2021/03/16 09:11:07  №1968352 295
>>1968348
быстрофикс

абу звездочки проебал после SELECT-ов в 1 и 2 случаях
Аноним 2021/03/16 11:37:48  №1968533 296
>>1968348

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

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

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




В чем я не прав?
Ответы: >>1968597
Аноним 2021/03/16 12:13:45  №1968593 298
без цикла работает нормально, загоняю в цикл и получаю ошибку
Ответы: >>1968661
Аноним 2021/03/16 12:18:50  №1968597 299
Ответы: >>1968613
Аноним 2021/03/16 12:19:12  №1968598 300
всем привет, собираюсь вкатиться в пыху.
несть несколько вопросов. буду благодарен, если ответите.
1. Что почитать из русской литературы?
Пока склоняюсь к Котерову + параллельно гуглить
2. В книгах сейчас в основном пыха 7-ая, как потом свитчнуться на 8?
3. мне 25 (не поздно вкатываться?) и я манагер, собираюсь учиться по 2-3 часа по вечерам и на выходных по 5-6. это очень хуево?
Ответы: >>1968619 >>1968887 >>1968897
Аноним 2021/03/16 12:33:04  №1968613 301
>>1968597
А, точно, но всеравно у меня выдется ошибка, не могу понять вч ем проблема того тчо я высрал
Ответы: >>1968661
Аноним 2021/03/16 12:34:29  №1968619 302
>>1968598
Просто начни вкатваться по инструкции в шапке, как только начнешь понимать принцип работы языка - будешь вдаваться в подробности
Аноним 2021/03/16 13:02:45  №1968661 303
Ответы: >>1968799
Аноним 2021/03/16 13:14:00  №1968671 304
структура.png (27, 584x347)
347x584
запрос.png (30, 589x343)
343x589
>>1968533
авотхуй
пики смотри
Аноним 2021/03/16 14:51:07  №1968799 305
image.png (57, 778x829)
829x778
>>1968661
Писал выше, вот полный текст, не могу понять в чем именно я ошибся
Ответы: >>1968846 >>1969126
Аноним 2021/03/16 15:16:05  №1968846 306
>>1968799
Сотри 24 строку. Ideone, кстати, подсвечивает такие ошибки во время редактирования кода.
Ответы: >>1968889
Аноним 2021/03/16 15:49:54  №1968887 307
>>1968598
Начни дрочить как хобби, и выкинь нахуй далеко маня мечты про вкат, про тыщи денег и маня успех. Если ты сейчас по жизни сосешь хуй, то дело в первую очередь в твоей личности и образе мышления и привычках. И поверь - ты так же будешь учить пхп как живешь - через пизду. И работать будешь также, если дотянешь до этого - через пизду и за три копейки.
Начни лучше с личных качеств.
А прогинг как хобби - это может и не зайти нихуя.
Ответы: >>1968892 >>1968897 >>1969128
Аноним 2021/03/16 15:50:19  №1968889 308
>>1968846
Спасибо, рад как ребёнок)
Аноним 2021/03/16 15:51:24  №1968892 309
>>1968887
п.с. мимо 34 лвл, типа вкотился потому что хуебень уже сам пишу всякую за деньги , за 3 блядь года.
но я по вышке - ойти
Аноним 2021/03/16 15:57:15  №1968897 310
>>1968887

>>1968598

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

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

В чём может быть дело?
На этом же хостинге лежит сайт на Laravel.
C ним таких проблем нет. Если отредактировать blade-файл, то изменения подхватываются на лету.
Ответы: >>1969232 >>1970124 >>1970145
Аноним 2021/03/16 16:20:59  №1968934 312
начал учить пхп и решил окончательно перекатиться на линукс.
как поднять свой сервер?
поставил апач 2 и пхп 8.0.3
запускаю в терминале апач и по пути "/var/www/html/test
" есть мой пхп файл, он и обрабатывается.
пока на этом остановлюсь и буду так учить пхп. это правильно?
(знаю про ламп и готовые сервера, но решил попробовать вот так по-деревенски)
Ответы: >>1968937
Аноним 2021/03/16 16:21:00  №1968935 313
>>1968897
Слушай, я столько это говна в своей голове перекрутил, что мне в пору в тиктоке блядь людей жизни учить я полу серьезно, я даже имею концепты и темы о чем говорить. Я на этой хуйне собаку сожрал. И полностью принял то что твой успех - это ты сам. Ты точка отсчета.
А люди тащатся в прогинг как за серебрянной пулей что решит их все проблемы - хуй. Проблемы только сам человек может решить, когда осознает.
Ответы: >>1969128
Аноним 2021/03/16 16:22:45  №1968937 314
>>1968934
Нахуй тебе сервера вообще?
Дрочи в консоли основы.
Ответы: >>1968946
Аноним 2021/03/16 16:31:48  №1968946 315
>>1968937
какие основы в консоли?
основы линукса? или что?
Ответы: >>1968957 >>1968968
Аноним 2021/03/16 16:44:11  №1968957 316
>>1968946
начни с прав на каталоги и файлы
Ответы: >>1968961
Аноним 2021/03/16 16:46:40  №1968961 317
>>1968957
chmod 777, мне этого достаточно
Аноним 2021/03/16 16:50:58  №1968968 318
Untitled.png (219, 1920x1170)
1170x1920
>>1968946
Да всего. Открываем справочник, веб из этого нужен только нескольким пунктам в конце, и то они решаются средствами фреймворка, поэтому учатся отдельно.
Ответы: >>1968981
Аноним 2021/03/16 16:57:31  №1968981 319
>>1968968
я не знаю английского.
Ответы: >>1968985 >>1969693
Аноним 2021/03/16 17:00:57  №1968985 320
>>1968981
При чем тут английский? Я тебе говорю, что 95% возможностей языка не требует веба.
Ответы: >>1968990
Аноним 2021/03/16 17:11:01  №1968990 321
>>1968985
а причем тут не требуют веба? я хочу сразу понять работу серверов и т.д. Хочу это всё делать в линуксе, а не в ебливой винде
Ответы: >>1968993 >>1969132
Аноним 2021/03/16 17:14:41  №1968993 322
>>1968990
Потому что ты на ровном месте намного усложняешь всё.
Но если хочется, то почему нет.
Ответы: >>1969001
Аноним 2021/03/16 17:21:18  №1969001 323
>>1968993
усложняю потому что пока не особо понимаю, что к чему. Хочется всё и сразу. Послушаю твоего совета и пока буду не спеша осваивать язык.
Аноним 2021/03/16 19:16:53  №1969126 324
>>1968799
А мб начнешь писать код в IDE и запускать локально?
Там глядишь и иде подсветит ошибки, и в консоли при запуске выдаст стектрейс
Аноним 2021/03/16 19:19:22  №1969128 325
>>1968935
>>1968887
Говорят, у коучей прорвало, захлестнуло даже наш тред
Ответы: >>1969383
Аноним 2021/03/16 19:22:40  №1969132 326
>>1968990
Тогда поднимай нжинкс, чтобы он при загрузке линя автоматом поднимал сервер. А потом упакуй это в докер и так же, чтобы автоматом поднимало.
Только это путь в девопсы, а не бекендеры.
Аноним 2021/03/16 20:04:23  №1969194 327
Как пхп исп ядра проца?
Только одно?
Аноним 2021/03/16 20:37:41  №1969232 328
>>1968914
На stackoverflow посоветовали выполнить: php app/console cache:clear --env=prod.

Проблема в том, что в проекте нет ни app/console ни bin/console.
Симфония как будто не установлена полностью. Composer install тоже не срабатывает (проблемы с совместимостью пакетов).
Ответы: >>1970124
Аноним 2021/03/16 20:48:57  №1969243 329
Ответы: >>1969287
Аноним 2021/03/16 21:45:44  №1969273 330
>>1968051
500 руб за код и ещё 500 если созвонимся в скайпе и расскажешь, как работает код и немного основных вопросов по пхп, но не дольше часа
@Dima_Kedr
Аноним 2021/03/16 21:58:38  №1969287 331
Ответы: >>1969298
Аноним 2021/03/16 22:40:54  №1969298 332
Аноним 2021/03/17 05:05:48  №1969383 333
>>1969128
О да, коучем быть заебись - втираешь банальщину, еблом торгуешь. Ахуительно. Главное ебло построже делать, что бы окружающие думали что ты тайное знание открыл.


Аноним 2021/03/17 10:36:02  №1969690 334
Анон, подскажи по доктрине. Есть джве сущности Tag и Post с отношением one to many. Нужно получить с помощью кверибилдера только те теги, у которых есть хотя бы один пост
Ответы: >>1969713
Аноним 2021/03/17 10:40:39  №1969693 335
Аноним 2021/03/17 11:13:38  №1969713 336
Аноним 2021/03/17 18:38:54  №1970124 337
>>1968914
Если ты уверен что шаблон точно тот, значит дело в кэше

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

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

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

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

Это выебоны программиста?
Ответы: >>1970734
PHP + API Аноним 2021/03/18 13:31:27  №1970697 345
Аноны, можете накидать пример моих действий, есть 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 если приоритетное не отвечает или тормозит
Ответы: >>1970728
Аноним 2021/03/18 14:34:30  №1970728 346
>>1970697
Чистый курл не нужен, юзай газл, твоя задача замечательно ложится на промисы

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

В твоём коде выполнится последовательно
Ответы: >>1970732 >>1970759
Аноним 2021/03/18 14:35:43  №1970732 347
Аноним 2021/03/18 14:37:39  №1970734 348
>>1970388
да, код полностью эквивалентен
class A
{
private $varA = 1;
}
Аноним 2021/03/18 15:06:32  №1970759 349
>>1970728
>В твоём коде выполнится последовательно
То есть если 1 API не доступно весь скрипт будет висеть ожидая его ответа? Или у curl_init есть какой-то таймаут ожидания ответа после которого он дропает запрос и идёт дальше по коду?

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

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

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

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

Пока для меня загадка только в том в какой последовательности я получу ответы если сделаю запрос сразу на несколько API, я так понял что код будет идти последовательно без асинхрона, особенно благодаря CURLOPT_CONNECTTIMEOUT, чтобы читать следующий API, если предыдущий не дал ответ за указанное время, надеюсь всё так
Ответы: >>1970987 >>1971034
Аноним 2021/03/18 19:25:54  №1970987 355
>>1970833
Пхп по своей природе синхронен. Так что первый запрос в апи будет ждать ответа, либо конца таймаута
Ответы: >>1971012 >>1971034
Аноним 2021/03/18 19:55:21  №1971012 356
>>1970987
Охуенно, завтра начну тестировать кашу что я придумал, ещё раз спасибо
Аноним 2021/03/18 20:22:32  №1971034 357
>>1970833
>>1970987
Есть multicurl, нк и вообще в газзле промисы есть, все не так просто
Аноним 2021/03/19 01:42:23  №1971121 358
Господа сеньеры, какой дистрибутив линукс посоветуете осваивать нулевому вкатышу? Убунту? Дебиан? Минт? Генту? Арч? БолгенОС?
Аноним 2021/03/19 03:05:57  №1971128 359
>>1971121

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

Из различных десктопов мне больше всего нравится Mate десктоп с переработанным Гномом 2, если там конечно от него что-то ещё осталось.
Аноним 2021/03/19 07:41:43  №1971192 361
>>1971121
Любой популярный. Как освоишься, уже будешь дрочить разные дистрибутивы, DE и конфиги под свой вкус.
Ответы: >>1972022
Аноним 2021/03/19 08:07:06  №1971215 362
>>1971121
>нулевому вкатышу?
Убунту.
Ответов-советов нагуглить на нее проще всего.
Аноним 2021/03/19 13:42:44  №1971543 363
Аноны давно уже вывалился из темы, в PHP данные на страницу так и выводятся с помощью echo? Например я хочу сделать мелкое API которое просто пройдя через 7 кругов ада выдавало бы мне ссылку, я в него вывожу результат простым echo?
Ответы: >>1971547
Аноним 2021/03/19 13:43:23  №1971544 364
Прарни, какую IDE посоветуете для обучаюгося-нулевого-соплепомнойного-понадусерового-какло-швайно-вкатыша?
Ответы: >>1971549 >>1971680 >>1972194
Аноним 2021/03/19 13:44:43  №1971547 365
>>1971543
Да, только тебе наверное не в HTML это все нужно получать, а в каком-нибудь JSON, т.е. помимо echo нужно будет еще и заголовки поменять
Ответы: >>1971553
Аноним 2021/03/19 13:45:12  №1971549 366
>>1971544
Визуальная Студия Код
Ответы: >>1971595
Аноним 2021/03/19 13:46:51  №1971553 367
>>1971547
Заебись, пиздец чё серьёзно от echo так и не ушли и всё выводится им родимым? Ну ещё понятно вар дампом, но это другое
Ответы: >>1971554
Аноним 2021/03/19 13:49:14  №1971554 368
>>1971553
> от echo так и не ушли
Куда уходить и зачем? Вместо echo сделать huecho? И что это даст? Если тебе нужна гибкость и удобство - обмазывайся любым шаблонизатором на выбор. В Си printf уже 50 лет используют и ничего.
Ответы: >>1971568 >>1972025
Аноним 2021/03/19 13:51:06  №1971559 369
image.png (56, 1274x321)
321x1274
image.png (90, 1600x680)
680x1600
Делал спиздил сайт на php 5, который опенсервер сейчас не поддерживает. На php 5 всё работало. Как это подправить под php7-8? Помогите долбаебу плз
Ответы: >>1971562 >>1971570
Аноним 2021/03/19 13:52:46  №1971562 370
>>1971559
Пиздец... пиши с нуля лучше.
Ответы: >>1971563
Аноним 2021/03/19 13:53:47  №1971563 371
>>1971562
Я бы не задавал такой вопрос, если бы мог с нуля
Аноним 2021/03/19 14:00:20  №1971568 372
>>1971554
Я только ЗА, просто что не возьми везде всякие пидоры-нигеры обязательно всё переделывают потому что НЕ МОДНО НЕ ТОЛЕРАНТНО, УСТАРЕЛО И НЕ ЕБЁТСЯ В ЖОПУ, НАДО ПЕРЕДЕЛОТЬ
Аноним 2021/03/19 14:02:58  №1971570 373
>>1971559
1. У тебя же в ошибке все написано. В $_SESSION не получается найти ключ user_authed. Ты его сам туда пишешь или это какое-то стандартное значение?

2. Зачем ты этот ключ проверяешь двумя условиями, если можно воспользоваться одним с else?
Ответы: >>1971621
Аноним 2021/03/19 14:42:11  №1971595 374
Аноним 2021/03/19 15:08:29  №1971621 375
image.png (47, 1109x407)
407x1109
>>1971570
>1. У тебя же в ошибке все написано. В $_SESSION не получается найти ключ user_authed. Ты его сам туда пишешь или это какое-то стандартное значение?
На php 5 все работало, мне кажется тут неверный синтаксис для нового php
>2. Зачем ты этот ключ проверяешь двумя условиями, если можно воспользоваться одним с else?
Потому что я ничего не понимаю. Мне просто интересно почему это не работает сейчас
Ответы: >>1971629 >>1971657
Аноним 2021/03/19 15:16:07  №1971629 376
>>1971621

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

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

Ответы: >>1971646
Аноним 2021/03/19 15:21:50  №1971635 377
Как нормально писать на Laravel?
В документации и на ларакастах всяких логика в контроллерах и фасады. Не пойму, это просто примеры для краткости, или действительно все так пишут?
У меня почему-то такие вещи вызывают отвращение. Пока что делаю так: для каждой модели создаю сервис, который эту модель декорирует.
Как логика, так и любые запросы к БД оборачиваются в сервис. В итоге контроллер непосредственно общается только с сервисом.
Во избежание копипасты был создан базовый сервис с наиболее используемыми методами: create, find, delete, update, all и т.д.
А чтобы не копипастить вообще любой понадобившийся метод из квери билдера в сервис, я просто сделал публичным метод, который возвращает билдер модели.
Нормально делаю, или ненормально? Если ненормально, то как надо?
Ответы: >>1971682
Аноним 2021/03/19 15:31:04  №1971646 378
>>1971629
Что мне сделать что бы сайт то заработал...
Ответы: >>1971647 >>1971683
Аноним 2021/03/19 15:34:19  №1971647 379
>>1971646
Нахуй На фриланс пройди. Никто тут не будет за тебя твою работу выполнять, в говнище колупаясь.
Аноним 2021/03/19 15:50:49  №1971657 380
>>1971621
> Мне просто интересно почему это не работает сейчас
Нет, ты просто хочешь чтобы из тебя наводящими вопросами выудили всю нужную информацию и написали тебе рабочий код.

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

> мне кажется тут неверный синтаксис для нового php
Раз кажется - берешь ошибку и копируешь ее в гугол. Вот что говорит документация по поводу функции которую ты пытаешься использовать https://www.php.net/manual/ru/function.mysql-query.php Нужно переделать код и использовать вместо неё другую
Аноним 2021/03/19 16:23:43  №1971678 381
>>1971121
Ща бы вместо кодинга пердолингом заниматься
Ответы: >>1972022
Аноним 2021/03/19 16:24:32  №1971680 382
>>1971544
Шторм - стандарт индустрии
Аноним 2021/03/19 16:27:52  №1971682 383
>>1971635
Ты сделал репозиторий, а не сервис. Либо смесь сервиса и репозитория
Ответы: >>1971848
Аноним 2021/03/19 16:28:21  №1971683 384
>>1971646
Выкинь это говно и пиши на современном пхп
Аноним 2021/03/19 21:24:49  №1971848 385
>>1971682
>смесь сервиса и репозитория
Задумывалось это. Хотя, я так задумался, что для некоторых моделей у меня логика отсутствует, и эти "сервисы" действительно являются репозиториями.
Причем вообще бесполезными, так как абстракции никакой по сути и нету.
Надо будет удалить их. Только что вместо них использовать? Фасады богомерзкие? Внедрять инстанс модели в зависимость?
Ох как же сложно с этим вашим актив рекорд. Вот в доктрине на тебе entity, на тебе entity manager, на тебе репозиторий. Бери и пользуйся. А тут уже какой день пытаюсь со всем этим говном совладать
Аноним 2021/03/20 05:34:26  №1972020 386
>>1971121
Точно не арч, дебиан потому-что это системы для системных администраторов которым нужна система с минимальным набором стартовых программ. Даже не как новичку, но и профи бы посоветовал Fedora, Ubuntu (Мне не нравится) и это впринципе всё что требуется. Все системы на GNU+Linux похожи и разницы в них мало, в основном различия в сообществах, а так всё тоже самое. (Я бы посоветовал Fedora)
Аноним 2021/03/20 05:36:34  №1972022 387
Аноним 2021/03/20 05:36:58  №1972023 388
Аноним 2021/03/20 05:40:38  №1972025 389
>>1971554
>В Си printf уже 50 лет используют и ничего.
У нас есть не просто printf, у нас есть printf с разными вкусами!
Аноним 2021/03/20 06:03:38  №1972034 390
Сап двач!
Подскажите вкатывалщику на пыхе. Фриланс, хороший вариант получения опыта? Именно нулевому разрабу, без опыта.
Ответы: >>1972041 >>1972068 >>1972183
Аноним 2021/03/20 06:20:43  №1972041 391
>>1972034
Я тоже нуб, думаю если опыта вообще нет, то во фриланс сразу нельзя, нужно портфолио стартовое сделать, щас этим занят. Пет проекты итд. Тоже интересно узнать как начинать.
Ответы: >>1972058
Аноним 2021/03/20 06:43:11  №1972058 392
>>1972041
Как опыт думаешь получать? Через стажировки?
Ответы: >>1972184
Аноним 2021/03/20 07:06:51  №1972068 393
>>1972034
Фриланс на пыхе это чаще всего задачи вроде "у нас тут есть куча говнокода, нужно добавить туда еще говнокода". Сомнительный способ научиться грамотно погромировать. Тем более если ты без опыта.
Ответы: >>1972075
Аноним 2021/03/20 07:15:36  №1972075 394
>>1972068
Как тогда опыт, этот получать? Через стажировки?
Ответы: >>1972077
Аноним 2021/03/20 07:17:23  №1972077 395
>>1972075
Пилишь проектики для себя. Например, в шапке есть задача. Сделал, показал анону, твой код обосрали, переделал. Потом берешься за проект посложнее. И так далее.
Ответы: >>1972079
Аноним 2021/03/20 07:20:05  №1972079 396
>>1972077
Эти проекты годятся для трудоустроиства? А то РАБотадалям коммершеский опыт подавай
Ответы: >>1972185
Аноним 2021/03/20 07:41:20  №1972095 397
К большому кристалу можно только за бабло портаться?
Аноним 2021/03/20 10:02:03  №1972183 398
>>1972034
Фрилансить нужно будучи хотя бы мидлом. Дадут тебе хотелок кабанчика - что будешь с этим делать?
Ответы: >>1972188
Аноним 2021/03/20 10:02:44  №1972184 399
>>1972058
Опыт получать через пет проектики.
Можно брать существующие проекты и колхозить свой клон с нуля
Аноним 2021/03/20 10:03:31  №1972185 400
>>1972079
Если красиво покажешь и расскажешь - вполне.
А если каким-то чудом выдашь их за комм опыт, то с руками оторвут
Ответы: >>1972189
Аноним 2021/03/20 10:05:58  №1972187 401
Вопрос!
Есть легаси проект со своей функцией загрузки классов.

Как безболезненно начать параллельно юзать composer, не порушив старую архитектуру?
Ответы: >>1972196
Аноним 2021/03/20 10:09:47  №1972188 402
>>1972183
Тоже верно, спасибо учту
Аноним 2021/03/20 10:10:10  №1972189 403
>>1972185
Благодарю, буду пробывать
Аноним 2021/03/20 10:17:32  №1972194 404
Аноним 2021/03/20 10:19:44  №1972196 405
>>1972187
А в чем у тебя там конфликт?
Ответы: >>1972205 >>1972328
Аноним 2021/03/20 10:29:50  №1972205 406
>>1972196
composer начинает пытаться загружать свои зависимости другим, старым загрузчиком
Ответы: >>1972328
Аноним 2021/03/20 12:15:22  №1972286 407
>>1966181
>>1958281 (OP)
Та же фигня, может подскажет кто-нибудь? Предыдущие задачи все решил.
Ответы: >>1972296 >>1972379 >>1972400
Аноним 2021/03/20 12:38:44  №1972296 408
>>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
Ответы: >>1972299 >>1972379
Аноним 2021/03/20 12:43:19  №1972299 409
>>1972296
>В той же ситуации. Я уже дальше пошел, решил оставить банкомат на потом
А мне ОКР не позволяет.
Аноним 2021/03/20 13:09:09  №1972328 410
>>1972205
>>1972196
всё, решил:
благо легаси-классов в данном случае немного,
пришлось прописать их composer.json/dump-autoload
и полностью отказаться от старого загрузчика
Аноним 2021/03/20 13:18:34  №1972338 411
Аноны, я достаточно хорошо понимаю как работают потоки в node.js. А точнее речь о файлах которые загружает браузер в форме с типом
multipart/form-data. А с пхп что то я запутался. Хотя на пхп много больше написал.
В пхп все автоматом из коробки делается, файл попадает в $_FILES , а сам сохраняется где то в temp. А как мне непосредственно а пхп получить доступ к потоку запроса. Я допустим каждые 1000 байт входящего файла хочу подергать?
Аноним 2021/03/20 13:56:37  №1972379 412
>>1972286
>>1972296
Я посмотрел по ссылке, вроде несложно там обьяснено.
Строим табличку, сколько нужно купюр для каждой суммы от 0 до нужной, если есть вариант с меньшим числом большими купюрами, то заменяем.
Ну и потом раскручиваем обратно, отнимая наибольшие от суммы.
https://ideone.com/cO6Pdf
Аноним 2021/03/20 14:19:41  №1972393 413
Такой вопрос. Что более распространено в компаниях: Apache+Mysql, или Nginx+Postgres? Чему большее внимание?
Ответы: >>1972411
Аноним 2021/03/20 14:29:42  №1972400 414
>>1966181
>>1972286

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

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

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

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

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

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

---

Что касается алгоритма в интернете, он работает с неограниченным кол-вом купюр. Если вы хотите его использовать, его надо модифицировать для работы с ограниченным кол-вом купюр, и проверить, возможно ли это вообще.
Ответы: >>1972985
Аноним 2021/03/20 14:55:28  №1972411 415
Ответы: >>1972425
Аноним 2021/03/20 15:22:23  №1972425 416
Ответы: >>1972681
Аноним 2021/03/20 16:58:16  №1972500 417
>>1958281 (OP)
Подскажите современную альтернативу TimThumb
Аноним 2021/03/20 20:41:29  №1972681 418
Аноним 2021/03/20 22:44:18  №1972785 419
Та ну нахуй ваш Ларавель. Кусок конченного кривого говна. На таком писать - себя не уважать. крик души
Ответы: >>1972895
Аноним 2021/03/21 07:17:58  №1972895 420
>>1972785
Ну не пиши, тебя никто не заставляет
Ответы: >>1972969
Аноним 2021/03/21 08:02:19  №1972909 421
Аноны, дайте совет - как правильно проверять загружаемые пользователем на сервер файлы?
Мне нужно только картинки загружать.
Сначала я проверяю 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

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

работают, только не пойму какое исключение они возвращают.
По факту просто не качает файл и все. А скрипт обработчик пытается выполниться
Аноним 2021/03/21 08:57:04  №1972942 423
sanitizing.png (12, 693x185)
185x693
Привет, аноны. Недавно вкатился. Пилю сайт с базами данными, чисто потренироваться. Может кому встречалась какая-нибудь супер классная и полезная статья, про то, как отсанитарить инпут правильно? Английский свободный. Какие-то статьи читал по теме, но они касались этой темы довольно поверхностно. Пока пользуюсь пикрилейтед, но подозреваю это не самый лучший способ.
Ответы: >>1972950 >>1973197
Аноним 2021/03/21 09:06:59  №1972950 424
>>1972942
Лол, какая-то дедовская хуйня. Для базы есть prepared statements, которые решают проблемы с эскейпингом и иньекциями, дальше можно заэнкодить через htmlspecialchars, чтобы избежать всяких xss.
Аноним 2021/03/21 09:32:19  №1972969 425
>>1972895
И не буду пока барин не заставит
А ты дрочи себе свои фасады
Аноним 2021/03/21 09:54:47  №1972985 426
Ответы: >>1973174 >>1973186
Аноним 2021/03/21 10:09:07  №1973009 427
Аноны, что нужно использовать в пхп для работы с изображениями? Мне нужно приводить все загружаемые картинки к одному размеру.
Так я понял по документации для этого используются три варианта пакетов: GD , Gmagick , ImageMagick.
Какое из них нужно выбрать?
Или еще варианты есть?
Ответы: >>1973192
Аноним 2021/03/21 12:52:52  №1973174 428
Ответы: >>1973212
Аноним 2021/03/21 13:08:48  №1973186 429
>>1972985

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

То есть, берем все возможные количества первой купюры, для каждого количества перебираем все возможные кол-ва второй купюры, для каждой пары первых двух количеств перебираем все возможные кол-ва третей купюры и тд.
Ответы: >>1974062
Аноним 2021/03/21 13:12:20  №1973192 430
>>1973009
>ImageMagick
Я вот это использовал, очень удобно, можно использовать готовый пример. Использовал это для генерации картинок для мобильной версии сайта, чтобы ускорить загрузку сайта для телефонов, там же все равно маленький экран
Аноним 2021/03/21 13:14:59  №1973197 431
>>1972942
Чем что-то запрещать в логине, проще что-то разрешать. Сделать регулярку на лат.буквы и цифры. А для пароля сделать ввод чего угодно. Ты ведь все равно прогонишь это через htmlspecialchars, PDO, плюс пароль наверняка захэшируешь с солью. Никакая гадость не пролезет.
Аноним 2021/03/21 13:26:11  №1973212 432
Аноним 2021/03/21 13:42:22  №1973248 433
Анон, помоги! Не могу понять, в чем я ошибаюсь. Решаю задачу про написание текста по кругу. Вроде все сделал верно, но при написании теряется первый символ введенной строки: https://ideone.com/t381vz
А еще мой круг кажется мне кривоватым, как бык поссал.
А еще поясни, пожалуйста, в чем сакральный смысл переменной $height и почему она у нас равна именно 30?
Ответы: >>1973263
Аноним 2021/03/21 13:49:58  №1973263 434
>>1973248
for ($i=0;$i<=$phraseLenght;$i++)
<= на один раз больше срабатывает и затирает первый.
Аноним 2021/03/21 18:16:04  №1973544 435
Что быстрее: условный круд на симфони или ларе?
Аноним 2021/03/21 18:20:24  №1973548 436
>>1958281 (OP)
Анончики помогите. С меня - нихуя.
На диске лежит файл image.png, размер 20000 на 20000. Вывести картинку как баннер размером 200 на 100 пикселей.
Ответы: >>1973559
Аноним 2021/03/21 18:27:49  №1973555 437
>>1973544
Скорее все упрется в железо и разница будет несущественной.
Аноним 2021/03/21 18:28:54  №1973559 438
>>1973548
Берешь любую библиотеку для обработки изображений, делаешь баннер и выводишь.
Ответы: >>1974266
Аноним 2021/03/21 21:58:41  №1973736 439
Ответы: >>1973738 >>1973774
Аноним 2021/03/21 22:02:23  №1973738 440
>>1973736
>>1973544
Вообще в таком сравнении смысла не очень много. Понятно, что всегда быстрее минимальный на pure PHP -- и, собственно, что?
Ответы: >>1973759
Аноним 2021/03/21 22:58:47  №1973759 441
>>1973738
Я бы лучше смотрел на среднее время ответа сервера, тот же вордпрес упаси боже может две секунды думать в то время пока лара и симфони >50мс
Аноним 2021/03/21 23:08:42  №1973774 442
>>1973736
О, спасибо. По-моему разница в три раза - это не чутка.
Ответы: >>1973984
Аноним 2021/03/22 08:19:14  №1973984 443
>>1973774
Думаю, при наполнении данными и применении кеширования эта разница нивелируется. Но если просто нужна причина не учить сложную симфони -- то да, можно опираться и на этот тест.
Аноним 2021/03/22 09:44:27  №1974058 444
>>1973544
Там для лары на днях Octane презентовали - асинхронный фреймворк на основе swool. 6к рпс из-коробки
Аноним 2021/03/22 09:51:40  №1974062 445
Ответы: >>1975462
Аноним 2021/03/22 12:53:00  №1974252 446
С ларавелом выгоднее всего учить Vue. А с Symfony так же, или на Angular/React в связке с ним больший спрос?
Аноним 2021/03/22 13:10:44  №1974266 447
Аноним 2021/03/22 14:23:29  №1974408 448
PHP 8 уже используют, его нужно учить или подойдут туториалы, где изучают PHP 7?
Ответы: >>1974423 >>1974562
Аноним 2021/03/22 14:31:47  №1974423 449
>>1974408
Легаси евривеа. Даже 7 то не везде используется (тут вот недавно был анон с говнокодом, который работал только в 5), а 8 и подавно. Смотри мануалы по 7, а про 8 разве что для общего развития можешь почитать.
Аноним 2021/03/22 15:13:51  №1974498 450
>>1958281 (OP)
Хочу устроиться на работу PHP джуном, но до этого я готовился на frontend (js). Можете подсказать короткий путь, как подготовиться к собесу за 18 дней?
Я учился по книжке ОПа, но дошел до ООП, да и все забыл уже по PHP. Но что такое циклы, условия и ООП в целом я знаю.
Сейчас уже нет времени решать задачи про банкомат и расчет маршрута как же я с ними марался.
Может подскажете видео курсы или книгу? Так же нужно выбрать фреймворк, который легче и быстрее учится. И если можно по нему тоже курс какой-нибудь.
Вот требования вакансии:
Знание PHP, ООП, MVC
Опыт написания SQL запросов
Опыт использования хотя бы одного из популярных PHP фреймворков (Symfony, Laravel, Yii2)
Аноним 2021/03/22 15:33:57  №1974544 451
>>1974498
> 18 дней
> Сейчас уже нет времени решать задачи

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

> Вот требования вакансии:
Сомневаюсь что ты за 18 дней наберешься таких знаний. Скорее всего у тебя просто каша будет в голове. Мне кажется лучше пока забить на фреймворки и сконцентрироваться на самом PHP + MYSQL. Сами фреймворки просто базово изучить, а на собеседовании так и сказать что ты опыта работы с ними не имел, но очень хочешь и готов быстро во все вникнуть в боевых условиях.
Аноним 2021/03/22 15:39:06  №1974553 452
>>1974498
Фронтенд на пых сменить ебать ты дурачина! А так шансов пройти у тебя собес мало, зубри вопросы для собеседований из гугла
Ответы: >>1974609
Аноним 2021/03/22 15:47:24  №1974562 453
>>1974408
Бери самый свежак стабильную версию.
Присесть на хуи легаси всегда успеешь
Аноним 2021/03/22 15:48:38  №1974565 454
>>1974498
>Хочу устроиться на работу PHP джуном, но до этого я готовился на frontend (js). Можете подсказать короткий путь, как подготовиться к собесу за 18 дней?
Ждем через 18 дней пост у мобильщиков/датасаентистов с аналогичным содержанием
Ответы: >>1974609
Аноним 2021/03/22 16:21:03  №1974609 455
>>1974553
>>1974565
Господа, в моей мухосрани мало вакансий (на джуна только вот эта). Я согласен, очень глупо метаться с фронта в бэк, но там и зп белая, а горький опыт показывает, что зп в черную это не всегда хорошо. Короче компания вроде приличная, судя по отзывам знакомого знакомых. Плюс там знания js тоже желателен. Нуууу, не знаю короче, я так долго вкатывался, уже не знаю что делать
Аноним 2021/03/22 16:45:31  №1974634 456
>>1974498
Ну ты охуевший это не плохая характеристика на самом деле, такие люди и добиваются успеха.
Я вот почти год как вкатываюсь, все задачки из ОП-поста сделал. Перед этим 4 года вышки писал на всем на чем только можно, помимо кодинга там хорошо выучил сети и базы данных, и всё равно не считаю что я уже готов к работе.
Я ж еще столько всего не пробовал: API, реактивные фреймворки, докер, тесты ( всегда впадлу было их делать ) и прочее. Да и вообще себе много чего не представляю о реальных веб-приложениях.
Ответы: >>1974678 >>1974718
Аноним 2021/03/22 17:43:14  №1974678 457
>>1974634
>Я вот почти год как вкатываюсь, все задачки из ОП-поста сделал. Перед этим 4 года вышки писал на всем на чем только можно, помимо кодинга там хорошо выучил сети и базы данных, и всё равно не считаю что я уже готов к работе

Чел...
Аноним 2021/03/22 18:09:25  №1974702 458
Как перестать орать?
Вкратце о ситуации: в самом аналоговнетном фреймворке пхп-мира есть строка, обнуляющая дробную часть float при отправке запросов в БД.

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

https://github.com/laravel/framework/issues/23850
Ответы: >>1974795 >>1975280
Аноним 2021/03/22 18:23:55  №1974718 459
>>1974634
Пока ты теряешь время, требования всё больше растут, и становиться всё сложнее вкатиться
Ответы: >>1974746 >>1974813
Аноним 2021/03/22 19:14:04  №1974746 460
>>1974718
Требования не менялись лет пять..
Ответы: >>1974794
Аноним 2021/03/22 20:23:50  №1974794 461
>>1974746
Пора высунуть голову из песка и сходить по собесам.
Сейчас даже на джунские ваки требуют знаний архитуктуры и хуйлоада, не говоря уже про всякие докеры
Аноним 2021/03/22 20:25:00  №1974795 462
>>1974702
В ларе и не такой говнокод встретить можно
Ответы: >>1975272
Аноним 2021/03/22 20:46:35  №1974813 463
1616446038692.png (1104, 900x900)
900x900
>>1974718
Все равно мои скиллы быстрее требований растут.
я обязательно вкачусь...
Ответы: >>1974821
Аноним 2021/03/22 21:01:22  №1974821 464
>>1974813
Если б так было - ты бы уже джуном пахал
Аноним 2021/03/23 09:07:34  №1975112 465
Я сделал кнопку, которая уменьшает на 1 значение одной из переменных в массиве $_POST:
<input type="submit" name="warmday" value="<?= ($_POST['warmday'] - 1) ?>">
Проблема в том, что при нажатии этой кнопки все остальные значения удаляются и остаётся только эта изменённая переменная. Как сделать так, чтобы остальные значения сохранялись?
Ответы: >>1975258 >>1975473
Аноним 2021/03/23 10:06:15  №1975142 466
image.png (281, 923x838)
838x923
>>1958281 (OP)
ОП, два дня туплю в эту задачку, куда копать, подскажешь?
Ответы: >>1975149
Аноним 2021/03/23 10:14:42  №1975149 467
>>1975142
Нужно просто вывести значения массивов? Или тут какая-то более глубокая задача?
Ну вот тебе первая строка:
echo $word1[3]. ' ' .$word2[0]. ' ' .$word3[3];
Остальные строки по этому принципу
Ответы: >>1975159
Аноним 2021/03/23 10:28:54  №1975159 468
image.png (294, 1017x941)
941x1017
>>1975149
Вот, я думаю так будет понятней, нужно, чтобы рандомно делался стишок из слов в массиве
Ответы: >>1975194
Аноним 2021/03/23 11:08:37  №1975194 469
>>1975159

Просто в массивах цифры меняешь рандомайзером., перед этим посчитав величину массива.
Ответы: >>1975218 >>1975254
Аноним 2021/03/23 11:24:04  №1975218 470
Аноним 2021/03/23 12:06:44  №1975254 471
>>1975194
дело в том, что в подсказках автор задачи предлагает делать это через цикл, я хуй его пойми как пустить это дело через цикл
Ответы: >>1975260 >>1975473
Аноним 2021/03/23 12:14:06  №1975258 472
>>1975112
>все остальные значения удаляются и остаётся только эта изменённая переменная
Это происходит, т.к. ты при новом запросе посылаешь новый пост, в котором есть только твоя переменная.
Вообще $_POST - это те данные, которые пришли из текущего запроса. Она не хранит данные из прошлых запросов.
Хочешь хранить данные дольше одного запроса - используй другие хранилища, например куки, файл или бд
Аноним 2021/03/23 12:23:13  №1975260 473
>>1975254
Делаешь табличку вида [1 => $words1]
И потом вторую с нужными цифрами.
Аноним 2021/03/23 12:39:01  №1975272 474
>>1974795
Недавно, кстати, попробовал Lumen вместо лары. И чет не понял, а нахуя нужна лара?
По ощущениям, люмен - то, чем должна быть лара, просто без нескучных обоев.
Ответы: >>1975283 >>1975485
Аноним 2021/03/23 12:50:16  №1975280 475
>>1974702
>eloquent->insert (3.14); // 3 is precise enough!
Не понял. В ишью же вроде сказали что для децимала нужно передавать '3.14' и все будет ок.
Аноним 2021/03/23 12:55:22  №1975283 476
>>1975272
>люмен - то, чем должна быть лара
Люмен - кастрированная версия лары, микрофреймворк. Норм, если нужна апишка или микросервис.

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

Тут получится довольно простой код. Опять же, в случае успеха ты можешь переделать его на функцию-генератор. Но сначала попробуй по-простому решить.
Ответы: >>1976543 >>1981570
Аноним 2021/03/23 16:23:34  №1975473 478
>>1975254

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

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

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

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

>>1975112

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

Ответы: >>1976256
Аноним 2021/03/23 16:41:37  №1975485 479
>>1975272
Вообще наоборот, зачем нужен люмен когда есть лара? В этом люмене постоянно что-то работает не так как в ларе, пакеты часто несовместимы. То, что могло занять 5 минут, может затянуться на пару часов, вот и вопрос, в чем ты выигрываешь выбирая более легкий фреймворк? Я думаю точно не в производительности, шо то шо это ну такое, и явно не в dx. Тогда в чем?
Аноним 2021/03/23 19:31:43  №1975634 480
Снимок.PNG (12, 632x360)
360x632
Снимок1.PNG (13, 630x462)
462x630
Такой вопрос, почему data.message и data.statusreg undefined?
Ответы: >>1975680 >>1976020
Аноним 2021/03/23 20:21:51  №1975680 481
>>1975634
Пустое тело цикла foreach
Ответы: >>1975689
Аноним 2021/03/23 20:37:17  №1975689 482
>>1975680
так при чем тут этот цикл
Ответы: >>1975703
Аноним 2021/03/23 21:04:51  №1975703 483
>>1975689
Вардамп поставь на каждой строчке в пхп и консол лог на каждой строчке в жс - поймешь, где данные теряются.
Пора учиться самостоятельно дебажить
Ответы: >>1975723
Аноним 2021/03/23 21:05:33  №1975704 484
Посоветуйте пожалуйста, книги для backend разработчика. В частности интересуют сети, базы данных итд. В целом, фундаментальные основы. Без привязки к языку программирования.
Ответы: >>1975709 >>1975790
Аноним 2021/03/23 21:12:06  №1975709 485
>>1975704
Для каких целей? Новичек/работающий?
Ответы: >>1975713
Аноним 2021/03/23 21:19:26  №1975713 486
>>1975709
новичок, планирую в пых вкатываться
Ответы: >>1975780
Аноним 2021/03/23 21:25:47  №1975723 487
>>1975703
Ну я выяснил что в data не заносится responce
Ответы: >>1975786
Аноним 2021/03/23 23:41:07  №1975780 488
>>1975713
Тогда лучше для начала код пописать, книжки потом
Аноним 2021/03/24 00:20:14  №1975786 489
>>1975723
Попробуй перед респонсом в пхп ебануть header('content-type: application/json')
Аноним 2021/03/24 00:59:02  №1975790 490
>>1975704
Начнём с вопросов. Ты уже прошёл шапку ОПа?
Ответы: >>1975799
Аноним 2021/03/24 01:24:21  №1975799 491
>>1975790
да, в принципе всё понятно
Аноним 2021/03/24 05:31:20  №1975846 492
А вы изучали php по гайду в самом начале?
Ответы: >>1975867
Аноним 2021/03/24 05:31:57  №1975847 493
И расскажите как начать писать на php
Ответы: >>1975957 >>1976151 >>1978970
Аноним 2021/03/24 06:37:25  №1975867 494
>>1975846
Не всё изучал, только начал. Почему книги спрашивал, потому-что. Возможно придётся свалить, в родную мухосрань, где нет интернета. И нужно учебный материал приготовить. Ну это, при худшем раскладе
Ответы: >>1976148
Аноним 2021/03/24 07:56:12  №1975916 495
Кто-нибудь пользуется Heroku для развёртки сайтов? Хочу туда закинуть своё тестовое на ларавеле, но столкнулся с проблемой конфигов.
У хероку, насколько я понял, два варианта: либо автодеплой с гитхаба, либо ручной коммит через хероку CLI (ещё есть докер, но я в нём ни ухом, ни рылом). Но конфиги-то коммитить нежелательно, .env у гита должен быть в игноре. Плюс, мне нужно И показать код на гитхабе, И развернуть готовое приложение на хероке, И иметь возможность работать с проектом локально.

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

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

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

тоже это варнинг отловить не могу. Откуда он сука лезет.
Ответы: >>1975986 >>1976029
Аноним 2021/03/24 08:31:59  №1975957 497
>>1975847
Скачиваешь OpenServer (он говно и с него придется слезать в будущем, но для начала более чем пойдет), любой текстовый редактор и вперед и с песней.
Аноним 2021/03/24 08:49:09  №1975986 498
>>1975953
п.с.
чето не пойму а с какого хера этот вэрнинг вообще сыпется?
По идее если файл слишком большой - то ошибка эта будет в $_FILES, разве нет?
Аноним 2021/03/24 09:06:52  №1976018 499
Аноны, какой сервер предпочтильнее apache, или nginx? Что в конторах ставят?
Ответы: >>1976154
Аноним 2021/03/24 09:08:37  №1976020 500
>>1975634

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

>>1975916

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

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

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

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

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

Ответы: >>1976123
Аноним 2021/03/24 10:58:31  №1976123 502
>>1976029
Спасибо! Я уже разобрался.
Как ты описал так и было
Аноним 2021/03/24 11:10:38  №1976133 503
>>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 - неудачные имена переменных.

> \tfor($x = 1;$x<80;$x++){
>\t\techo $screen[$y][$x];
Тут можно было использовать implode для преобразования массива в строку вместо цикла.
Аноним 2021/03/24 11:25:38  №1976148 504
>>1975867
Без интернета с пхп каши не сваришь
Аноним 2021/03/24 11:26:11  №1976151 505
>>1975847
Ставишь php, phpstorm и пишешь
Аноним 2021/03/24 11:28:06  №1976154 506
Аноним 2021/03/24 11:43:27  №1976168 507
Из линукс, что нужно знать? bash? Навигация, редактирование файлов итд? Знания админа нужны?
Ответы: >>1976176
Аноним 2021/03/24 11:51:46  №1976176 508
>>1976168
Не повредят. Тебе нужно будет использовать различные консольные утилиты, а скорее всего и базовым администрированием серверов заниматься.
Ответы: >>1976227
Аноним 2021/03/24 12:24:57  №1976227 509
>>1976176
Как доказать, свой знания в линуксе? Если, с программированием понятно, можно ссылку на github предоставить. То с линуксом, приходит на ум, только принести ноут, с установленным, и настроенным линуксом... Я правильно, понимаю?
Ответы: >>1976231 >>1976306
Аноним 2021/03/24 12:27:27  №1976231 510
>>1976227
> Как доказать, свой знания в линуксе
А их будут проверять? Скорее всего зададут вопросы какие-нибудь. Или ты думаешь тебе скажут "ВОТ ТЕБЕ КОНСОЛЬ - УДИВИ НАС ЗА 5 МИНУТ"?
Ответы: >>1976271
Аноним 2021/03/24 12:40:22  №1976256 511
>>1975473
Вот я как раз о том же, на простом коде без цикла я задание выполнил, но вот с перебором массивов мозг вырубается, спасибо за подсказку большое, буду копать дальше, уже что-то получается)
Аноним 2021/03/24 12:43:06  №1976271 512
Аноним 2021/03/24 12:59:07  №1976306 513
>>1976227
Если сумеешь на vds задеплоить свой проект - этого достаточно
Аноним 2021/03/24 13:44:03  №1976395 514
>>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')) {
>\t\t\t$user = new User();
>\t\t\t$user->save();
>
>\t\t\t$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') ||
>\t\t\tResult::where([
>\t\t\t\t['userId', $request->cookie('userId')],
>\t\t\t\t['testId', $id]
>\t\t\t])->count() == 0) {

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

> public function setUserName(Request $request): void
>\t{
>\t\tUser::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 возможности и использовать их
- научиться не писать бизнес-логику стеной в контроллере, а писать его в моделях и сервисах. Это не значит, что контроллеры должны быть пустыми, просто надо научиться понимать, что куда относится.
- более тщательно покрыть тестами
Аноним 2021/03/24 15:44:16  №1976543 515
>>1975462
Спасибо, буду пробовать.
Что можно написать новичку? Аноним 2021/03/25 05:46:27  №1976884 516
Изучаю пхп не так давно, но не знаю что написать можно, для тренировки. Можно идеи и проекты из вашего опыта?
Ответы: >>1976989 >>1977511
Аноним 2021/03/25 08:52:07  №1976989 517
>>1976884
напиши борду простенькую. чтоб можно было треды создавать и отвечать в них.
Аноним 2021/03/25 09:42:34  №1977032 518
Аноны, как называется шаблон/паттерн когда ты в допустим модель , которая уже с БД работает передаешь данные из $post не как массив, а данные из массива в специальный объект засовываешь, и этот объект уже в модель отправляешь.
На меня снизошло откровение, и я до этого сом дошел.
Ответы: >>1977034 >>1977038
Аноним 2021/03/25 09:47:53  №1977034 519
>>1977032
Entity используется в симфони
Аноним 2021/03/25 09:49:16  №1977038 520
>>1977032
Ты говоришь про DTO (data transfer object). Вообще эта история довольно широкая и неоднозначная. Все зависит от используемого стека, иногда DTO - это зло.
Ответы: >>1977561 >>1977613
Аноним 2021/03/25 18:09:42  №1977511 521
>>1976884

В первом посте есть задача про список студентов. Она хороша тем, что к ней идет большое пояснение, что и как лучше делать, чтобы не наступить на грабли.
Аноним 2021/03/25 19:03:38  №1977561 522
>>1977038
Это когда, например?
Ответы: >>1977617
Аноним 2021/03/25 20:16:53  №1977613 523
>>1977038

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

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

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

из фреймворков -- успеешь попробовать лёгкий Laravel или Yii, от сложной Симфони можно сразу ёбнуться
Ответы: >>1977962
Аноним 2021/03/26 09:01:59  №1977962 527
>>1977901
Чего сложного в Симфони относительно Ларавеля? В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.
Ответы: >>1977963 >>1978028
Аноним 2021/03/26 09:05:08  №1977963 528
>>1977962
>В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.

А о какой собсна магии речь идет? Я постоянно слышу про магию в ларавеле, я знаю что там есть свои приколы с Eloquent и магическими геттерами и сетерами, всё настолько тут запущено что даже плагина нормального нет который бы парсил это говно в автодополнение. А кроме ормки что еще то?
Ответы: >>1978028
Аноним 2021/03/26 10:28:54  №1978028 529
>>1977962
>Чего сложного в Симфони относительно Ларавеля?
На симфони довольно сложно писать плохой код. На ларавеле же можно наговнякать всё что угодно вообще не задумываясь, и это будет работать.
>В Ларавеле чтобы что-то написать нормально надо изучить как вся его долбанутая магия работает.
Это чтобы нормально написать. Вот только нормально на ларавеле никто не пишет, не для этого он создан.
>>1977963
>всё настолько тут запущено что даже плагина нормального нет который бы парсил это говно в автодополнение
Есть платный плагин от Аделя Файзрахманова
Ответы: >>1978030 >>1978080
Аноним 2021/03/26 10:33:07  №1978030 530
>>1978028
Хотя, может этот плагин такого и не умеет. Адель же вроде писал в своей книжке, что он докблоки для каждого свойства расставляет.
Аноним 2021/03/26 12:18:10  №1978080 531
>>1978028
>На симфони довольно сложно писать плохой код. На ларавеле же можно наговнякать всё что угодно вообще не задумываясь, и это будет работать.

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

Что такое борда? И под файлопомойкой ты файлообменник подразумеваешь?
Ответы: >>1978233 >>1980601
Аноним 2021/03/26 14:26:21  №1978233 535
>>1978222
>Что такое борда?
Мы с тобой щас на ней сидим

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

> но почему в таком случае есть банки, чьи сайты написаны на битриксе
Если это по сути сайт-визитка, его можно и на вордпрессе сделать. Весь финансовый функционал в банках уж точно не на ПХП крутится.
Ответы: >>1979699
Аноним 2021/03/28 14:37:16  №1979691 539
Возникнут ли у ларавелиста средней руки затруднения при пересаживании на симфони?
Ответы: >>1980401
Аноним 2021/03/28 14:41:56  №1979699 540
>>1979626
Ругают любой, но одно дело, ругать популярную джаву или сишарп, которые являются столпами рпомышленной разработки, другое дело - выслушивать такие же упреки в адрес пхп. Отсуда у меня и возникает вопрос, есть ли место в промышленной разработке для пхп.
Ответы: >>1979701 >>1980410
Аноним 2021/03/28 14:42:32  №1979701 541
Аноним 2021/03/28 15:30:24  №1979764 542
>Я слышал, что симфони - это примерно то же самое, что джавовский спринг.
Я такое тоже слышал. Может кто-то расскажет, зачем тогда нужна симфони? Просто чтобы в два раза меньше разработчикам платить, чем на спринге?
Ответы: >>1979955 >>1982404
Аноним 2021/03/28 17:21:36  №1979883 543
>>1958281 (OP)
Аноны, какой сложности алгоритмы вам приходилось использовать?
Как хорошо нужно знать алгоритмы? Я просто помню когда решал задачу про банкомат в ОП мануале чуть не офигел (не помню сколько недель я потратил на ее решение). А это задачи для новичков, что дальше будет я боюсь представить.
Ну и с матаном аналогично?
Ответы: >>1981416
Аноним 2021/03/28 18:27:21  №1979953 544
Сап двач!
Планирую вкатываться в бэк на пыхе. Но для начала, хочу освойть фронт стек. Какому фреймворку уделить внимание? Vuejs? Или также нужен react?
Ответы: >>1980420
Аноним 2021/03/28 18:27:49  №1979955 545
>>1979764
имхо, думаю это решающий фактор...
Ответы: >>1979997
Аноним 2021/03/28 18:44:51  №1979997 546
>>1979955
Блять, ну почему пыха как Таджикистан в мире программирования?
Ответы: >>1980159
Аноним 2021/03/28 21:10:56  №1980159 547
>>1979997
бизнес, ничего личного...
Ответы: >>1980210
Аноним 2021/03/28 21:59:23  №1980210 548
>>1980159
Нужно основать профсоюз пыхарей и бороться с этой хуйней.
Если взлетит, то язык наконец-то умрет, так как пропадет его последнее преимущество
Ответы: >>1980252
Аноним 2021/03/29 04:32:09  №1980252 549
>>1980210
Последнее преимущество это низкий порог вхождения, но разработчики пыха решили пофиксить это досадное недоразумение
Ответы: >>1980314
Аноним 2021/03/29 05:45:50  №1980264 550
Вопрос к опытным разработчикам, которые пишут тесты на Laravel.
Какую БД используете для тестов?
MySQLi и гоняете тесты в памяти?
Или же создаете отдельную тестовую БД и там тестируете?
Ответы: >>1980265 >>1982392
Аноним 2021/03/29 05:48:26  №1980265 551
>>1980264
Мне интересно узнать предпочтения. Если ещё поясните свой выбор, то было бы вообще замечательно.
Аноним 2021/03/29 08:14:18  №1980314 552
>>1980252
И в каком месте он сложнее стал по сравнению с каким-то 5.6? По моему всё легче и легче: тайпхинты, всяческий синтаксический сахар и прочие вкусности.
Аноним 2021/03/29 10:19:21  №1980376 553
Если контора, публикует вакансии вот уже который месяц. Это говно-вакансия (позиция джуна, трейни)?
Ответы: >>1980388 >>1980994
Аноним 2021/03/29 10:29:59  №1980388 554
>>1980376
Может у них автопубликация стоит, и они уже и забыли про нее
Ответы: >>1980391
Аноним 2021/03/29 10:34:18  №1980391 555
Ответы: >>1980405 >>1980994
Аноним 2021/03/29 10:41:35  №1980401 556
>>1979691
Если сможет скинуть с себя оковы фасадов и актив рекорда, то нет
Аноним 2021/03/29 10:41:36  №1980402 557
Аноним 2021/03/29 10:43:49  №1980405 558
>>1980391
Возможно они таким образом держат у себя стек недорогих стажеров-разнорабочих, которых выпиннывают через месяц и нанимают новых. 15к в ДС это пиздец вообще, наверное на проезд только хватит.
Ответы: >>1980419 >>1980994
Аноним 2021/03/29 10:45:51  №1980410 559
>>1979699
>ругать популярную джаву или сишарп
А пхп непопулярный?

>есть ли место в промышленной разработке для пхп
Открой вакансии, да посмотри, где пхп используют
инб4: там, где не захотели переплачивать сишарп/джава-пидорам
Аноним 2021/03/29 10:49:31  №1980419 560
>>1980405
Тоже так думаю, бизнес по-русски...
И какой вариант тогда, как вкатиться в пых? Может напрямую компаниям писать? Сорян, за глупый вопрос. В отчаянии немного...
Ответы: >>1980423
Аноним 2021/03/29 10:49:57  №1980420 561
>>1979953
Зачем тебе и фронт и бек? Выбери что-то одно, доработай до мидла и тогда уже думай о фулстеке
Ответы: >>1980445
Аноним 2021/03/29 10:52:36  №1980423 562
>>1980419
>как вкатиться в пых?
Как и в любой другой макако-стек: выучить платину вопросов на собесы, сделать спиздить пет, нарисовать опыта в резюме, апплаиться на удаленку на вакансии мидла
Ответы: >>1980442
Аноним 2021/03/29 11:13:03  №1980442 563
>>1980423
сложна блядь... надо быть мастером пиздобольства видимо, как пыня
Ответы: >>1980452
Аноним 2021/03/29 11:14:30  №1980445 564
>>1980420
фронт бэку тоже требуют ведь
Ответы: >>1980453
Аноним 2021/03/29 11:21:36  №1980452 565
>>1980442
А хуле ты хотел? В айти без софт скиллов путь заказан
Ответы: >>1980456
Аноним 2021/03/29 11:21:57  №1980453 566
>>1980445
Ищи нефулстек ваки
Ответы: >>1980458
Аноним 2021/03/29 11:24:40  №1980456 567
>>1980452
наёб называется софт-скиллами?
Ответы: >>1980469
Аноним 2021/03/29 11:25:14  №1980458 568
Аноним 2021/03/29 11:34:12  №1980469 569
Ответы: >>1980494
Аноним 2021/03/29 12:01:41  №1980494 570
>>1980469
буду работать над этим...
Аноним 2021/03/29 13:51:30  №1980601 571
>>1978222
>что такое борда
Охуенно!
Аноним 2021/03/29 21:04:17  №1980994 572
>>1980376
>>1980391
>Опыт работы с 1С-Битрикс / Wordpress / Laravel / Symfony.
>Это говно-вакансия?
Хмм, ну даже не знаю....
>>1980405
>15к в ДС это пиздец вообще, наверное на проезд только хватит.
Неделю назад на dou висела эта же вакансия на удаленку, описание один в один. Для интереса только что нашел в архиве - пишет 350-600$. Джуны из украинских деревень стоят дороже, лол?
Аноним 2021/03/30 04:03:49  №1981069 573
Сап двач. Уже полтора года работаю на дно работе, стек жиквери вордпресс. Пошел туда по финансовым причинам, но у меня сильная тревога от этой работы.
После работы прихожу, и с настроеним "Фух, ну можно и отдохнуть" начинаю пилить что-то на ларавеле и вью.
Может прозвучит самоуверенно, но я знаю кодить, и знаю как вникнуть во что-то относительно непростое за пару дней(наверное у меня такое ощущение просто на фоне тех, кто со мной работает, и ничего не понимает в принципе), и начать что-то делать.
Проблема в том, что у меня 0 релевантного опыта. Полтора года назад я себе накинул год опыта ларавела в выдуманной студии, но на собесах сразу понял что это всё хуйня, все понимают кто я есть на самом деле буквально за пару минут. И дело даже не в этом, я сам понял что в случае с опытом никакие углы не срезать, это реально просто нужно иметь, и это мне нужно.
Я даже свой текущий опыт не могу назвать коммерческим, потому что мой код никто никогда не проверял, никто не говорил как можно сделать по-другому.
У меня уже просто была мысль никому не врать, сказать как есть и надеяться что кто-то в меня поверит. Я даже не знаю как себя охарактеризовать, наверное я джун, с потенциалом в мидла спустя месяца 3-4 в нормальной фирме. Ну и проблема еще в технологиях, вроде имею опыт со многим, но на каких-то вообще минимальных уровнях. Редис? ну как kv хранилище использовал, всё, больше юзкейсов не было. Эластиксерч? Ну как-то настраивал индексацию с заумными фильтрами по доке, ну и всё на этом, больше не трогал никогда. В последнее время вообще очень много фронтом занимался, хоть там меня не ограничивают в стеке особо, понял как относительно правильно писать на вью, попробовал даже новые хуки, очень понравилось. Короче вроде уже и проработал, и денег заработал, и даже апнул софтскиллы некоторые, но сейчас как будто снова вкат как в первый раз будет. Еще постоянная тревога, что я не стою тех денег, которые мне платят. Мне даже как-то неловко штуку просить, хотя понимаю что это обычная зарплата и всем ок.
Ответы: >>1981188 >>1981190 >>1981493
Аноним 2021/03/30 08:54:31  №1981188 574
>>1981069
>Полтора года назад я себе накинул год опыта ларавела в выдуманной студии, но на собесах сразу понял что это всё хуйня, все понимают кто я есть на самом деле буквально за пару минут
Ну так нужен хоть какой-то опыт работы с ларой. Молодец, что пет на ней пишешь.

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

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

>Мне даже как-то неловко штуку просить, хотя понимаю что это обычная зарплата и всем ок.
Это зп джуна
Аноним 2021/03/30 09:51:10  №1981226 576
8wAPE0N8HlI.jpg (62, 550x531)
531x550
Аноны, кто как вкатился? Прокомментируйте мой роадмап.
1. Дрочу по верстку по хтмлакадемии - интерактивный курс за 600р на месяц + пиздженные курсы (м.б. барбик сверстаю).
2. Пижжу курсы Кудлая по пхп, смотрю их, дрочу книгу Скляра по пхп.
3. Наворчиваю Кантора по жсу.
4. Решаю задачки ОПа вплоть до списка студентов.
5. Пижжу курсы Кудлая по ларе и MySql, ларакасты, пишу борду/магазин/блог/рсс-читалку
6. Хожу по собесам, принимаю струи мочи на лицо
7. Вкатываюсь
8. Работаю год, дописываю пет из пункта 5, монетизирую, вывожу на IPO, становлюсь миллиардером
Думаю все займет месяцев 8-9 фултайм учебы. Что скажете, что язабыл? Надо ли вью.жс задрачивать для первой работы? На чем чаще джуны срезаются? Что по советуете?
Ответы: >>1981245 >>1981247
Аноним 2021/03/30 10:08:35  №1981245 577
>>1981226
ну проблема в том, тчо ты задаешь эти вопросы аа не делаешь, я сам вот вкатываюсь, но блять тебе отвечаю, чем трачу свое время, так что пищи код молча и работай
Ответы: >>1981494
Аноним 2021/03/30 10:13:44  №1981247 578
>>1981226
План говно.
В первую очередь нужен кодинг пета с подсматриванием в гугл и доку.
Ответы: >>1981424 >>1981483
Аноним 2021/03/30 12:28:41  №1981416 579
>>1979883
> Я просто помню когда решал задачу про банкомат в ОП мануале чуть не офигел
Я чет совсем обмяк от нее, даже желание пропало что-то делать (жадным алгоритмом сделал почти сразу, а вот дальше...)
Ответы: >>1981487
Аноним 2021/03/30 12:34:01  №1981422 580
объясните, пожалуйста,
зачем нужна перезагрузка страниц (формы) после отправки товара в корзину?

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

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

сама страница корзини не обрабатывает заказ, это делает другой файл на бекенде, но корзина обрабатывает товар, чтобы правильно показать конфигурацию, допустим когда собираешь себе комп
Ответы: >>1981475
Аноним 2021/03/30 12:38:55  №1981424 581
>>1981247
Двачую этого. Курсы по айти - клеймо дэбила. Неважно, оплаченные или пизженные.
Аноним 2021/03/30 13:40:36  №1981475 582
>>1981422
> зачем нужна перезагрузка страниц
Сейчас есть возможность вообще сделать весь твой сервис без единой перезагрузки (SPA), например, посмотри как работает ВК.

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

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

Если кратко, ты вместо дефолтного экшена формы делаешь этот экшен аяксом. Через JS сериализуется форма, отправляется запрос и принимается ответ. Потом уже исходя из ответа ты совершаешь какие-то действия, показываешь уведомление что все ок, либо ошибку. На бэкенде соответственно должен быть обработчик, который будет возвращать респонс, например в JSON формате.
Ответы: >>1981502
Аноним 2021/03/30 13:44:27  №1981483 583
>>1981247
А разве комааниям, не позуй на пет проекты?
Ответы: >>1981523
Аноним 2021/03/30 13:45:37  №1981487 584
>>1981416
Не опускай руки, отдохни, и вернись к задаче. Можешь на мелкие куски разбить задачу, как вариант.
Аноним 2021/03/30 13:50:07  №1981493 585
>>1981069
У тебя хоть какой-то опыт есть. Попробуй по собесам походить. Не зацикливайся на себе, от этого хуже только. И удачи тебе анон.
Аноним 2021/03/30 13:50:52  №1981494 586
Аноним 2021/03/30 13:58:26  №1981502 587
>>1981475
привет, спасибо

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

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

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

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

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

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

Короче, смотри куда ведет форма добавления товара и по аналогии с удалением сделай добавления. Т.к. у тебя там вью, я хз как правильно это сделать, к сожалению с вью не работал почти.
Ответы: >>1982245
Аноним 2021/03/30 14:16:29  №1981523 589
>>1981483
Похуй-не похуй.
Разрабу нужна практика, чтобы на собесе было о чем поговорить.
Спросят так: Сыч, а как бы ты сделал хуйню_нейм? А ты её уже делал и рассказываешь.
Ответы: >>1981525
Аноним 2021/03/30 14:18:36  №1981525 590
>>1981523
> Сыч, а как бы ты сделал хуйню_нейм? А ты её уже делал и рассказываешь.
В идеале ты должен рассказать несколько способов как можно сделать хуйню_нейм и пояснить достоинства и недостатки каждого способа. Тогда к тебе точно вопросов не будет.
Ответы: >>1981551
Аноним 2021/03/30 14:40:52  №1981551 591
>>1981525
Альтернативные способы так же придут по мере работы с петом
Аноним 2021/03/30 15:05:11  №1981570 592
Screenshot3.png (23, 882x633)
633x882
>>1975462
>1) сделать по принципу работы счетчика за электричество. Как он работает? Изначально все цифры на нем равны 0, например 0000. Затем увеличивается последняя цифра, когда она доходит до 9, она сбрасывается в 0 и увеличивается предыдущая (получается 0010). И так далее, до комбинации вроде 9999.
Ты можешь точно так же увеличивать число купюр.Сначала увеличивать самую младшую, потом сбросить ее в ноль и увеличить следующую, итд. Только разница в том, что максимальное число купюр будет не 9, а какое-то другое число, и для каждой купюры свое. То есть, начать с комбинации 0 0 0 0 и идти до максимально возможной.

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

Ну да я тупой и что...
Ответы: >>1982390
Аноним 2021/03/30 20:16:44  №1982002 593
>>1981188
Спасибо за поддержку, для меня это важно
Аноним 2021/03/31 08:02:40  №1982245 594
>>1981514
да, по названию, как-то так работает вся система, но там специфика такая.

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

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

только льзя ли так? вроде все просто? но каженться, что это очень дырявая система получаеться, или нет?
Аноним 2021/03/31 09:52:24  №1982325 595
Немножко оффтоп, но спрошу тут. Появилась задача написать ТЗ для некоего сервиса, где будут регаться пользователи с разными ролями и совершать различные действия. Я пока пишу все текстом, но возможно есть какой-то инструментарий для визуального проектирования? Типа тут у нас вот такие сущности, тут другие, это все вот так то связано. Как вообще принято проектировать и описывать сложные системы? Я сам ни разу не занимался таким, что-то даже непонятно с какого бока подойти. Текстом то вроде получается описать все, но целостной картины как все должно работать из текста не возникает. Либо, может я тупой такой.
Аноним 2021/03/31 11:12:05