Двач.hk не отвечает.
Вы видите копию треда, сохраненную 20 сентября 2022 года.

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

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

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

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

Предыдущий тред был тут: >>2241613 (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 - это что-то вроде их хабра.

Вот неофициальный роадмап (карта того, что желательно изучить): https://miro.com/app/board/o9J_lbUUBBQ=/

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания 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? — Да, однозначно. Посмотри любую вакансию.
Оформление кода 2 2347130
Код лучше писать аккуратно и оформлять, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

Для этого достаточно вставить код на 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/
16236178381240.jpg69 Кб, 1516x1076
3 2347315

> 2k2k2


> PHP

4 2347372
>>347315

>любой год


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


>что-то кроме кобола, иными словами

Php.jpeg49 Кб, 530x342
5 2347483
6 2347518
>>347315

>2k2k2


>аниме на аве


>мать в канаве

7 2347788
ку,захотел написать бота для тг на php. Я правильно понимаю,чтобы он постоянно работал сервер должен быть постоянно включенным и я должен постоянно обновлять страницу со скриптом?
кто шарит, объясните ,пожалуйста, как это все работает
9 2348375

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


>решил стать веб макакой


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


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


Ну и хули делать то? Копаться в этой параше с надеждой на то что через год-два перекачусь в что-то нормальное?
10 2348383
Сап, я возможно, не по адресу, но в шапке увидел знакомые слова (HTML + CSS). Вопрос такой: если нужно создать сайт в одно лицо, то как обычно вы поступаете с фронт-стороной? Верстаете все руками или на каких-то быстрых конструкторах? на каких? Вообще мое основное это java бэк, но наша контора настолько оптимизирована, что приходится разбираться в совсем непривычном
11 2348484
Сап, как поставить библиотеку на хост через композер?
12 2348522
>>348375
Битрикс на пхп сделан?
13 2348580
Когда стоит переходить к изучению фреймворка?
14 2348708
>>347129 (OP)
4 года назад я увидел этот тред, меня завлек анимешный и ламповый гайд и я решил стать web разрабом.
Какая же это была ошибка.
Поработал только 4 месяца версталой
15 2348742
>>348708

>версталой


>пэхапэ тред


Где связь?
16 2348753
>>347788
обновлять постоянно страницу - плохая идея. предполагаю, что бота делаешь через getUpdates, такой бот в бесконечном цикле получает и обрабатывает новые сообщения. запускать надо через php cli, а не обновлять постоянно страницу.
если хочешь хостить на хостинге для сайтов - только webhook. через апи указываешь ссылку на скрипт, телега сама будет слать туда новые события то ли в php://input, то ли в $_POST, не помню
17 2348781
>>348742
Неясно.
Для несведущих: пыха это про бекенд, а вёрстка - про фронтенд.
Я понимаю если бы он в фуллстеки вкатился, но нет же.
18 2348782
>>348742
ВЕРСТАЛОЙ НА WORDPRESS, ПОПРОШУ!!!!
А если серьезно, увидел задание с таблицей и студентами, охренел, подумал, что лучше стану Frontend... ну и понеслось. А если бы не этот анимешный тред, к web разработке может бы не притронулся.
Справедливости ради, сложным для меня в задании со студентами являлась именно верстка
19 2348784
>>348580
Бамп вопросу. Из проектов есть ту ду лист, список студентов из шапки треда,что-то вроде галереи, сайт с отображением погоды (юзал API)и расписание для разных групп универа. Могу ли я перейти к изучению ларавеля?
20 2348786
>>348784
Разрешаю.
21 2348791
>>348786
Спасибо блять. Спрашиваю мнение шарящих челов, ты к таким относишься?
22 2348797
>>348791
Ты задал дебильный вопрос и получил соответствующий ответ.

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

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

Получится - красавчик. Не получится - вернись через месяц и попробуй еще раз.

А дибильных вопросов задавать не нужно.
23 2348804
>>348797
Понятно,извини
24 2348809
>>348804
Ты меня не обидел. Не волнуйся.

Через две-три недели вернись в тред и расскажи, как идут дела. Сделаешь хорошее дело для других растущих ребят.
25 2348810
>>348809
Хорошо
26 2348830
>>348383
Bootstrap или другой CSS-фреймворк. Изучается быстро, даёт вполне невырвиглазный результат, если соблюдать основные правила дизайна (вроде "не более 3-х цветов на странице"), классно не получится, но для нетребовательного заказчика сойдёт.
А если нужно что-то красивое и "вкусное", есть бесплатные template'ы, но вот если потом придётся что-то серьёзно поменять на странице, будет беда...
27 2348840
>>348484
установить сам composer.
инициализировать проект (composer init)
вызвать composer require author/package
А затем пойти читать в доках, как работает сам композер, какие у него есть команды, что такое /vendor/autoload.php, стандарт PSR-4 и так далее
28 2348865
>>348840
Установить кампозер на хост?
Заранее сори за тупой вопрос
29 2348878
>>348865
в ispmanager есть shell-клиент, через него можно запустить composer.phar
30 2348965
>>348784
Можешь перейти к поиску работы
31 2348971
>>348784

Давно пора. Только если ты хочешь познакомиться с чуть более правильным использованием ООП и готов к x10 сложности, то попробуй Симфони.
32 2349540
Тестирую апишку через постман. Вставляю туда свой json и отравляю реквест, но как мне его принять в laravel?
33 2349575
>>349540
Мб так
$data=file_get_contents('php://input')
34 2349597
>>349575
Почему эта тема стала всплывать постоянно?
35 2349598
>>349597
Не понимаю что в твоём сообщении значит тема
36 2349599
>>349598
Прием json в пхп через file_get_contents('php://input')
37 2349604
>>349599
Ну а как без этого?
38 2349612
>>349604
Поддерживаю
39 2349630
>>349575
Как отправить курл запрос с джейсоном с серв1 на серв2 и принять джейсон? Надеюсь, понятно обьяснил
40 2349658
Шалом, няши. Хочу однажды проснуться fullstack, решил начинать с бэкэнда, тянуло к разным языкам (Go, Js, Sisyarp), но я вот остановился и подумал.

PHP это

1) 75% веба
2) Легкий вкат на начале, но такие же возможности роста, а вакансий больше.
3) Базовая база веба, а его понимание для фуллкека это хлеб

И подумал таки изучать PHP

This is right way?
41 2349736
>>349658
Фуллкеку должно быть поебать на язык: PHP, JS/TS, Python, Ruby, Go, Java/Scala, C#. Я рекомендую начинать с сишки, чтобы ты понимал как оно всё работает. Как напишешь свой первый веб-сервер поверх epoll и первое расширение для sqlite, то можешь браться за свою скриптопарашу.
42 2349793
>>349658

>Легкий вкат на начале


Так бывает вообще сейчас?
43 2350098
>>349793
Да, в 1с
44 2350126
>>350098
И в пыхе.
45 2350209
shop.lenovo.com
как они это сделали вместо lenovo/shop.com
47 2350277
предложили поменять стек с symfony + api platform на nestJS
кайфану от смены стека или не?
JSLzp.png125 Кб, 1280x800
48 2351277
Привет, пхпач.
Как реализовать кодинг на сайте, как на пикриле ?
49 2351337
>>351277
Это долго и сложно
50 2351368
>>351277
отправлять код на сервер, запускать новую копию интерпретатора в изолированном окружении, возвращать ответ
51 2351563
Если кто-то работал с библиотекой telegram bot sdk, помогите.
Не приходят обновления через getWebhookUpdates (). С чем это может быть связано? Setwebhook сделал, все норм.
52 2351687
>>351563
SSL стоит?
53 2351698
>>351687
Нет
54 2351707
>>351698
телеграм присылает события только по https, гугли letsencrypt, там бесплатные сертификаты
55 2351713
>>351707
Лучше nginx в режиме reverse proxy + certbot сразу нагуглить.
56 2351984
Где работку искать?
fdg.jpg48 Кб, 637x301
57 2352104
Заебало на хуй, запилите уже блять в шапку треда как эту пыху устанавливать
58 2352138
>>352104
гугл
nestjs.png75 Кб, 1335x874
59 2352387
>>350277

>nestJS


Хуйня перехайпленная. Там нет ничё такова, чего не было бы в express.js. Так, чисто синтаксическим сахарком посыпали, добавили декораторов, которые вообще нихуя не делают. Серьёзно, ты почитай их документацию, они прямо говорят типа "ну да, мы знаем, что всё это одной строчкой обычным express / fastify делается". И сами же приводят список аналогичного кода. Там есть ноль целых хрен десятых полезного функционала: роли, валидации, orm. Но я не думаю, что ради валидаций стоит ставить такого слона на сервер. В остальном, проще поставить обычный express-generator, он плюс-минус mvc тебе сгенерирует.
60 2352404
>>352387
По крайней мере там typescript и DI из коробки. Уверен что на проекте
1) для чужого дяди
2) когда нет времени вылизывать код
3) на рынке куча интересных вакансий, я на проекте долго не задержусь...
ты непременно будешь ковырять вилкой говнокод, в котором
4) нет тестов, потому что говнокод не реально протестировать
Так выглядит рядовой проект на express
61 2352486
>>352404
И чё DI? Они дополнительную сложность добавили в проект. Там, где можно было обычной функцией/классом обойтись, придётся заводить ебучие сервисы, контроллеры, фабрики, хуябрики. А что толку? Ничего же принципиально нового они не дают. Это дрочка ради самой дрочки. Синтаксический сахар.
62 2352608
>>352104

В твоем репозитории скорее всего нету пакета с данной версией. Надо сделать так:

- сначала обновить информацию о доступных пакетах их репозиториев:

sudo apt-get update

- сделать поиск по слову php и отсортировать результаты:

apt-cache search php

- затем установить выбранный пакет:

sudo apt-get install название пакета
63 2352614
>>352486

Ты, по моему, просто не понимаешь, что такое DI. Смысл DI не в том, чтобы городить лишние фабрики, а чтобы решить проблему получения зависимостей для функции или класса.
64 2352741
Какова производительность гонять json из фронта в пхп?
65 2353091
>>352741
всё хорошо
такие вещи вообще не должны бескопоить в 99% случаев
66 2353121
Что лучше random_int или mt_rand?
67 2353123
Как можно запилить в проекте старую версию композера и ларавеля? Предположим на опен сервере выставил седьмую пыху, и нужно все в районе 2017 года, как это все устанавливать в domains?
68 2353140
Поставил PHP8.1, закинул свой проект, который писал под 5 версию. Охуел от числа ошибок и варнингов. Ошибки исправил, большинство варнингов - тоже. Никаких плюсов от перехода на новую версию не заметил.
69 2353144
>>353140
Прекрашай тролить тупостью.
70 2353588
Ищу компаньона на собственный проект. Вкачу в докер, на простых задачах выучим yii2, познакомимся с работой через api, расскажу за композер. Проект ноукоммерс зарплаты не будет, пилю его для себя. Для чего мне это, спросишь ты, а я тебе не отвечу. Проект уже приелся т.к пилю его больше года, плюс времени стало меньше. Помогу со всеми вводными что бы ты мог вкатиться в it. С тебя знания php и yii2 хотябы на минималках. Интересно? Пиши в телегу @hcan359
16492992064690.jpg24 Кб, 423x222
71 2353688
72 2354991
>>353123
Все не надо, разобрался
73 2354993
какой же ларавель саил копрокал пиздец просто
я бы уже образ быстрее ручками собрал припердолив нжинксу чем разбираться почему что и где не дает установить нужные зависимости
74 2354995
про то что этот кал с мускулем из коробки не запустил пустой проект я даже и говорить не буду
75 2355001
>>351984
да хоть на HH
76 2355019
в итоге я пытался прикрутить стандартную регистрацию на laravel/breeze. Ок, прикрутил, пытаюсь зарегистрироваться - хуйня какая-то, connection refused. Гуглю часов 6, и потом, чисто случайно, меняю DB_HOST 127.0.0.1 на mysql (имя контейнера), и, о чудо, работает. Но теперь у тебя явно вопрос - а нахуя я вообще трогал DB_HOST и поломал, но все намного интереснее - DB_HOST=127.0.0.1 выдает ошибку при попытке сделать миграцию артисаном. Да. В итоге у меня теперь интересная последовательность действий - меняю дб хост, делаю миграцию, меняю дб хост обратно. Пиздец ваш ларавель дерьмо блядь.
77 2355020
DB_HOST=mysql выдает ошибку*
быстрофикс
78 2355082
>>355019
Макакен, в докере разберись, а не куски .env из гугла копипасти.
79 2355274
так ладно еблан все таки я а не писавший саил
80 2355275
так ладно еблан все таки я а не писавший саил
81 2355287
>>355019

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

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

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

А если ты хочешь со своего компьютера подсоединиться к сервису внутри контейнера (например, к БД), ты тоже должен использовать IP-адрес контейнера или DNS-имя, а не 127.0.0.1

То есть, представляй себе, что каждый контейнер это как отдельный компьютер со своим адресом.
82 2355293
>>355082

Ты даешь неправильный совет. Если анон сейчас начнет читать документацию Докера, он половину не поймет.

В данном случае сначала надо изучить основы сетевых технологий: что такое сетевой интерфейс, сокеты Беркли (не вебсокеты), протоколы IP, UDP, TCP, что такое маршрутизация и пакеты, система DNS, файл hosts, команды ifconfig, ss, ping.

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

И после этого можно читать документацию Докера.

Докер это не инструмент для новичков-вкатышей. Это для тех, кто знает Линукс и сетевые технологии и свободно ориентируется в командной строке.
83 2355298
>>355293
То, что ты перечислил, в моем понимании для вкатуна в бек подразумевается, иначе всё как магия выглядит.
84 2355302
https://www.youtube.com/watch?v=zJ6WbK9zFpI
Объяснение слоев в Dockerfile, маппинг портов и т.д. все есть вкратце. Для начала хватит.
85 2355316
>>353121

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

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

Приведу упрощенный пример, как можно генерировать псевдослучайные числа (mt_rand устроен во много раз сложнее, я же специально упростил логику для понимания). Пусть у нас формула для генерации следующего числа (y) из предыдущего (x) такая:

y = (11 * x + 7) % 10

%10 значит "остаток от деления числа на 10", то есть, последняя цифра из числа.

Если мы возьмем начальное значение x = 1 и подставим в формулу, то получим новое случайное число y = (11 * 1 + 7) % 10 = 18 % 10 = 8. Если мы подставим в формулу 8, то получим 5. И так далее.

Последовательность чисел, которые сгенерирует генератор, состоит из 10 цифр и выглядит так:

1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 ....

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

(если тебе интересно, откуда я знаю эту формулу и числа в ней, то читай википедию: https://ru.wikipedia.org/wiki/Линейный_конгруэнтный_метод )

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

Для генератора выше, если ты получил числа 8 и 5, то ты знаешь, что дальше он выдаст число 2.

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

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

То есть, mt_rand подходит для ситуаций, где не критично, если кто-то угадает числа.

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

Если тебе нужно генерировать много криптографически надежных чисел с большой скоростью, то придется раскошелиться на аппаратный генератор случайных чисел. Или использовать современный процессор, в который такие генератор часто встроен (если ты конечно доверяешь Intel или AMD и веришь, что американское правительство не встроило закладки в этот генератор, чтобы обчистить твое казино, прочитать твои сообщения и взломать СМС-коды на твоем сайте).
85 2355316
>>353121

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

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

Приведу упрощенный пример, как можно генерировать псевдослучайные числа (mt_rand устроен во много раз сложнее, я же специально упростил логику для понимания). Пусть у нас формула для генерации следующего числа (y) из предыдущего (x) такая:

y = (11 * x + 7) % 10

%10 значит "остаток от деления числа на 10", то есть, последняя цифра из числа.

Если мы возьмем начальное значение x = 1 и подставим в формулу, то получим новое случайное число y = (11 * 1 + 7) % 10 = 18 % 10 = 8. Если мы подставим в формулу 8, то получим 5. И так далее.

Последовательность чисел, которые сгенерирует генератор, состоит из 10 цифр и выглядит так:

1 8 5 2 9 6 3 0 7 4 1 8 5 2 9 ....

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

(если тебе интересно, откуда я знаю эту формулу и числа в ней, то читай википедию: https://ru.wikipedia.org/wiki/Линейный_конгруэнтный_метод )

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

Для генератора выше, если ты получил числа 8 и 5, то ты знаешь, что дальше он выдаст число 2.

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

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

То есть, mt_rand подходит для ситуаций, где не критично, если кто-то угадает числа.

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

Если тебе нужно генерировать много криптографически надежных чисел с большой скоростью, то придется раскошелиться на аппаратный генератор случайных чисел. Или использовать современный процессор, в который такие генератор часто встроен (если ты конечно доверяешь Intel или AMD и веришь, что американское правительство не встроило закладки в этот генератор, чтобы обчистить твое казино, прочитать твои сообщения и взломать СМС-коды на твоем сайте).
86 2355654
DREAM MACHINES ТОП!
87 2355756
Привет, Анон, подскажи, оформлял список преимуществ, создал див, сделал его флексом, размеры накидал дочерним и вышло 2 ряда по 4 преимущества, вроде бы все как хотел, но стоят преимущества слева-справа почти впритык, в тз виден отступ пикселей 10-20 без указания его, якобы он такой дефолтный, но почему у меня нет?
88 2355985
>>355756

А почему отступ должен быть? Отступы надо делать либо с помощью margin/padding, либо сделав ширину элементов меньше, чтобы осталось свободное место.

То есть, если у тебя 2 колонки и ширина элемента равна 50%, то отступа не будет. А если ты сделаешь ее 45%, то оставшиеся 10% превратятся в отступ между колонками.

Если ты не задаешь ширину элемента в флексбоксе явно, то она рассчитывается автоматически по алгоритму shrink-to-fit, про который я написал урок: https://github.com/codedokode/pasta/blob/master/html/shrink-to-fit.md#алгоритм-shrink-to-fit
89 2356093
Товарищи, а можете починить ссылку на учебник из шапки?
90 2356438
>>356093

Спасибо за информацию. К сожалению, продление предыдущего домена стоит 10 долларов, а смена домена бесплатная, потому мы переехали.

Ссылка на учебник: https://codedokode.github.io/phpbook

Если кому-то захочется скачать учебник на компьютер, то заходите на https://github.com/codedokode/phpbook и нажмите зеленую кнопку Code, там выберите Download ZIP.
91 2356454
>>356438
Спасибо за труд. Подскажи пожалуйста хороший курсик по ларе, на примере блога там например, еще раз спасибо.
92 2356826
Ajax еще актуален?
php11.PNG69 Кб, 982x920
93 2356828
То ли я тупой, то ли лыжи не едут.
https://leetcode.com/playground/mnKTdZCE
94 2356843
>>356828
В цикле ты обращаешься только к тому, который отправляешь в функцию.

Обращайся к тому, который ты переопределяешь

Вместо $l->val, используй $c->val
image.png18 Кб, 433x391
95 2356845
>>356828
И, возможно, так будет лучше
96 2356847
>>356845
Спасибо.
Алсо, торжественно клянусь впредь использовать нормальные имена переменных, даже когда печатаю с тапка телефона.
97 2356855
>>356828
А эти структуры данных вообще нужны в разработке веб-сайтов? Тем более с нуля, а не основе библиотек?
98 2357161
Господа ПХПшники может кто подскажет как хитро реализовать следующую задачу:
Есть страничка на пхп, нужно не дожидаясь загрузки контента (хтмл) отправлять get request на определенный урл. Отправлять не блокируя остальной код. На респонс плевать, главное очень быстро и не дожидаясь респонса и не блокируя рендер контента кидать реквест на определенный урл.
99 2357222
>>357161

Мб заслипать на секунду
100 2357253
>>357222
ПХПшники нэвэр чейндж
Один спрашивает как сделать хуйню, другой ему рандомную хуйню советует
101 2357277
>>357161
fetch js?
102 2357639
>>357161
Если я правильно понял (если вообще реально понять хуйню, у которой даже название есть - xy problem), можно открыть tcp соединение через сокет, сформировать get запрос (это несложно - там всего лишь текст), отправить и.. всё, response можно не считывать.
xcv.jpg126 Кб, 1440x254
103 2358201
Как фиксить?
image.png131 Кб, 758x727
104 2358305
сап тред, просматривал видеоуроки по шаблонам проектирования и столкнулся с непониманием тех строк которые подчеркнул. Зачем они нужны, объясните кто нибудь.
105 2358311
>>358305
Кажись понял,это чтобы вернуть ссылку на текущий объект
106 2358316
Запрос на url - ошибка 401
Затем запрос на на домен/challenge
Опять запрос на то же url - успешно, код 200

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

Что это за 2ch.hk/challenge? Для чего это? Каким образом это защищает сайт?
107 2358319
>>358311
Не текущий объект, а объект messenger внутри текущего объекта.
108 2358328
>>358319
Спасибо :3
109 2358351
подскажите сайт где можно взять шаблон блока фотогалереи для своего лендинга, бесплатно, а то я подписался на простой лендинг а не умею нифига
110 2358862
>>357639
Добавлю, что частично response сосчитать всё-таки нужно, чтобы убедиться, что реквест дошёл. Например, status-line. Но сделать это можно в самом конце.
111 2358914
>>358316
Разобрался, это Cloudflare, защита от ддос атак.

Пиздец вы твари, сложно было 2 слова написать. Теперь я понимаю, почему этот тред мертвый.
112 2358924
>>353688
Что не так, школьник? yii2 уже ~8-9 лет и все работает

Любой фреймворк это набор компонентов
роутер
контроллер с коллбеками и работа с данными и отображение.
Ну и рюшечки типа проверка почты, отправка и все такое.
113 2358991
>>358924
держи в курсе, борщехлеб
114 2359204
>>358991
Поридж в ярости))
16217031796450.jpg295 Кб, 1083x1080
115 2359696
Ну что вкатуны, как дела? А я сижу, пью кофе дома и работаю на немецкий продукт. Ну как работаю, уже час двачи листаю.
Когда то я был как вы, в 2019м году открыл ПХП, установил линукс и начал писать коды эти ваши. А теперь я сижу в тепле и наслаждаюсь весной, пока быдло на заводах за копейки пашет, может на обеде поеду покатаюсь по дорожкам в лесу.

мимо symfony/react developer
116 2359711
>>359696
Идут два данмера по Алинору и видят волшебную лавку, на прилавке сидит альфик и лукаво размахивая хвостом, говорит данмерам:
- За 99 септимов превращу в имперца
Уримал покопался у себя в карманах и нашел 98 септимов, а Азарат у себя 100 септимов. Азарат говорит другу
- Давай испытаем заклинание на мне. Если все пройдет успешно, то я отдам тебе лишний септим и ты тоже станешь имперцем.
- Давай! - обрадовался Уримал.
Зашел Азарат вместе с альфиком в лавку и через пять минут из лавки выходит статный имперец.
- Скорее же давай мне септим. обрадовался Уримал.
- Найди себе работу чумазый попрошайка!
117 2359803
>>359696
Какой линукс установил?
118 2359840
>>359711
Анектодды двумя блоками ниже.
119 2359943
>>359696
Да нормально, все - по совету местного анона вкатился по подписке на хекслет, в итоге за 3 месяца освоил больше чем за весь прошлый год.
По поводу на рыка труда, мне с дивана кажется, что на пыхе все более менее норм, по сравнению с тем же фронтом и питоном, если говорить про офисные джуновские ваки.
Как нашел удаленку на западного барина? Или ты галеру РАБотаешь? Скок платят? Че молодым-задорным посоветуешь?
120 2360010
>>359943
Да конечно на пыхе збс, конкуренции мало, а работы валом.
Я в офисах не работал, сразу удалёнку нашёл на галере(но нормальной, с долгими продуктами без легаси), там 1,5 года проработал. Сейчас удалёнка на продукт на западного барина.

Молодым дам важный совет как найти работу:
- Сделать хотя бы один проект нормальный на гитхабе и задеплоить на хост куда-нибудь.
- Самому искать МАЛЕНЬКИЕ компании, где НЕТ ЭЙЧАРОВ. Там ты вероятность оффера будет 95% и сразу со старта платят.

Кто поопытнее и ищет вторую работу:
Сделать полезную-интересную composer-либу и залить на packagist.
121 2360074
>>360010
Какой проект ты делал?
122 2360099
>>360074

>А где?


>А покажи?


>А мне?


Чужой опыт на себя не натянешь, чел

мимо шел
123 2360107
>>360099
Мне просто интересно, причём здесь на себя натягивать
124 2360219
>>358201

Сообщения с Deprecated можно игнорировать — это лишь предупреждения. Важная информация в конце:

composer не нашел файл composer.json в текущей директории (PhpStormProjects).

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

cd имя-директории
125 2360226
>>358305

Я тоже не очень понимаю, в чем смысл этого кода. Есть такой подход, когда функции-сеттеры (которые задают какой-то параметр) заканчиваются строкой return $this; и это позволяет вызывать их по цепочке:

$someObject->setA(1)->setB(2)->setC(3);

Но зачем возвращать $this->messenger, я не очень понимаю. Может, это какая-то ошибка?

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

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

@return MessengerInterface

Так не нужно делать. Если ты уже указал тип возвращаемого значения, не не надо его писать второй раз.
126 2360246
>>360226

>У функции указан тип возврата MessengerInterface и зачем-то в комментариях это указано второй раз:


>@return MessengerInterface



1) PHPStorm считает по-другому
2) Документация инструментами генерится из PHPDoc а не тайпхинтов

мимо
127 2360366
>>360010

>Да конечно на пыхе збс, конкуренции мало, а работы валом.



Это такой троллинг? Или ты про западный рынок. В этой стране уже с опытом 10 лет за еду работы в айти не найти, тем более на пыхе
128 2360439
>>360366
а что не так?
129 2360453
>>360366

>В этой стране уже с опытом 10 лет за еду работы в айти не найти


А что случилось? Почему же никто не хочет с нами работать?
130 2360759
>>360246

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

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

Что касается PHPDoc, то я не вижу упоминания в документации, что он не умеет парсить тайп-хинты.
131 2360780
>>360759
Вообще да. PHPDocumentor из
class App
{
public function test(): array
{
return [];
}
}

сгенерил

public test() : array<string|int, mixed>
132 2360785
>>360780
Но все же я не могу в тайпхинте указать дженерик, так что я могу его указать в phpdoc, а тайпхинт array оставить для проверок в рантайме.
133 2360854
Аноны где работу искать в инете по php?? готов работать но не могу ничего найти
134 2360864
>>360854
Headhunter?
135 2360900
Тут есть, кто хоть немного в блейде понимает?

Хочу понять, какая структура должна быть у шаблонов.

Вот есть базовый шаблон с повторяющимся хедером, футером, посередине вставляется @yield content, назовем его app.blade.php. Дальше я создаю дочернюю страничку, пусть будет about, которая наследуется от базового шаблона app, описываю секцию, хуе-мое, блять. И таких страничек будет штук 5. Потом я осознаю, что в эти 5 страничек нужно вставить абсолютно одинаковый кусочек кода, не слишком маленький, но и не на 100 строк. Как бы мне это сделать красиво и без копипаста?
136 2360970
>>360785

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

>>360900

В твиге есть макросы для этого, наверно и в блейде что-то есть.Гугление показывает, что есть директива include: https://laravel.com/docs/9.x/blade#including-subviews

Также, там есть компоненты: https://laravel.com/docs/9.x/blade#components
137 2360980
>>360854
Да нету работы больше спасибо пыне, выкатываемся
image.png548 Кб, 980x707
138 2361053
>>360980
Но ведь внутренний рынок остается?
139 2361319
Перед изучением laravel стоит изучить шаблоны проектирования?
140 2361416
>>360980
Ой да не пизди ты
КрКодаТипа.jpg122 Кб, 960x720
ИБ 141 2361469
Аноны привет. Мне очень нравится PHP, но пишу я на Golang, где "приложение компилируемое".

Вопрос такой: Что, если я напишу "самописный" движок сайта или сайт(сервис) на PHP, он раскрутится и кто нибудь(кабанчик подсуетится) отожмёт его у меня или возьмёт исходный код немного подправит, изменит "шаблон" и запустит свой аналогичный сайт? Что мне в этом случае делать? Какие методы защиты кода на PHP существуют: бэкдор для своего человека, супер пользователь вшитый в код, обфускация кода? Как защищаете Вы(Ваша контора) свой проект, как защищают крупные компании использующие PHP(Производители коммерческих CMS например)?
142 2361536
>>361469
Ты в курсе, что пыха серверный язык? Как кабанчик у тебя его отожмет, если он на хостинге крутится, а не в браузере? Ты по сути даже не его видишь, а результат его работы.
143 2361538
>>361536
В курсе конечно, но в "некоторой" стране можно доступ получить за деньги практически к любым данным. Например к SMS переписке или детализации звонков. Я не знаю как в остальных странах, но предполагаю не сильно лучше. Тем более в некоторых странах требуют, что бы "хостился" именно на их территории, если хочу их домен. Представь какой нибудь "Губер" или "Сенатор" в стране третьего мира захочет получить данные с сервака - думаю ничто ему не помешает или я не прав?
144 2361541
>>361538
zend encoder
145 2361563
>>361538
Чел, когда на тебя покусятся кабаны с такими возможностями у тебя будет своя СБ, а тебя самого будут интересовать больше яхты, а не твой пионерский говнокод.
146 2361604
>>361563
Спасибо за мечты, но в успех я не очень верю. Возможно я пессимист.По теме: Есть знакомый - относительно взрослый дядя, Program Engineer (надеюсь правильно написал должность) который работает на иностранцев. Он тоже пишет, что, если идея которую ты реализуешь годная, то бабки появятся и уже потом будешь думать о безопасности, производительности, оптимизации кода и тд.
147 2361609
>>360366
Работы валом, что на местных, что на западных. Тем более на пыхе.
Я как только год опыта получил - просто игнорил местных, зачем, если есть западные продукты с западной зар.платой и западными условиями.
148 2361641
Здрасьте, что щас с фрилансом на пыхе и реально ли студенту-перваку ворваться на этот дикий запад? Прогал на си, писал сайтики на дженге, на ней же апишку писал, к пыхе не притрагивался но хочу на ней фрилансить.
149 2361792
>>360900
Если где-то есть повторяющиеся элементы, выносишь их в отдельный файл .blade.php и импортируешь в те, которые нужно. Если есть необходимость его чуток видоизменять (текст, картинки, что-то показывать/убирать и т.д.), то blade шаблоны умеют принимать переменные и с их помощью можно колдовать над шаблонами как хочешь.
150 2361957
>>361053
Давно занят, да и сам по себе он маленький
IMG20220523191159676.jpg64 Кб, 1080x660
151 2361998
Вопрос к знатокам, насколько это сложно?
152 2362065
>>362016 (Del)
Там же еще подмена ойпи нужна, так что еще про мультипрокси не забудь.
1562139349156.jpg70 Кб, 669x702
153 2362379
154 2362486
>>347129 (OP)
Сука, ну как искать работу? Мрази требуют пхп, ооп, хуяпе, вью, джс, тесты. Коммерческого полгода, а по сути ничему не научился толком. С каждой вакансии в ахуе
155 2362524
>>362486
А где ты работал и че умеешь?
Похожая проблема, но я только в феврале вкатился
156 2362534
>>362486

>ооп


>джс


>тесты


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

>вью


Тебя наебать хотят, будешь макакой фулстеком.
157 2362538
>>362534
Что такое вью?
158 2362561
>>362538
Фронтофреймворк, который будешь выдрачивать дольше, чем пхп до уровня мидла.
159 2362590
>>362534
А что тогда надо знать чтобы устроиться?
160 2362628
>>362625 (Del)

>простые морды, если я бэкендер


ПРостые морды для бэкендера это jquery + bootstrap, как показывает моя личная практика, лучше уж так чем говнокод на SPA.
161 2362637
>>362628
Почему обязательно говнокод с vue? Пишу чисто, функционально на vue 3 как на реакте. С jquery у тебя в 99% случаев на проектах встретится говнокод. На жиквери можно компоненты писать в виде плагинов, но все любители жиквери предпочитают лапшу.

мимо
162 2362642
>>362637

>функционально на vue 3


>как на реакте


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

>С jquery у тебя в 99% случаев на проектах встретится говнокод.


У тебя и с реактом/вью 99% встретится говнокод, но в отличии от жиквары - он еще и будет с горой бойлерплейта, который без траты огромного количества времени не разберешь.
163 2362645
>>362642
Извини, но я в твои в штаны не срал. Это ты сам наделал. cоmposition api позволяет функциональный код писать насколько это возможно в жс и даже использовать this не дает.
164 2362646
>>362645

>cоmposition api


>функциональный код


Хватит позорится уже. Твой composition api это буквально конактенация стрех строк: "export default { setup(){" . <Текст твоего компонента> . "}}". Где ты тут функциональное программирование увидел?
165 2362648
>>362645
Потому что код полностью на функциях, без использования контекста. Тебе никто не мешает его использовать вместе с какой-нибудь ramdajs
166 2362650
>>362524
Немного пыхи, лару, апи писал, постман, докер, гит. Вот сейчас учу вью, но сука, не хочется распыляться
167 2362653
>>362650
И не распыляйся. Сам себе какаху в карьере сделаешь. Учи БД, куберы, рабиты и так дале. И английский язык
168 2362655
>>362648
В JS даже контекст можно реализовать на замыканиях. Отсутствие контекста и преобладание функций - не гарантирует использования парадигмы ФП. Тот же composition api функционален только в момент инициализации, потом у тебя все равно появляется тобой ненавистный контекст, в отличии от реакта - где весь жизненный цикл компонента выполнен в виде функций. Исключение в виде ErrorBoundary не рассматриваем
169 2362659
>>362655
И шо? Я против реакта ничего не говорил. Я же не шизик чтобы искать чистые идеальные формы, в практических приземленных вещах как веб фреймверки
170 2362661
>>362650
Уволили? Через сколько времени после вката устроился?
171 2362667
>>362655
Кстати раз ты такой спец покажи мне где этот контекст появляется?
setup() {
const = reactive({test: 'hello world'});

provide('HEHE', () => {
//
})

onMounted(() => {
//...
})

watchEffect(() => {
...
})
}
172 2362670
>>362667

Кстати в вуе 3 не принято писать defineComponent({setup() {
а принято вообще чисто на функциях и макросах

<script lang="ts" setup>
defineProps({
propName: {
...
}
})

watchEffect(() => {
//})
</script>
173 2362683
>>362667
Прямиком после выполнения метода setup, когда неожиданно все, что возвращалось из него становится полями объекта внутри прокси, доступ к которым из метода render осуществляется через with(this){}
174 2362687
>>362683
А разве если в реакте мы залезем в метод render или shouldComponentUpdate нам this не нужен будет?

render() {
...
this.props
...
}

не писал не когда?
175 2362696
>>362687
В реакте в 2022 методы используются только в единичных случаях, все остальное уже на функциях.

function Example(props){
return <div>{props.value}</div>
}
176 2362698
>>362696
Ну так вуе заставляет тебя в метод render лезть в 2022? Кстате необходимость shouldComponentUpdate тебя сейчас может заставить класс написать
177 2362700
>>362698

>вуе заставляет тебя в метод render лезть в 2022?


Не заставляет, если ты используешь вуй для генерации статичного HTML. Во всех остальных случаях - заставляет, просто через костыль with, потому что иначе код на вуе побил бы все рекорды по размеру бойлерплейта.
178 2362702
>>362698

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


Не заставит. useMemo и useCallback
179 2362708
>>362700
расшифруй пожалуйста. я писал разные многоуровневые меню и, таблицы с динамически подгужаемым контентом в ячейках и всякую другую SPA муру и нигде не использовал render
180 2362711
>>362708

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


<template> в твоем вуй файле это ничто иное, как render()
181 2362716
братья помогите,не открывается в браузере дебагбар ларавеля(его просто нет),что делать как фиксить? все сделал по гайдычу,хз почему не работает
182 2362717
>>362711

>jsx это ничто иное как render


И шо? Где потерян гешефт?
183 2362718
>>362717
Гешефт в том, как туда данные попадают. В рякте - через область видимости, а в вуе/классовом рякте - через контекст.
184 2362719
>>362716
Это же сторонний пакет. Ты его ставил?
185 2362722
186 2362723
>>362718
А доку читал?

The Debugbar will be enabled when APP_DEBUG is true.
187 2362724
>>362722
>>362723
насрали тут фронтендом извините промазнулся
188 2362751
>>362723
Уже фиксанул, появилось когда изменил сервер на апач
189 2362759
Вкатился на работу джуном чуть больше месяца назад, вроде и закрываю таски, но очень тяжело вносить изменения в проект которому уже больше чем полгода и у которого твоего кода меньше процента. Иногда бывает за день пишу 5-10 строчек, и то после подробных объяснений ментора, бывают дни без единой строчки кода. Как фиксить? Наверное мерить работу в строках неправильно, но сколько строк в день - норм? Сроков как таковых нет, но мне кажется что если я продолжу вот так писать в среднем 15 строк в день меня уволят нахуй.
190 2362785
>>362759

Мерь в джесонах и ретурнах!

Все хорошо будет
191 2362809
>>362759
Расскажи как вкатывался. Что на собесах спрашивали?
Задачки с литкода давали? Лайвкодингом заставляли заниматься? Про пет-проекты узнавали?
И как ты вообще пробился, если сейчас на одну вакуху 10000 курсовичков и вкатышей?
192 2362811
Можно истории про вкат и трудоустройство перенести в другой тред? Тут не всем нужна РАБота, некоторые ради своих проектов сидят.
193 2362817
Меня удивляют завидки, которые говорят, что пыха давно мертва, ведь почти все сайты на ней крутятся, в том или ином виде.
Дайте мне пример языка/фрейма/платформы, где можно так же легко и непринужденно за пару вечеров сделать работоспособный набросок проекта, где было бы такое живое комьюнити, что ответы на все твои вопросы уже есть на форумах, а если произошел экстраслучай, то пыха настолько простая, то можно методом тыка и экспериментов решить проблему самому и даже не понять, как это получилось.
194 2362823
>>362817

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


Это из той же серии что и про мёртвые рельсы. Эти дауны, чванливо заявляющие о мёртвых языках только и могут что словоблудить почём зря.
195 2362829
>>362661
Куда уволили, что? Не понял.
Устроился по дружбе
196 2362864
>>362817
Студенты тупые-зелёные такое говорят, которые с проектами не сталкивались даже. У PHP один минус - нет крупных проектов вроде амазона. Пыха это джава, только для мелких-средних проектов.
Работы валом, зар.платы как у всех, вкатиться легче, поднять проект легко, сервера копейки стоят, скорость отменная у пыхи.
Оно и хорошо что хейтят с другой стороны - меньше вкатунов, меньше конкуренции у новичков.

>>362759
Ты полностью проект развернул? Базы должны быть полностью заполнены данными, все пароли предоставлены, все зависимости и утилиты установлены. Документации нет там? Главное проект полностью разверни, плюс в проектах всегда есть костыли, о которых ты можешь не знать.
197 2362867
>>362864

> нет крупных проектов вроде амазона


Фейсбук же
198 2362885
>>362867
Ну может, но я не знаю всм берут ли туда на работу или там и так бородатых дядек хватает.
Т.е. при релокейте мне кажется сложно на пыхе найти работу уровня айти-гиганта. Ну это и так, на любителя, может кому важно и мечтает попасть в корпорацию какую.
199 2362889
>>362885

> может кому важно и мечтает попасть в корпорацию какую.


Да нахуй они нужны. Я там не работал, но слышал в этих корпорациях платят меньше рынка. И это не только IT компании касается. Зато представляю какой там дрочь, субординация и прочая корпоративная шиза, которую я блять просто терпеть ненавижу.
200 2362907
>>362889
Аналогично. Мне маленькие ламповые продукты-компании больше нравятся, где контроля нет, пишешь себе код когда вздумается и не паришь голову.
haha.webm226 Кб, webm,
640x360, 0:04
201 2363170
>>362907

>пишешь себе код когда вздумается

202 2363289
>>362648

Позвольте вмешаться. Не могу пройти мимо.

Вы почему-то ограничиваете выбор "хорошим" SPA на Vue и "ужасным" древним jQuery. Как будто нет других вариантов.

Но, на мой взгляд, реализация произвольного проекта как SPA имеет множество недостатков:

- очень медленная начальная загрузка, требующая передачи огромного объема данных
- при этом у разработчиков почему-то не хватает ума впечь нужные данные прямо в страницу, и они делают ajax-запросы
- разработчики не умеют правильно проектировать API, чтобы при переходах между страницами отправлялся бы единственный запрос, а не много
- страница не отображается при единственной ошибке в любом компоненте, в то время как при использовании HTML ошибка загрузки одного CSS/JS файла или картинки не препятствует отображению страницы
- с реактивным стилем написания кода легко сделать так, что приложение будет потреблять много CPU
- написание SPA требует по сути написать два приложения: серверное и клиентское. Значительно увеличивается объем работы.
- мне не нравится идея делать каждую кнопку отдельным файлом. Это выглядит красиво в концепции, но с таким кодом тяжело работать, прыгая по файлам на 10 строчек. Вы в коде тоже каждую функцию в отдельный файл выносите?
- необходимость возиться со сборщиками и упаковщиками кода. На большом проекте, конечно, они все равно понадобятся, но на маленьком можно обойтись и без них.
- проблемы с поисковой оптимизацией

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

Или возьмите тот же Redux. Они предлагают сделать гигантский switch на 100 опций и на нажатие любой кнопки клонировать все состояние.

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

Лично мне из клиентских библиотек понравился preact (это не реакт). Его идея в том, что у него мало возможностей, но зато он весит всего несколько килобайт и позволяет при желании писать компоненты без компиляции и сборщиков. Если у вас есть простая интерактивная форма, то вполне возможно, что реализация одной формы на preact подойдет гораздо лучше, чем переделка всего приложения на SPA на популярном фреймворке, с весом бандлов под мегабайт и сложным процессом сборки.
202 2363289
>>362648

Позвольте вмешаться. Не могу пройти мимо.

Вы почему-то ограничиваете выбор "хорошим" SPA на Vue и "ужасным" древним jQuery. Как будто нет других вариантов.

Но, на мой взгляд, реализация произвольного проекта как SPA имеет множество недостатков:

- очень медленная начальная загрузка, требующая передачи огромного объема данных
- при этом у разработчиков почему-то не хватает ума впечь нужные данные прямо в страницу, и они делают ajax-запросы
- разработчики не умеют правильно проектировать API, чтобы при переходах между страницами отправлялся бы единственный запрос, а не много
- страница не отображается при единственной ошибке в любом компоненте, в то время как при использовании HTML ошибка загрузки одного CSS/JS файла или картинки не препятствует отображению страницы
- с реактивным стилем написания кода легко сделать так, что приложение будет потреблять много CPU
- написание SPA требует по сути написать два приложения: серверное и клиентское. Значительно увеличивается объем работы.
- мне не нравится идея делать каждую кнопку отдельным файлом. Это выглядит красиво в концепции, но с таким кодом тяжело работать, прыгая по файлам на 10 строчек. Вы в коде тоже каждую функцию в отдельный файл выносите?
- необходимость возиться со сборщиками и упаковщиками кода. На большом проекте, конечно, они все равно понадобятся, но на маленьком можно обойтись и без них.
- проблемы с поисковой оптимизацией

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

Или возьмите тот же Redux. Они предлагают сделать гигантский switch на 100 опций и на нажатие любой кнопки клонировать все состояние.

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

Лично мне из клиентских библиотек понравился preact (это не реакт). Его идея в том, что у него мало возможностей, но зато он весит всего несколько килобайт и позволяет при желании писать компоненты без компиляции и сборщиков. Если у вас есть простая интерактивная форма, то вполне возможно, что реализация одной формы на preact подойдет гораздо лучше, чем переделка всего приложения на SPA на популярном фреймворке, с весом бандлов под мегабайт и сложным процессом сборки.
203 2363329
>>362655

> В JS даже контекст можно реализовать на замыканиях.



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

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



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

Вот, например, кусочек из Реакта (отсюда https://reactjs.org/docs/hooks-intro.html ):

function Example() {
[count, setCount] = useState(0);
...

А вот, как это выглядит с использованием ООП:

class Example {
counter = new Counter();

render() {
...

Плюсы кода с ООП:

- объект счетчика создается один раз при создании компонента. С хуками же мы пытаемся создать счетчик при каждом рендеринге. Это просто нелогично.
- с ООП класс устроен просто и понятно: есть состояние и есть методы для его изменения. С хуками же у нас функции возвращают функции и это просто сложно читать и, как следствие, легко сломать при редактировании.
- функции вроде useState используют костыли (порядковый номер вызова), чтобы понять, к какой переменной мы обращаемся. В ООП таких костылей нету.

Такое ощущение, что люди готовы усложнять код, лишь бы не использовать ненавистные классы. То, что делается на хуках, ,можно сделать аналогично на ООП, только без костылей.
203 2363329
>>362655

> В JS даже контекст можно реализовать на замыканиях.



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

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



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

Вот, например, кусочек из Реакта (отсюда https://reactjs.org/docs/hooks-intro.html ):

function Example() {
[count, setCount] = useState(0);
...

А вот, как это выглядит с использованием ООП:

class Example {
counter = new Counter();

render() {
...

Плюсы кода с ООП:

- объект счетчика создается один раз при создании компонента. С хуками же мы пытаемся создать счетчик при каждом рендеринге. Это просто нелогично.
- с ООП класс устроен просто и понятно: есть состояние и есть методы для его изменения. С хуками же у нас функции возвращают функции и это просто сложно читать и, как следствие, легко сломать при редактировании.
- функции вроде useState используют костыли (порядковый номер вызова), чтобы понять, к какой переменной мы обращаемся. В ООП таких костылей нету.

Такое ощущение, что люди готовы усложнять код, лишь бы не использовать ненавистные классы. То, что делается на хуках, ,можно сделать аналогично на ООП, только без костылей.
204 2363340
>>363329

Ой, там в примере кода наверно надо писать

counter = new Counter(this);

а то counter не сможет пнуть компонент, чтобы он обновился.
205 2363414
>>363289

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


Решается SSR

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


Решается фреймворками вроде next и nuxt

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


Решается http/2

>- страница не отображается при единственной ошибке в любом компоненте, в то время как при использовании HTML ошибка загрузки одного CSS/JS файла или картинки не препятствует отображению страницы


Во первых, нужно писать код таким образом, что бы он не выкидывал ошибки. Во вторых, в любом фреймворке есть возможность отлавливать ошибки аналогично try/catch и выводить юзеру соответствующую инфу/производить другое действие/etc.

>- написание SPA требует по сути написать два приложения: серверное и клиентское. Значительно увеличивается объем работы.


Не согласен. Ты в любом случае будешь писать клиентское приложение (html + js+css) и бэк (любой язык на твой выбор).

>- мне не нравится идея делать каждую кнопку отдельным файлом. Это выглядит красиво в концепции, но с таким кодом тяжело работать, прыгая по файлам на 10 строчек. Вы в коде тоже каждую функцию в отдельный файл выносите?


Ну так не делай, сделай в одном файле 20 кнопок и экспортируй. Кто тебе запрещает?

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


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

>- проблемы с поисковой оптимизацией


Решается SSR

>Это вы называете лучшей архитектурой?


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

> Это же даже протестировать нормально не получится.


То, что fetch можно мокать ты не слышал?

>Они предлагают сделать гигантский switch на 100 опций и на нажатие любой кнопки клонировать все состояние.


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

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


Проиграл. Если вы хотите сделать Single Page Application вам не нужен SPA. Сам свои высеры читаешь?

> Если вы пишете интернет-магазин или развлекательный ресурс с постами и лайками, вам даром не нужен SPA


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


Тут даже без комментариев.
205 2363414
>>363289

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


Решается SSR

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


Решается фреймворками вроде next и nuxt

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


Решается http/2

>- страница не отображается при единственной ошибке в любом компоненте, в то время как при использовании HTML ошибка загрузки одного CSS/JS файла или картинки не препятствует отображению страницы


Во первых, нужно писать код таким образом, что бы он не выкидывал ошибки. Во вторых, в любом фреймворке есть возможность отлавливать ошибки аналогично try/catch и выводить юзеру соответствующую инфу/производить другое действие/etc.

>- написание SPA требует по сути написать два приложения: серверное и клиентское. Значительно увеличивается объем работы.


Не согласен. Ты в любом случае будешь писать клиентское приложение (html + js+css) и бэк (любой язык на твой выбор).

>- мне не нравится идея делать каждую кнопку отдельным файлом. Это выглядит красиво в концепции, но с таким кодом тяжело работать, прыгая по файлам на 10 строчек. Вы в коде тоже каждую функцию в отдельный файл выносите?


Ну так не делай, сделай в одном файле 20 кнопок и экспортируй. Кто тебе запрещает?

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


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

>- проблемы с поисковой оптимизацией


Решается SSR

>Это вы называете лучшей архитектурой?


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

> Это же даже протестировать нормально не получится.


То, что fetch можно мокать ты не слышал?

>Они предлагают сделать гигантский switch на 100 опций и на нажатие любой кнопки клонировать все состояние.


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

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


Проиграл. Если вы хотите сделать Single Page Application вам не нужен SPA. Сам свои высеры читаешь?

> Если вы пишете интернет-магазин или развлекательный ресурс с постами и лайками, вам даром не нужен SPA


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


Тут даже без комментариев.
206 2363431
>>363329

>Классы читать гораздо проще.


Когда у тебя в классе есть конструктор и пара методов - несомненно. А вот когда у тебя компонент переваливает за сотню строк все значительно хуже. В функциональщине в таких случаях ты точно знаешь что у тебя за состояние и что за метод его мутировал, а вот в классах...
Когда у тебя в состоянии больше одного поля код превращается в лапшу. Попробуй сделать компонент с 3 считчиками и 3 кнопками, которые увеличивают соответствующий ей счетчик и потом посмотри на количество бойлерплейта. Аналогичная проблема происходит, когда ты пытаешься расширить логику компонента, в функциональном компоненте тебе просто надо один раз написать useState, в классовом тебе надо менять единственное состояние компонента, возможно далеко не в одном месте. Аналогичная проблема в компонентах вуя, которые не используют композишн.
Ну и на последок: классы из-за своей специфики в JS работают медленно.
207 2363538
>>362809
На собесе спрашивали по синтаксису, фишки ларавела, солид, рест. Никаких задач и кода. Правда было условие, что для отклика нужно приложить свой пет-проект. У меня был простой файлообменник на ларе. Как отправил пет проект, через пол часа уже договорились о собесе, там не ответил на примерно 15% вопросов (по фичам лары в основном), сам собес где-то минут 20 длился, на след день написали с оффером. Было 20 откликов на эту вакансию, но уверен что большинство не посмотрели что нужен петпроект или надеялись без него договориться. Вопросы совсем простые были, я хз в чем сложность у предыдущих кандидатов была, я даже не готовился, это был первый собес, планировал просто узнать какие вообще требования и вопросы, резюме за 15 минут нарисовал
208 2363567
>>363414

> Я так с cmake не заморачивался как с вебпаком.


Почему бы не использовать cmake вместо вебпака? Нахуя все жрут кактус?
мимо
209 2363585
>>363567
Потому что в таком случае cmake будет использовать webpack. cmake - это замена gulp или grunt, а не вебпака.
210 2363725
>>363414

> Решается SSR


Как у ангуляра с SSR?
211 2363741
>>363725
С SSR у него отлично, даже получше чем у рякта с вуем. А вот с изоморфным роутингом дела обстоят не очень...
212 2363742
>>363567
У вебпака лучше интеграция со всякими фронтовыми штуками, вроде SCSS, JSX/Vue, SVG, транспиляции под старые браузеры.
213 2364330
>>363538
сколько времени прошло с момента вката до работки?
214 2364965
>>347129 (OP)
Доброго времени суток, форумчане. Просветите в вопросе о микросервисах.
Знаю что есть разные протоколы для связи между сервисами, типа http, amqp. И так вот: допустим есть микросервис-шлюз на него делает запрос пользователь(хочет что-то получить). Шлюз в свою очередь дергает нужный микросервис путём помещения job'a в очередь rabbitmq. В итоге обмен данными между сервисами происходит асинхронно, каким тогда образом шлюз должен дождаться ответа от сервиса, чтобы вернуть пользователю?

Я подозреваю что в таких случая общение между сервисами реализуется по другому, например http.
А такой синхронный тип общения между сервисами самый частный получается rabbitmq редко юзается?
215 2365022
Сап, какие проекты сделать на пыхе, js для портфолио? Работаю 5 месяцев, знаний везде по немногу
216 2365032
>>365022
Так если ты работаешь, зачем делать какие-то проекты? Просто расскажешь про свой опыт работы, что делал там.
217 2365034
>>362817
рельсы ларавель без неприятного привкуса
218 2365059
>>365032
Делаю всего по немногу прост. Так сказать подавашка. Хотелось бы гит заполнить чем-то полноценным. К тому же, в резюме то надо что-нибудь показать. А то на собес и не позовут
16531626185420.png2,6 Мб, 2456x1736
219 2365148
После реализации файлообменника из шапки на yii уже можно пытаться найти работу, или стоит потерпеть и сделать ещё и крупный проект из шапки на laravel/symphony?
А на удалённую работу вкатиться получится?
220 2365223
>>365059
Ну если ты хочешь заполнить гит, сделай то, что тебе действительно нужно.

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

Но если тебе нужен проект ради проекта, можешь просто взять из шапки.
221 2365996
>>365148
двачую вопрос
image.png9 Кб, 552x125
222 2366172
Вопрос по Yii2.
В туториале ошибка валидации отображается красным цветом. Почему у меня черный? Как сделать красным?

На stackoverflow есть только один топик с такой проблемой. Решения предлагаются такие
1. В лоб прописать css.
2. Залезть в vendor и нахимичить с ассетом бутстрапа.

Я правильно понимаю, что вторым лучше не заниматься?
Есть ли другие способы кроме прописывания css?
223 2366277
>>366172
Зачем ты учишь этого г мамонта?
16507049471600.jpg40 Кб, 1018x683
224 2366280
>>366277
Учусь использовать фреймворки на простых примерах, затем хочу перейти на лару или симфонию.
225 2366328
>>366280
Начинай с лапы сразу
226 2366348
>>366328
Я правильно понимаю, что с ней будет проще найти работу, чем с симфонией?
227 2366497
>>366348
Ты хоть что нибудь выучи для начала, тебе не о работе надо думать. Первую работу ты найдешь минимум через год обучения. Выдержишь?
228 2366652
>>366497
Как фрейм вообще можно учить? Это ж не анатомия тебе и не французский язык. Его надо понять и применять. Попробуй-ка выучи для меня набор гаечных ключей, их форму, размерный шаг, допуск до микрона. Ты спросишь, нахуя? Да просто так. Ты скажешь, нет, пошел отсюда нахуй, когда они понадобятся, я просто откручу гайку или болт и все. Так же и тут.
Учить надо пыху или французский, потому что его применение в чистом виде нихуя тебе не даст. Что в разговоре, что в кодировании. Его нужно применять с какой-то целью. Считай, что язык это отдельные слова. А фреймворк это грамматика, словарный запас, пунктуация, и все в одном флаконе. Найди себе француженку и пизди с ней на ларавеле.
16488814974381.png2,9 Мб, 999x1863
229 2366667
>>366652
Анон, меня ведь не обманывают глаза при поиске вакансий на hh?
Laravel действительно самый популярный фреймоворк в рф на данный момент с которым будет проще всего устроиться?
230 2366670
>>366667
Без понятия, я никогда в жизни не работал программистом. Более того, я не знаю, что сейчас популярно на галерах. Но твой месседж звучит логично.
231 2366709
Аноны, помогите мыслями. Такая задача: есть сервис (фронт на вью) и апишка (бек на ларавел). Как мне сделать jwt авторизацию в данном случае? Погуглил и ничего путного по теме нет. Алсо, резонно ли вообще разделять так сервисы? Или проще все в один проект запихнуть?
232 2366710
>>366667
С ларавелем иногда возникает ощущение, что в нем ничего нет по сути, как на голой пыхе пишешь.
Самое ценное кверибилдер, некоторые мидлвары по умолчанию, очереди, простенькое DI, как раз такое какое нужно для мелко средних проектов (не в пример симфони). Коллекции - обычно спорят о их нужности, но пользоваться ими легко.
Научился пользоваться моделями и кверибилдером, который возвращает коллекцию моделей - понял 50% ларки. Главное разобраться как модели устроены и работают с данными из запросов с помощью магических методов (все данные в модели хранятся в массиве атрибутов).
полезные утилиты config, env, app_path, storage_path и др.
Миграции
Все остальное вторично. Всякие там форм реквесты.
233 2366716
>>366709
Гуглил плохо. Но авторизацию на jwt делать плохо. jwt хорош кода имеет короткий срок гидности и тебе не нужно рефреш токены всякие выдумывать.
234 2366738
>>366716
Лучше бы по теме сказал что-нибудь
235 2366746
>>366738
https://laravel.com/docs/9.x/sanctum
а жвт тебе зачем для авторизации
236 2366756
>>366746
Аутентификации и авторизации точнее. Для авторизации однократных действий жвт подходит. Например схема с жвт авторизацией
1) Фронтенд проходит обычную сессионную аутентификацию на ларке. У фронтенда есть кукисы что пользователь залогинен.
2) Есть микросервис, который тоже торчит в интернет. Например отправка сообщений в телегу. Микросервис не должен позволять отправлять сообщения кому попало. Но микросервис сам не занимается авторизацией пользователя на отправку.
3) Фронтенд говорит ларке дай жвт на отправку сообщения. Поскольку фронт аутентифицирован в ларкиной сессии, он получает жвт
4) Фронтенд посылает команду микросервису отправить сообщение и дает ему этот жвт.
5) Микросервис делает запрос ларке на проверку жвт. Если все ок то микросервис отправляет сообщение в телегу.
6) Все этот жвт больше не нужен.
237 2367329
Сап. Подскажите, как называется штука, которая позволяет избежать get-запросов на странице и вместо этого генерить отдельную "директорию". Например, как у вк: vk.com/id111 вместо того, чтобы было vk.com/profile.php?id=111
238 2367342
>>367329
Чпу(Человеко понятные ссылки)
239 2367384
>>367342
Ссылки вроде не с буквы "у" начинаются.
240 2367385
>>367384
Урлы
241 2367386
>>366710
Человека, который не написал ни одного крупного проекта на чистой пыхе видно издалека.
242 2367387
>>367342
>>367343 (Del)
Спасибо!
243 2367435
>>367386
Шито поделать, рыбак рыбака видит из далека...
244 2367439
>>367435

>из далека


Знаешь значение?
245 2367441
>>367439
Шито поделать, издалека мы, нехрамотные.
246 2367570
Я хочу написать сайт с главной страницей(там будет текста много), картинками и кнопкой: "Скачать". Смогу ли я написать такой сайт на чистом html ?
247 2367626
>>367570
При большом желании да, но советую все же потратить некоторое время на изучение css.
248 2367685
>>367570
Одностраничный сайт с кнопкой скачать.
Мужик, под статью не попади))
249 2367801
>>367626
Что там изучать? Просто смотришь какие стили тебе надо и копипастишь.
250 2367871
Здравствуйте.
Гайд по вкату в шапке треда актуален?
Планирую вкатываться, но по php как то мало гайдов. В основном все дрочат фронтенд, там каждый пук обсосан до мелочей
251 2367893
>>366280
Озон таки стал челочником
252 2367994
>>366667
Популярный - да, насчет проще устроится только если 10 лет опыта
253 2368285
>>365148
Yii-шник с полугодовалым стажем, планирую сваливать на ларку. Взяли на первую работу после курсов от webformyself (есть на ютуб), когда предоставил в качестве резюме магаз оттуда. Yii для старта конечно подойдёт, но вот потом начинаешь задумываться о более вкусных штуках, особенно когда скроллишь hh. Так что советую подумать, оно тебе надо?
254 2368297
>>368285
Сколько учился до первой работы, если не секрет?
255 2368386
Есть смысл сейчас это покупать?
https://www.chitai-gorod.ru/catalog/book/1095225/
Если нет, что можете посоветовать?
Сорри за копи-пост с ньюфаг-треда, надо уже к завтрашнему дню подобрать книгу в подарок.
256 2368458
>>368386
Ну главу про JS я бы точно оттуда читать не стал. jQuery в 2022 2019 тоже это нечто.
257 2369065
Сап. Есть ли какие-нибудь решения, чтобы быстро собрать фронт на vue? Что угодно, что может помочь
260 2369146
>>369105
>>369065

>cli


НИ В КОЕМ СЛУЧАЕ НЕ ИСПОЛЬЗУЙ!
Используй официальный тулинг в виде vite, который разрабатывается самим автором vue. Он, кстати, поддерживает не только vue.
https://vitejs.dev/guide/
261 2369169
>>369105
>>369146
О спасибо за помощь
262 2369207
>>369169
Главное не используй cli. Это не просто мусор весом в несколько сотен мегабайт, туда еще и периодически всякие трояны попадают. гугли node-ipc
263 2369221
>>369076

>2016


Так она еще старее вышеуказанной книги.
264 2369441
Подскажите, нужно при нажатии на bootstrap'овский button вызвать vue компонент. Как это сделать?
265 2369458
>>369441
addEventListener('click', ()=>{вызываешь vue компонент })
266 2369673
Насколько сильно изменился laravel с 2018 года? Суть в том, что я учу фронтенд фреймворк vue. А язык php знаю лишь чуть чуть, прошёл часть учебника по php до ООП из ОП-поста этого треда. И я хочу посмотреть на youtube примеры приложений на vue с бэкендом. Очень часто на youtube попадаются плейлисты, где делают приложение в связке laravel и vue. Дело в том, что эти плейлисты старые, годов 2018 - 2020.

Насколько сильно с 2018 года laravel изменился? Будут ли у меня в 2к22 году тонны ошибок из-за того, что я пытаюсь запустить старый код 2018 года?
267 2369713
>>369673
Посмотри какая версия laravel в курсе и устанавливай ту же
268 2369804
Подскажите сайтов с макетами bootstrap. Интересуют отдельные части для копирования. Например, columns, rows и подобное, а не полный функционал
269 2369902
>>369673

>Насколько сильно с 2018 года laravel изменился?


Ох, не о ларавеле тебе беспокоится надо...
270 2369907
>>369902
Говори, что знаешь.
271 2369915
>>369907
Главное - насколько ты сильно изменился с 2018 года.
272 2369933
>>369907
vue, который был в 2018 уже не котируется
273 2369964
>>369673
Ларка-то 5 от 9 не прям особо сильно отличается отличается, конечно, в дохуя местах, но основа та же самая по сути своей и синтаксис не менялся, а вот вуй...
16516845965770.jpg16 Кб, 184x184
274 2370017
Аноны. Вопрос по ларе.
Создаю кастомное правило валидации что запись существует в бд можно было бы конечно дефолтный exists сделать но там бы спагетти получлось и прикол в том что первичный ключ это uuid. И если формат неверный, то мое правило все равно пытается отработать и закономерно 500 ошибка что uuid имеет неверный формат. Как правильно поправить?
275 2370101
>>370017
Сначала проверять, что пришёл валидный uuid https://laravel.com/docs/9.x/validation#rule-uuid, и уже потом искать в бд?
276 2370110
>>370101
Первое правило стоит на проверку uuid. Кастомное стоит вторым.
277 2370114
>>370110
https://laravel.com/docs/9.x/validation#stopping-on-first-validation-failure
Можно сделать, чтобы валидация выбрасывала ошибку на первом же сработавшем правиле, по дефолту все правила прогоняются.
278 2370166
>>370114
Не совсем подходит. Я короче заимплиментил какой то там интерфейс и у меня в правило валидатор записывается. И там я уже проверяю есть ли ошибка или нет.
В любом случае спасибо за отклики.
279 2371457
Как можно обмазаться реактивностью и не обосраться с СЕО?
SSR не предлагать, слишком жирно получится для моего небольшого сайтика.
280 2371760
>>371457
Рендери страницу синхронно вместе с загрузкой страницы
281 2371764
>>371760
Тавтология получилась. В общем, тебе надо при загрузке страницы сразу запускать полный её рендер, без ожидания асинхронных запросов и подобного
282 2371863
Сап, <router-link> во vue заворачивает всё в тег <a>, соответсвенно сбиваются стили. Как этого избежать? Может знает кто...
283 2371877
>>371863
>>371863
В смысле сбиваются? У чего? Роутер-линк это и есть тег а, в соответствии с ним и стилизуй.
284 2371946
>>362759

>Сроков как таковых нет


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

>мне кажется что если я продолжу вот так писать в среднем 15 строк в день меня уволят нахуй.


Классика, лол.

>Наверное мерить работу в строках неправильно


В закрытых тасках меряют обычно. Таски закрываются значит всё правильно идёт. Остальное от лукавого.
285 2371987
>>371863
Нахуй ты ссылки пытаешься завернуть не в <a>? Совсем больной?
ответ на твой вопрос буквально на первой ссылке в гугле
286 2373577
>>373567 (Del)

>подводные?


no hire с подтвержденным попытом 5 лет, работающими в проде приложухами. Даже не отказывают, а просто собесят и съябывают в закат.
287 2373586
>>373567 (Del)
Подводные в том, что все эти знания нужно применять в проекте. Сами по себе они бессмысленны. На собеседовании вопросы задают так: "С вставить нужное работал? А с вставить нужное?"

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

Все моя субьективщина и опыт, на истину не претендую. Но у меня было так.

>>373582 (Del)
Украина не европа.
288 2373598
>>373593 (Del)
Ну слушай, так то и на senior вакансии требования на бумажке совсем не сложные. Такое же знание пхп, ларавел, вью, гит. Но вот опыт работы с этим, вот что важно. Я первую работу нашел спустя примерно 4 месяца, с учетом того, что меня устроил друг. Только через год работы я начал немного понимать, что к чему.
Знания из курсов и роадмапов вообще не пригодились по сути. Советую как можно скорее искать работу, там научишься.
289 2373603
>>373598
Так тебя же не возьмут просто так если нихуя толком не знаешь.
290 2373610
>>373603
Пройдя парочку курсов на ютубе и изучив основные термины ты тоже нихуя знать не будешь. Порочный круг.
291 2373742
>>373610
Я и не спорю, сам что-то читаю-смотрю всякую фигню а практики нет толком, и воз и ныне там. Просто говорю, без знакомства вряд ли возьмут.
292 2374284
>>373742

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

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

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

>>373598

Senior по определению предполагает наличие опыта. Не имея опыта, ты никак не можешь стать Senior, только стажером или джуниором.
293 2374303
>>373586

Ты можешь применять знания в личных проектах. Вот, для примера, блог одного человека, который решил каждые пару месяцев делать по маленькому и в идеале прибыльному проекту (правда, у него уровень не джуниора и он делал проекты не для поиска работы, но блог сам по себе довольно вдохновляющий): https://tinyprojects.dev/

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



Это приходится делать, потому что в резюме все Львы Толстые, а по факту нет.
294 2374385
>>374303
Личные проекты это не прод. Я хз какой у тебя уровень, раз ты можешь такое сравнивать.

>Это приходится делать


Ну делай, мне с такими не по пути
295 2374398
>>373567 (Del)

У меня ощущение, что помеченные синим блоки (nice-to-have) это тоже обязательно. Знать только красные блоки будет маловато. Как это так - знать SELECT, но не знать JOIN. Никуда не годится.

С другой стороны, знать Yii и Wordpress не требуется, если вы с ними не планируете работать.

Не хватает основ линукса и командной строки. Не хватает шаблонизаторов. Не хватает ORM и связанных с ними паттернов: ленивая загрузка, identity map, unit of work.

Насчет паттернов: много бесполезных паттернов вроде registry или service locator, абстрактная фабрика, и мало полезных вроде паттернов для ORM или паттернов для работы с БД (TableGateway, Data Mapper).

Насчет ООП. Тут, увы, материалов по ООП мало (вообще, во многих учебниках и туториалах с ООП беда). В Роадмапе я вижу ООП рассматривается всего лишь с двух сторон:

- синтаксис классов и объектов со ссылкой на документацию
- паттерны проектирования со ссылкой на сайты или книги

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

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

Вот этой информации вы не найдете в документации по PHP. Она описывает только синтаксис. И не найдете в книгах по паттернам, так как они рассчитаны на тех, кто уже знает ООП. А если вы полезете в паттерны, не зная ООП, то толком ничего не поймете.

И мне кажется, по этой причине, то есть из-за непонимания, у людей "ООП" ассоциируется с чем-то излишне переусложненным. Хотя это очень полезная и важная идея, улучшающая качество кода.

По ООП роадмап дает ссылку на oodesign, а там по сути рекламируются две книги:

1) Head First OO Analysis & Design. Я пролистал книгу, и она не объясняет что такое ООП, а предполагает, что читатель это уже знает. Примеры кода на Java (она довольно похожа на PHP). В первой же главе есть сеттеры и геттеры, и никто не объясняет, чем они лучше, чем публичные свойства. Опять же, предполагается, что читатель знает про инкапсуляцию.

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

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

Пример про магазин гитар хороший, но примеры с дверью для собак очень оторваны от реальности и ООП там не особо и нужен.
295 2374398
>>373567 (Del)

У меня ощущение, что помеченные синим блоки (nice-to-have) это тоже обязательно. Знать только красные блоки будет маловато. Как это так - знать SELECT, но не знать JOIN. Никуда не годится.

С другой стороны, знать Yii и Wordpress не требуется, если вы с ними не планируете работать.

Не хватает основ линукса и командной строки. Не хватает шаблонизаторов. Не хватает ORM и связанных с ними паттернов: ленивая загрузка, identity map, unit of work.

Насчет паттернов: много бесполезных паттернов вроде registry или service locator, абстрактная фабрика, и мало полезных вроде паттернов для ORM или паттернов для работы с БД (TableGateway, Data Mapper).

Насчет ООП. Тут, увы, материалов по ООП мало (вообще, во многих учебниках и туториалах с ООП беда). В Роадмапе я вижу ООП рассматривается всего лишь с двух сторон:

- синтаксис классов и объектов со ссылкой на документацию
- паттерны проектирования со ссылкой на сайты или книги

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

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

Вот этой информации вы не найдете в документации по PHP. Она описывает только синтаксис. И не найдете в книгах по паттернам, так как они рассчитаны на тех, кто уже знает ООП. А если вы полезете в паттерны, не зная ООП, то толком ничего не поймете.

И мне кажется, по этой причине, то есть из-за непонимания, у людей "ООП" ассоциируется с чем-то излишне переусложненным. Хотя это очень полезная и важная идея, улучшающая качество кода.

По ООП роадмап дает ссылку на oodesign, а там по сути рекламируются две книги:

1) Head First OO Analysis & Design. Я пролистал книгу, и она не объясняет что такое ООП, а предполагает, что читатель это уже знает. Примеры кода на Java (она довольно похожа на PHP). В первой же главе есть сеттеры и геттеры, и никто не объясняет, чем они лучше, чем публичные свойства. Опять же, предполагается, что читатель знает про инкапсуляцию.

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

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

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

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


>Вот этой информации вы не найдете в документации по PHP. Она описывает только синтаксис. И не найдете в книгах по паттернам, так как они рассчитаны на тех, кто уже знает ООП. А если вы полезете в паттерны, не зная ООП, то толком ничего не поймете.


Меткое наблюдение, и где вот этот промежуточный слой добывать, методом собственных проб и ошибок?
297 2374420
>>362759

От 50 до 200-400 за 8 часов. 50, если ты значительную часть времени занимался проектированием или реверс-инжинирингом.

>>371457

Что у тебя за сайт, что тебе понадобился клиентский рендеринг? Блог? Интернет-магазин? Корпоративный сайт? Там выгоднее рендерить все на сервере. SPA там не нужен, он только ухудшит скорость загрузки и удобство пользования сайтом. И поисковую оптимизацию.

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

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

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

То есть, у меня ощущение, что SSR мало когда нужен. Для классических сайтов с текстом и картинками мы рендерим все на сервере и отдаем HTML. А для приложений не нужна индексация интерактивной части приложения в поисковике, достаточно индексировать текстовые страницы и сгенерированный контент.

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

Если у тебя что-то промежуточное, например, аналог Инстаграма, то тут придется извернуться, чтобы картинки и индексировались гуглом, и просматривались через SPA. Инстаграм, как я понимаю, генерирует для Гугла отдельную страницу для каждого пользователя. То есть, он отдает Гуглу только контент (картинки), но не приложение с лентой, лайками, комментариями, подписками.
297 2374420
>>362759

От 50 до 200-400 за 8 часов. 50, если ты значительную часть времени занимался проектированием или реверс-инжинирингом.

>>371457

Что у тебя за сайт, что тебе понадобился клиентский рендеринг? Блог? Интернет-магазин? Корпоративный сайт? Там выгоднее рендерить все на сервере. SPA там не нужен, он только ухудшит скорость загрузки и удобство пользования сайтом. И поисковую оптимизацию.

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

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

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

То есть, у меня ощущение, что SSR мало когда нужен. Для классических сайтов с текстом и картинками мы рендерим все на сервере и отдаем HTML. А для приложений не нужна индексация интерактивной части приложения в поисковике, достаточно индексировать текстовые страницы и сгенерированный контент.

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

Если у тебя что-то промежуточное, например, аналог Инстаграма, то тут придется извернуться, чтобы картинки и индексировались гуглом, и просматривались через SPA. Инстаграм, как я понимаю, генерирует для Гугла отдельную страницу для каждого пользователя. То есть, он отдает Гуглу только контент (картинки), но не приложение с лентой, лайками, комментариями, подписками.
298 2374424
>>369804

Документация по bootstrap чем плоха? Там как раз готовые примеры кода, которые можно копировать.

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

>>369673

Без ООП и паттернов работы с БД за Ларавель браться нельзя. Это не фроеймворк для не знающих ООП или ORM.

>>366756

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

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

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

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

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

> Как мне сделать jwt авторизацию в данном случае?



При логине фронтенд отправляет на бекенд запрос на авторизацию. В запросе содержится логин и пароль. В ответе от сервера приходит JWT токен с содержимым вроде { "id": id пользователя, "issued": время выдачи }.

После этого фронтенд добавляет этот токен во все запросы, которые требуют авторизации.

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

Набор гаечных ключей "учить" не надо. А набор сверл или фрез? А станок с ЧПУ? Или ты предлагаешь взять первую попавшуюся фрезу (не зная, для каких материалов она подходит) и нажимать случайные кнопки на станке?

Ты долго на работе не задержишься с таким подходом.
301 2374470
>>366172

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

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

>>364965

А зачем в твоем примере rabbit? Его добавление выглядит как лишнее усложнение. Проще отправлять запросы напрямую.

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

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

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

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

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

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

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

>>364965

А зачем в твоем примере rabbit? Его добавление выглядит как лишнее усложнение. Проще отправлять запросы напрямую.

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

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

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

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

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

>>Классы читать гораздо проще.


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



Я ничего не понял. Если ты напишешь компонент на 1000 строк, используя useState, он вряд ли будет легче для понимания, чем ООП-компонент на 1000 строк. Решение тут состоит в том, чтобы не писать слишком большие компоненты, а не заменить ООП на его имитацию через костыли.

> Попробуй сделать компонент с 3 считчиками и 3 кнопками, которые увеличивают соответствующий ей счетчик и потом посмотри на количество бойлерплейта



В ООП мы можем вынести логику подсчета в класс Counter и создать три экземпляра класса:

class DemoComponent {
#counter1 = new Counter(this);
#counter2 = new Counter(this);
#counter3 = new Counter(this);

render() {
...
}
}

Не вижу, чтобы этот код был бы сложнее чем код с использованием useEffect/useState. По моему, он даже проще.

Про расширение компонента я не очень понял, где это надо и как тут хуки могут помочь.

> классы из-за своей специфики в JS работают медленно.



Это же просто неправда. Я буквально вчера читал вот это вот описание, как работа с объектами оптимизируется в вебките: https://webkit.org/blog/10308/speculation-in-javascriptcore/

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

ООП наоборот логичнее, так как ты в нем создаешь все поля и методы один раз при создании объекта, а с хуками ты объявляешь поля заново при каждом вызове функции рендеринга. Это просто противоречит здравому смыслу.
302 2374480
>>363431

>>Классы читать гораздо проще.


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



Я ничего не понял. Если ты напишешь компонент на 1000 строк, используя useState, он вряд ли будет легче для понимания, чем ООП-компонент на 1000 строк. Решение тут состоит в том, чтобы не писать слишком большие компоненты, а не заменить ООП на его имитацию через костыли.

> Попробуй сделать компонент с 3 считчиками и 3 кнопками, которые увеличивают соответствующий ей счетчик и потом посмотри на количество бойлерплейта



В ООП мы можем вынести логику подсчета в класс Counter и создать три экземпляра класса:

class DemoComponent {
#counter1 = new Counter(this);
#counter2 = new Counter(this);
#counter3 = new Counter(this);

render() {
...
}
}

Не вижу, чтобы этот код был бы сложнее чем код с использованием useEffect/useState. По моему, он даже проще.

Про расширение компонента я не очень понял, где это надо и как тут хуки могут помочь.

> классы из-за своей специфики в JS работают медленно.



Это же просто неправда. Я буквально вчера читал вот это вот описание, как работа с объектами оптимизируется в вебките: https://webkit.org/blog/10308/speculation-in-javascriptcore/

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

ООП наоборот логичнее, так как ты в нем создаешь все поля и методы один раз при создании объекта, а с хуками ты объявляешь поля заново при каждом вызове функции рендеринга. Это просто противоречит здравому смыслу.
303 2374485
>>363414

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


> Проиграл. Если вы хотите сделать Single Page Application вам не нужен SPA. Сам свои высеры читаешь?



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

Вконтакте, если мне не изменяет память, когда-то работал по такой схеме.

А ты, судя по ответу, думал, что навигацию без перезагрузки без многомегабайтного SPA и API не реализовать? Можно только пожалеть тех, кто тратит деньги и время там, где это не требуется.

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


>Решается SSR


Мы придумали себе проблему и героически ее решаем.

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


> Решается http/2


Это не поможет, если следующий запрос зависит от предыдущего.

> Не согласен. Ты в любом случае будешь писать клиентское приложение (html + js+css) и бэк (любой язык на твой выбор).



Да, только вывод данных на стороне сервера проще, так как нам не надо делать никаких аякс-запросов, нам не нужно никакое хранилище, не нужно поддерживать его в корректном состоянии ит.д. То есть, вывести профиль пользователя на сервере в разы проще, чем на клиенте.
304 2374489
>>374385

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

>>Это приходится делать


> Ну делай, мне с такими не по пути



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

>>374409

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

По многим темам нет хороших уроков, например по HTTP на русском я как-то искал информацию и ничего толком не нашел. По концепциям ORM тоже нету ничего.
305 2374503
>>374485
А если тебе нужно вывести профиль пользователя, чат и проводки из бухучета, а на другой странице чат, баланс и интерактивные видоуроки по системе, а если нажимаешь на кружочек сверху, то чат уезжает в угол и счезает , а вместо чата открывается профиль пользователя, а если в проводках нажмешь на символ человечка, то открывается модальное окно с исхдящим звонком к коллеге, а если коллега начнет редактировать провоки у себя, то ты будешь видеть у себя изменения... абырвалг ... абырвалг ...
306 2374723
>>374480

>навигацию без перезагрузки без многомегабайтного SPA и API не реализовать?


SPA это и есть навигация без перезагркузки.
307 2374766
>>374489
Как связаны отбор компетентных специалистов и вопросы по пхп, ларе? Если человек имеет опыт, проекты, нахуя ему знать в чем там отличие =, == и === (как пример).

Я не беру в расчет такие компании как вк, яндекс и подобные. Где кандидатов куча и они отсеивают их алгоритмами, которые в работе не применяешь
308 2375254
>>374981 (Del)
бери и пиши (при наличии знаний должно занять пару часов), что тебе ннада?
309 2375529
Можно ли сделать свою имаджборду используя ларавел?
310 2375532
>>375529
можно, а нахуя?
311 2375533
>>375532
нахуя что?
312 2375913
>>375820 (Del)
Могу предположить несколько вариантов:
1. Попробуй использовать App без первого слэша.
2. Сначала require, потом всё остальное.
313 2375926
>>375820 (Del)
путь то покажи слева. неправильный роут указал, нет там контроллера
314 2375949
>>375928 (Del)
В чем там дело-то было? Я этих композиторов даже не касался пока, тут просто бы разобраться с базой.
315 2375973
>>350209
А зачем это вообще делать?
316 2376017
>>375928 (Del)
Небось в композер.жсон забыл корень автолоада указать, да?
317 2376102
>>374420
Какие 400 строк в день? Иногда на фикс одного бага в две строки уходит 6 часов.
318 2376103
>>376102
Я так понимаю самое сложное это доказать что ты не верблюд и пройти собес?
319 2376127
>>374981 (Del)

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

Для более глубокого понимания разработки я бы советовал так же покрывать код тестами. Они тебе помогут убедиться, что код написан правильно и помогут обнаружить проблему, если ты вдруг при рефакторинге что-то сломаешь.
320 2376222
>>376127
Вкатунам тесты кажутся чем-то нереально сложным, обычно. Вряд ли он это будет делать.
Хотя ничё вообще сложного в этом нет. Достаточно видосиков посмотреть немного.
321 2376348
>>376276 (Del)
ну естественно то над чем ты сейчас работаешь ты будешь тестировать (дебажить) через дебаг или вручную. тесты не для этого - тесты для поддержания кода. чтобы последующие правки ничего не поломали. к тому же они документируют код, по тесту можно понять чего ждет (и не ждет) метод. плюс в системах со сложными связями это может помочь, т.к. иногда при правках одного места ломается другое, а заметить сразу не выходит. а тут поправили че надо, запустили юнит тесты и убедились в том, что вероятно все нормально
но то что нерабочий тест бесполезен это правда, и на поддержание тестов тоже нужны ресурсы и время, которое иногда выделить сложно..
322 2376441
Что пишут на пхп серьезного?
323 2376523
>>376441
На нем сегодня половина интернета. Достаточно серьезно?
324 2376528
>>376523
Только половина интернета это говноблоги на вордпресе.
325 2376547
>>376528
Так, ну и что для тебя тогда "серьезный проект"?
ВК достаточно серьезный?
image3 Кб, 94x51
326 2376568
Аноны, кто-нибудь работал с библиотекой TinyButStrong? Реально ли используя ее сделать скрипт, который будет объединять несколько docx файлов в один?
327 2376614
>>376547
Это 1 хай проект
328 2376699
>>376272 (Del)

Насчет неймспейсов, можешь почитать урок https://github.com/codedokode/pasta/blob/master/php/autoload.md если остались какие-то непонятные моменты.

Насчет фреймворка, то вот на что стоит обратить внимание:

Ты в composer.json использовал и auto-load, и autoload и require. Чтобы не сомневаться, открой документацию по composer https://getcomposer.org/doc/04-schema.md и проверь, какие ключи там можно использовать в конфиге. Удали некорректные ключи.

> class Request{


> public function getPath(){


> $path = $_SERVER['REQUEST_URI'] ?? '/';



Это не очень правильно, точнее совсем не правильно. У тебя класс Request всегда берет данные из глобальных переменных. Это значит, что ты к примеру не можешь создать Request с какими-то вручную заданными данными. Более того, непонятно вообще в чем тогда смысл создавать объект Request, если можно было просто сделать функции вроде getPath(), которые делают то же самое.

Лучше будет, если в Request данные будут храниться в полях и будет можно создать его как с вручную заданными параметрами, так и на основе глобальных переменных. Ты можешь посмотреть на класс Request из Симфони: https://github.com/symfony/symfony/blob/6.2/src/Symfony/Component/HttpFoundation/Request.php#L290

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

> $path = substr($path, 0, $possition);


Для этого есть стандартная функция parse_url().

> if($callback === false){


> echo "404";


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

Вообще, роутер ничего не выводит. Он лишь определяет, какой обработчик надо вызвать. Если твой роутер не только разбирает URL, но и вызывает обработчик, то это правильнее называть Front Controller.

Насчет Yii, ты можешь изучить его для начала как относительно простой фреймворк, но если ты захочешь взять что-то посовременнее, то есть микрофреймворк Slim и Symfony.
328 2376699
>>376272 (Del)

Насчет неймспейсов, можешь почитать урок https://github.com/codedokode/pasta/blob/master/php/autoload.md если остались какие-то непонятные моменты.

Насчет фреймворка, то вот на что стоит обратить внимание:

Ты в composer.json использовал и auto-load, и autoload и require. Чтобы не сомневаться, открой документацию по composer https://getcomposer.org/doc/04-schema.md и проверь, какие ключи там можно использовать в конфиге. Удали некорректные ключи.

> class Request{


> public function getPath(){


> $path = $_SERVER['REQUEST_URI'] ?? '/';



Это не очень правильно, точнее совсем не правильно. У тебя класс Request всегда берет данные из глобальных переменных. Это значит, что ты к примеру не можешь создать Request с какими-то вручную заданными данными. Более того, непонятно вообще в чем тогда смысл создавать объект Request, если можно было просто сделать функции вроде getPath(), которые делают то же самое.

Лучше будет, если в Request данные будут храниться в полях и будет можно создать его как с вручную заданными параметрами, так и на основе глобальных переменных. Ты можешь посмотреть на класс Request из Симфони: https://github.com/symfony/symfony/blob/6.2/src/Symfony/Component/HttpFoundation/Request.php#L290

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

> $path = substr($path, 0, $possition);


Для этого есть стандартная функция parse_url().

> if($callback === false){


> echo "404";


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

Вообще, роутер ничего не выводит. Он лишь определяет, какой обработчик надо вызвать. Если твой роутер не только разбирает URL, но и вызывает обработчик, то это правильнее называть Front Controller.

Насчет Yii, ты можешь изучить его для начала как относительно простой фреймворк, но если ты захочешь взять что-то посовременнее, то есть микрофреймворк Slim и Symfony.
329 2376701
>>376276 (Del)

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

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

Или ты захочешь обновиться с PHP7 на PHP8, опять же, надо все вручную перепроверять.

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

Отсутствие тестов приводит к тому, что разработчики боятся делать какие-то большие изменения, а просто дописывают свой код, не заботясь об архитектуре.
IMG20220610221403373.png1,5 Мб, 1019x1668
330 2376809
>>376699
хех, ты исправил папку где я уже не работал, я на время отложил разработку мвс фреймврка из за того что мало что пока знаю, уже сегодня-завтра перепишу по новой всё, что бы выглядело нормально

>Насчет неймспейсов


да с этим я уже разобрался не беда

>Также, советую ставить тайп-хинты у функций



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

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

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



да я уже заметил, я уже на 6 уроке, тобишь почти прошёл, буду ещё доку читать и разбираться более глубоко, в yii2 прям досконально хорошо реализована модель мвс

>то есть микрофреймворк Slim и Symfony



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

Я впринцыпе довольно сильно зайнтересован в изучений пыхи потмоу планирую много времени изучать

Не знаю как правельнее выразиться, но скажу как есть

дай свои контакты телеги/слаки/матрикс/что угодно, я буду переодичестки писать и спрашивать всякую интеерсную хуйню, я вижу ты кое что да знаешь. будет интересно попиздеть, если что заранее модешь написать мне в телегу @suityan
331 2377124
Сап, хочу вернуть boolean значение из sql запроса для проверки существования email
function emailExists($email)
{
$conn = new mysqli('localhost', 'root', 'somePass', 'Students');
return $conn->query("Select case when exists(select * from students where email='$email')
then cast(1 as bit)
else cast(0 as bit) end ;");
}
Однако выдает ошибку синтаксиса sql near 'bit) else cast(0 as bit) end' at line 2.
В чем собственно ошибка и как ее можно исправить?
332 2377135
>>377124
Почему бы просто не вернуть пхпшный булеан?
333 2377138
>>377135
А как в таком случае определить зависимость от запроса в бд?
То есть мне нужно, чтобы функция возвращала true при наличии записи с указанной почтой, и соответственно false при ее отсутствии.
334 2377176
>>377139 (Del)
...WHERE `email`=:mail LIMIT 1
Вроде как-то так
335 2377241
>>377124
Сделал так в итоге, сяп за помощь)
$search=$conn->query("select * from students where email='$email';");
return$search->num_rows;
336 2377376
>>377241
$email = "vascziyaANUSmai$E/lPUNCTUMrBSuu'; DROP DATABASE;";
1622423576173.jpg22 Кб, 346x387
337 2377380
338 2377387
>>377138

Ты можешь просто посчитать, сколько записей в базе есть с такой почтой. Если 0, то email не занят. Если 1 или больше, то занят.

То есть не надо писать сложную логику в запросе, когда проще получить количество и проверить его средствами PHP.
339 2377390
>>377241

Прочитай урок про SQL инъекции: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
340 2377408
Вот вы делаете сайты на работе, а потом заказчику надо что-то там добавить/исправить, как это реализуется?
341 2377539
Ну вот вы выучили language_xи может даже какие-то фреймворки/либы, далее что?
Вы понимаете что сейчас рыночек схлопнулся, и если вы не мид+ от 3х лет, то конкуренция очень большая.
Требуются знающие кадры чтобы сходу делать упругие вещи, там задачи реально не тривиальны.
342 2377691
>>377539
я вообще программистомвебмакакой работать не собираюсь =)
sage 343 2377725
>>377539
ну все во вкусно и точку пойдем работать и жрать воду с хлебом, че доебался
344 2377733
>>377691
с какой целью тогда изучаешь и тратишь время?

>>377725
лучше контент менеджегером программировать всякое на аштимел всякое для адинце
345 2377736
Блять как резюме писать?
Аноны которые уже нашли работку, покидайте свои
346 2377782
>>377736
https://spb.hh.ru/employer?hhtmFrom=main

с подобным уровнем самостоятельности тебе непросто будет не то что даже найти роботу, а элементарно жизненные вопросы какие-то решать
sage 347 2377847
>>377733
для кого-то это как в дотку пошпилить, написать пару строчек
а с утра на заводик пойти =)
348 2377988
>>377847
но быть упругим специалистом получающим $3k+ намного кайфовее же.
349 2377998
>>377782
Я написал резюме, лежит на hh и ждёт пока его прочтут, просто мне кажется что оно хуевое
350 2378020
>>377998
лол, имитация деятельности. (типа оправдание для себя -- ну смарите, что-то же делаю)

реально оценивай себя >>377539

этого мягко говоря не достаточно, но это твой выбор.
sage 351 2378030
>>377988
ну бля не всем дано иметь зп чтобы покупать нефтяные вышки нахууу
sage 352 2378045
>>378030
а ваще мне настолько похуй стало на поиск стажировок на пыхомакакена, что я просто уже f# дрочить стал фор фан. именно фарш, который вообще не выстрелит
353 2378108
>>378045
Чего не golang какой-нибудь?
Алсо что за "упругие" (вещи, специалисты и тд)?
354 2378120
>>378030
это не что-то запредельное или недоступное, >>378030
качественно работаешь, проявляешь трудолюбие в своем деле, после этого приятные цифры уже вопрос времени.

>>378045
такое себе развлечение.

>>378108
со временем поймешь.
sage 355 2378527
>>378108
Потому что дотнет очень классный
356 2378884
>>378527
дотнет говно для пидоров.
358 2378950
>>378923
Да мне похуй, я битрикс макака на 7.4 сидеть всю жизнь буду наху.
359 2378987
>>378950
соболезную )))))))))))))))))))))))))))))))))))))))))))))))
360 2379049
Чем лучше Джумла и Друпал Вордпресса??
361 2379078
>>378923
Как мне обновить openserver и чтобы все перенеслось кстати?
362 2379080
>>379078
так это только альфа,причем фичи так себе
363 2379081
>>379080
Да у меня вообще старая пыха там, 7я.
364 2379152
>>379141 (Del)
здоровья котику :3(перевод получил?)
365 2379158
>>379141 (Del)
Если ты не наживаешься на доверчивых людях, то сделай себе кредитку (в Тинькофф например тебе просто на следующий день после заполнения формы на сайте привезут домой и можно уже пользоваться) или подключи овердрафт на дебетовой карте и возьми эти жалкие 1300 рублей, за займ на 6 дней даже проценты платить не придётся, сколько взял столько вернёшь.
366 2379300
>>377539
Смотри офисные вакансии за прелелами ДСов - там конкуренции как не было так и нет.
367 2379443
>>347129 (OP)
Подскажите, пожалуйста, самую простую SQL инъекцию для тестирования поля
368 2379463
369 2379474
>>379463
Чет не слишком ли радикально базу удалять? Хотя почти просто, согласен
370 2379632
А почему
<? php
echo "hello!";
?>

не выводиться через xampp?
371 2379637
>>379632
<? php
Тут не должно быть пробела
372 2379638
>>379637
точно,спасибо
373 2379645
>>379637
а как сделать,чтобы две команды не печатали 2 слова в одну строку?
374 2379653
>>379645
echo "hello!<br>";
Изучи html
375 2379654
>>379645
Если работаешь в консоли, а не в браузере, то
echo "hello!\n";
376 2379672
Какой есть самый примитивный фреймворк на пхп?
377 2379918
>>379917 (Del)
https://www.php.net/manual/ru/function.mysql-query
RTFM
Все PDO юзают сейчас, насколько я знаю.
378 2379935
>>379672
spiral шутка
379 2379948
>>379672

Slim, это микрофрейморк. Но если ты собираешься изучать его код, то придется поднапрячься.
380 2379959
>>379917 (Del)
mysqli_query?
381 2379960
Я долбоёб или так и должно быть?
382 2380082
>>366277
А что надо учить?
Документация у yii2 охуенная, курсов полно. Всяких библиотечек полно
383 2380098
>>380000 (Del)
Так расчёты верны.
384 2380167
>>374398

>ООП


На торрентах - Дмитрий Елисеев. Скорость x2
385 2380170
>>374981 (Del)
На торрентах - дмитрий лаврик php и альберт степанцев profit
Там как раз mvc пилят с нуля по типу yii2. ORM которая возвращает объекты, view на основе буферизации с $this->render('main', ['model' => $model])
386 2380172
>>375820 (Del)
На пике Visual studio? Если на пиратку поставить оно мне винду не заблокирует проверкой?
387 2380178
>>380172
Это полу-опенсорсный VSvode, ничего не заблокирует
388 2380192
>>380082
На нем никто уже не пишет
389 2380208
>>380192

>На нем никто уже не пишет


Пишут. Глупо отказываться от такого простового фреймворка у которого все есть без пердолинга.
390 2380337
>>380082
Ларавел или симфони
391 2380417
>>379653

>Изучи html


Кстати есть какой-нибудь хороший сжатый справочник-памятка? Я как-то по верхам нахватался и часто путаю/забываю вещи. inb4 htmlbook
392 2380468
>>380417
Там нечего запоминать.
393 2380470
>>380337
Вообще без разницы, это просто инструмент, который будешь использовать. Важно понимание как оно работает просто. А по фреймворку базовые вещи за вечер освоить можно.

Если фанбой какой-то то можно так достаточно долго в скорлупе просидеть, но это ваше дело
394 2380477
>>380468
И css тоже?
395 2380701
>>380695 (Del)

>vs code


Целый день пытался включить там дебаггер для пыхи, в конце концов настроил, но как им пользоваться так и не научился.
396 2380708
>>379960

В этой задаче в учебнике под спойлером есть правильная цифра - 61270 р.

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

Попробуй поменять сумму кредита на 4 000 и проверить расчеты вручную. Должно получиться 6123 р.
397 2380709
>>380172

VS Code бесплатный, но с телеметрией. Заметь, что есть еще VSCodium, в котором вырезана телеметрия, но какие-то расширения могут отсутствовать.

Если ты хочешь писать PHP код в нем, то стоит поставить дополнительные расширения для автодополнения и проверок кода.
398 2380710
>>379645
.PHP_EOL
399 2380719
>>380706 (Del)
Я видел эти гайды, во-первых, у меня open server, а во-вторых, все равно не работало по ним пока я не добавил php.debug.executablePath в settings.json
400 2381073
Сап, слоны. Вкатываюсь в Laminas (a.k.a. Zend framework). Использую phpstorm и nginx. Не понимаю, как их подружить. Вот у меня есть nginx с конфигом, который хуй пойми, работает ли. Есть в phpstorm скелет приложения, который я могу запустить на встроенном веб-сервере пыхи через терминал. А как сделать так, чтобы nginx взял весь этот код и начал юзать? Нужен просто правильный конфиг, и сервер автоматически будет подключать интерпретатор на запросах, а phpstorm - это чисто редактор текста? Или я всё равно должен как-то запускать сервер в phpstorm?
401 2381082
>>381078 (Del)
Он у меня есть. Я так понял, они чисто в конфиге дружатся?
402 2381271
Объясните пожалуйста, зачем нужна буферизация? Не проще сначала написать header/setcookie, потом уже все остальное?
403 2381289
>>381287 (Del)
Короче это нужно практике, если приспичит хедер где-то в середине файла вывести?
404 2381555
>>380305 (Del)
80% рынка ))))
405 2381586
Установил Open server,создал файл с хеллоу ворлдом,запускаю,вместо сообщения какой то Index of,name,last modified,size,description.Что не так?
406 2381594
>>381586
В конфиге пропиши, что индексный файл может иметь форматы html, php.
407 2381635
>>381586
>>381594
Странно, у меня все из коробки работало, правда у меня далеко не самая последняя версия. Они там что-то подкрутили в конфиге?
408 2381652
>>381271

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

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

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

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

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

Анон >>381287 (Del) упомянул, что буферизация может ускорить отдачу контента. Такое возможно, но маловероятно. Такое бывает, если ты не используешь буферизацию и твой сервер отдает контент очень медленному клиенту, до которого долго идут данные. То есть, ты в PHP делаешь

echo "<html>";

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

Что касается кук и заголовков, то обычно во фреймворках их напрямую никто не ставит, а используют объект Response, потому проблемы с их отправкой нету. Буферизация для этого не нужна.
408 2381652
>>381271

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

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

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

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

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

Анон >>381287 (Del) упомянул, что буферизация может ускорить отдачу контента. Такое возможно, но маловероятно. Такое бывает, если ты не используешь буферизацию и твой сервер отдает контент очень медленному клиенту, до которого долго идут данные. То есть, ты в PHP делаешь

echo "<html>";

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

Что касается кук и заголовков, то обычно во фреймворках их напрямую никто не ставит, а используют объект Response, потому проблемы с их отправкой нету. Буферизация для этого не нужна.
409 2381695
>>381073

> Laminas (a.k.a. Zend framework)


Где это используют?
410 2382608
Не понял как найти эту тему в мануале (это наверное не по пхп вопрос вообще), я хотел узнать поподробнее про строку пути, вот например <a href='index.php'>Ссылка</a>(в данном случае вызывается файл из самого корня), когда в папке домена много подпапок и там тоже есть такой же файл index.php.
Мне надо было сделать <a href='../index.php'>Ссылка</a> чтобы вернуться к корректному файлу скрипта в одной из подпапок, так вот не хотелось бы экспериментировать, а знать правила построения пути к файлам.
411 2382618
>>382610 (Del)
https://puzzleweb.ru/en/html/8_links2.php
Все, нашел. Теперь только небольшой вопрос чем отличается просто 'index.php' от './index.php', по идее оба одинаково вызовут из текущей директории файл.
412 2382667
Сап, пыхари. Собираюсь в php вкатываться, живу в России. Есть три вопроса:

1. Сильно ли порушился внутренний рынок вакансий внутри страны после 24-го? Уменьшились ли зарплаты? Если да, то насколько в среднем?

2. Насколько я понял, php не востребован в Европе/США, но при этом востребован в России и странах СНГ. Действительно ли расклад такой, или я ошибся в своих наблюдениях?

3. Реально ли выйти на вакансию джуниора? Слышал краем уха, что php-джуниоры не нужны, и работодатели в РФ ищут как минимум миддлов.
И я-то в принципе мог бы поработать годик на фрилансе, и соврать, что у меня был коммерческий опыт.
Если бы не одно но: крупные фриланс-биржи уходят из России, а финансовой подушки хватит мне месяцев на 10, не больше.
Если буду пахать часов 9-10 в день без выходных, то смогу ли выйти на позицию джуниора через 10 месяцев, или лучше вкатываться в какой-нибудь другой язык?

Заранее спасибо за ответы и информацию.
413 2382687
Программировать прикольно,но нет идей для чего и что создавать.
мимо просто любитель
414 2383283
>>382608

По твоей ссылке приведены не все возможные формы относительных URL. Общее правило такое, что мы можем откинуть один или несколько компонентов URL слева и получится относительный URL, например:

http://example.com/page.html?a=1#target - это полный URL
//example.com/page.html?a=1#target - без схемы
/page.html?a=1#target - без authority (хост, порт и авторизация)
?a=1#target
#target - тут остался только последний кусочек от URL

Это расписано тут: https://github.com/codedokode/pasta/blob/master/network/urls.md
415 2383287
>>382687

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

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

Например, напечатав prifqi я получаю

private function |(): ?int {

}

pri значит private, f - function, q = ?, i = int

Кстати, самые часто употребляемые слова это $this-> и return. Я сделал для них сниппеты с буквами t и r. Ну и дополнительные сочетания вроде rn для return null.

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

Я даже поймал себя на мысли, что может быть имеет смысл это как-то автоматизировать, чтобы IDE анализировала проект и автоматически выдавала самые вероятные подсказки (используя теорию вероятности) вместо редко используемых функций или классов.
416 2383288
>>382687

Ну и может тебе будет интересно почитать блог, человек создает всякие простые проекты и даже с некоторых пытается заработать какую-то копеечку: https://tinyprojects.dev/projects
417 2383425
>>382667

> Насколько я понял, php не востребован в Европе/США, но при этом востребован в России и странах СНГ. Действительно ли расклад такой, или я ошибся в своих наблюдениях?



Не ошибся.
Если хочешь перекот в Европу, то паралельно изучай Golang.
418 2383566
>>347129 (OP)
Сап, php'ач!

Аноны, как настроение? Можно, я для поддержания общения буду иногда задавать тупые вопросы, на которые мог бы найти ответы в гугле или в документации, сюда? Здесь ведь все мои друзья, и мне интересно мнение анонов!

Заранее благодарен.

Чем отличается echo от print_r? Что лучше использовать?

Мимо вкатун, хех. Желаю всем отличного дня, а себе - удачи.
419 2383646
>>383566
П.С. И почему если из 100 извлечь квадратный корень, записать в переменную, то var_dump выводит - float? А если же озвести в квадрат, то var_dump выводит - int? Вроде ведь и 10 и 10000 - целые числа? Или это - вопрос высшей математики уже?
420 2383650
>>383646
П.С. Или так происходит потому, что в данном случае 10 - это результат как бы деления, поэтому результат в итоге считается дробным?
421 2383653
>>383646
https://www.php.net/manual/ru/function.sqrt.php
Функция sqrt возвращает float.
422 2383658
>>382667

> Слышал краем уха, что php-джуниоры не нужны, и работодатели в РФ ищут как минимум миддлов.


Правда. Но если IRL вакансию и можно найти(в крупных городах, естественно), то на удалёнке скорее всего лососнёшь тунца. Никому не нужен джуниор на удалёнку. Даже хороший и толковый.
423 2383662
>>382667

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


И да, не сможешь.

>>383658-кун.
424 2383673
>>383653
Я это написал же.
Вопрос в другом - Почему это значение именно float, а не int? Получается, потому что квадратный корень можно извлекать и из дробных чисел, поэтому для удобства приняли, что даже если результат от извлечения корня будет целым, то просто везде будем писать float, чтобы не делать лишних движений?

Но дробное число при возведении в квадрат тоже может быть дробным, а целое - будет целым, но после возведения 100 в квадрат возвращается int.
425 2383830
>>383646

Это хороший и довольно интересный вопрос.

Возможно, ты подумал, что целые числа всегда имеют тип int. Это не так.

Тип int позволяет представлять целые числа от примерно -9×10¹⁸ до 9×10¹⁸ (в 64-битной версии PHP, в 32-битной предел около 2 миллиардов). Числа этого типа представлены точно, то есть каждая цифра в таком числе правильная. Мануал: https://www.php.net/manual/ru/language.types.integer.php

Тип float позволяет хранить и дробные, и целые числа примерно от -10³⁰⁸ до 10³⁰⁸ (в 64-битной версии). Этот тип неточный и сохраняет только первые 14-16 цифр числа, а остальные цифры теряются (но их количество не теряется). Хуже того, многие дробные числа вроде 0.1 нельзя точно представить в формате float. Также этот тип интересен тем, что в нем есть отрицательный ноль -0, минус и плюс бесконечность и NaN, "не число". NaN можно получить, если вычислить sqrt(-4). Мануал: https://www.php.net/manual/ru/language.types.float.php

Как видишь, целое число может быть и типа int, и типа float. Обычно целые числа представлены типом int, но они могут превратиться в float если выйдут за допустимые пределы или если станут дробными. Например, если ты поделишь int(5) на int(2), то получишь float(2.5).

Функция вычисления корня возвращает тип float. Так сделано, потому что корни чаще получаются дробными, чем целыми и функция, которая всегда возвращает int, была бы бесполезна.

Тут можно спросить: а почему, когда результат целый, он не преобразуется обратно в int?

Перечитай написанное выше: float это приближенный тип. Если после извлечения корня из 10 000 ты получил float(100), то ты не можешь быть уверен: это точно 100 или это на самом деле 100,000 000 000 000 000 1 и последняя цифра просто не сохранилась. Так как мы не можем гарантировать, что там ровно 100, мы не хотим преобразовать число в int. Обычно, если число превратилось во float, в int оно само уже не вернется.

Конечно, эту проблему можно решить: можно преобразовать результат в int, возвести в квадрат и сравнить с исходным числом. Если они совпадут, значит, результат действительно целый. Но это надо заморачиваться и писать дополнительный код, и наверно просто никому это не нужно (но ты можешь написать свою функцию, которая будет это делать, если есть желание).
425 2383830
>>383646

Это хороший и довольно интересный вопрос.

Возможно, ты подумал, что целые числа всегда имеют тип int. Это не так.

Тип int позволяет представлять целые числа от примерно -9×10¹⁸ до 9×10¹⁸ (в 64-битной версии PHP, в 32-битной предел около 2 миллиардов). Числа этого типа представлены точно, то есть каждая цифра в таком числе правильная. Мануал: https://www.php.net/manual/ru/language.types.integer.php

Тип float позволяет хранить и дробные, и целые числа примерно от -10³⁰⁸ до 10³⁰⁸ (в 64-битной версии). Этот тип неточный и сохраняет только первые 14-16 цифр числа, а остальные цифры теряются (но их количество не теряется). Хуже того, многие дробные числа вроде 0.1 нельзя точно представить в формате float. Также этот тип интересен тем, что в нем есть отрицательный ноль -0, минус и плюс бесконечность и NaN, "не число". NaN можно получить, если вычислить sqrt(-4). Мануал: https://www.php.net/manual/ru/language.types.float.php

Как видишь, целое число может быть и типа int, и типа float. Обычно целые числа представлены типом int, но они могут превратиться в float если выйдут за допустимые пределы или если станут дробными. Например, если ты поделишь int(5) на int(2), то получишь float(2.5).

Функция вычисления корня возвращает тип float. Так сделано, потому что корни чаще получаются дробными, чем целыми и функция, которая всегда возвращает int, была бы бесполезна.

Тут можно спросить: а почему, когда результат целый, он не преобразуется обратно в int?

Перечитай написанное выше: float это приближенный тип. Если после извлечения корня из 10 000 ты получил float(100), то ты не можешь быть уверен: это точно 100 или это на самом деле 100,000 000 000 000 000 1 и последняя цифра просто не сохранилась. Так как мы не можем гарантировать, что там ровно 100, мы не хотим преобразовать число в int. Обычно, если число превратилось во float, в int оно само уже не вернется.

Конечно, эту проблему можно решить: можно преобразовать результат в int, возвести в квадрат и сравнить с исходным числом. Если они совпадут, значит, результат действительно целый. Но это надо заморачиваться и писать дополнительный код, и наверно просто никому это не нужно (но ты можешь написать свою функцию, которая будет это делать, если есть желание).
426 2383832
>>383566

echo может выводить только строки и числа. print_r и var_dump выводят данные любых типов, например, массивы. print_r и var_dump предназначены больше для отладки, чем для использования в реальном коде. Выбирай, что использовать, в зависимости от ситуации.
427 2383971
>>347129 (OP)
Заливаю проект на прод сервер. Проект laravel + vue. Сервер работает, но фронт выдает ошибку 404 (redirected you too many times.).
Нода установлена. В чем проебался? На локальном работает все заебок. Видимо, вью установлен как-то неправильно. Может, делал кто-нибудь подобное?
428 2384053
>>383971
Лога ошибки нет?
429 2384124
>>384053
Нет :(
430 2384455
>>382667

>1. Сильно ли порушился внутренний рынок вакансий внутри страны после 24-го? Уменьшились ли зарплаты? Если да, то насколько в среднем?


Сильно - вакансий в разы меньше стало.

>2. Насколько я понял, php не востребован в Европе/США, но при этом востребован в России и странах СНГ. Действительно ли расклад такой, или я ошибся в своих наблюдениях?


В РФ тоже почти не востребован - все на ноде делают. Или питоне.

>3. Реально ли выйти на вакансию джуниора? Слышал краем уха, что php-джуниоры не нужны, и работодатели в РФ ищут как минимум миддлов.


Да. На позицию джунов ищут миддлов, на позицию миддлов - синьёров. Без опыта делать там нечего, тем более сегодня.

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


Лучше в питон тогда - там легче учиться. Или в жс.
431 2384677
Что вообще спрашивают на собеседованиях? Лучше честно отвечать "не знаю" или булшитить что-нибудь?
432 2384748
>>384455

> В РФ тоже почти не востребован - все на ноде делают.



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

Ну и твое утверждение не проходит проверку на hh:

разработчик php, вся Россия - 3432 вакансии
разработчик node, вся Россия - 1311 вакансий
разработчик python, вся Россия - 4315 вакансий

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

Что касается Питона, он мне нравится и я его использую (numpy, sympy, sqlalchemy, плюс в нем есть библиотеки для нейросетей), он дает высокую скорость написания кода, но в нем нет проверки типов в рантайме, mypy выдает очень много левых предупреждений, и его производительность, как я понимаю, ниже, чем у PHP, так как в Питоне больше ценят простоту кода, чем оптимизацию.
433 2384752
>>384677

Погугли вопросы к собеседованию. Новичков без опыта спрашивают по теории, то есть, то, что описано в официальном мануале PHP, ООП, реляционные СУБД, джойны, транзакции, блокировки, внешние ключи. Какие фреймворки/библиотеки знаешь.
434 2384778
>>384748
Да не пишут бек на ноде без тайпскрипта уже. Инкрементальную компиляцию почти не замечаешь. Типизация в общем лучше чем в пхп 8, но в пыхе добавляют фичи в язык"шоб было как у шарпе с жавой", а в js мало кардинальных улучшений.
435 2384783
>>347129 (OP)
Есть спецы по вордпрессу? Есть один сайт. Залез в базу, а там в поле post_content таблицы wp_posts текст поста хранится с html тегами. Это нормально? Пробовал гуглить, но ничего не нашел.
436 2384793
>>384748
Сейчас вроде Go становится популярным.
437 2384794
>>384748

>разработчик php, вся Россия - 3432 вакансии


80% - параша уровня завода по заёбистости и зарплате. Что смыс циферками мерятся если на пыхе 90% это сайтики на вп и битриксе, а у остальных нормальная разработка?
438 2384797
>>384783
Для ВП это норма. С другой стороны как ты пост с разметкой сохранишь? Правда в норме это не норма нихуя и БД там полный ад.
439 2384825
>>384748
вакансии по питону по разным областям, не только по вебу. Плюс преподавателей курсов ищут )
440 2384832
>>384748
963 вакансии по запросу «django or flask not преподаватель»
441 2384849
>>384832
сори неправильно посчитал. По России 826 получается.
442 2384864
>>384455

>Лучше в питон тогда - там легче учиться. Или в жс.


Мда блат. Если ищешь полегче - курьером.

Нужно учить то что востребовано и на что есть спрос там где живешь/собираешься работать.

По пайтону при поиске будешь конкурировать со студентами/выпускниками которых плотно штрунделировали по алгоритмам на этом самом пайтоне не один год.
443 2384873
>>384864

> Нужно учить то что востребовано и на что есть спрос там где живешь/собираешься работать.


И что же востребовано в России? PHP? Кулстори, Боб. Кулстори. Расскажи ещё.
444 2384879
>>384873
Дык, открой вакансии и посмотри... Symfony/Laravel, как везде. Плюс вордпресс для школоты.
445 2384881
>>384873
Бозе, ну вороти нос, ага))

На пьиЭйчьПьи работает ~80% всех сайтов. Это нужно дорабатывать и обслуживать. На рыночке в целом спрос есть.

Это просто инструмент, кому-то может нравиться или нет технология, но свои функции она выполняет. Если дахуя фанбой можешь дрочить голанг и попробовать устроиться)) или хз чего ты там фанбой, зарабатываешь уже? будь честен для начала хотя бы с собой
446 2384887
Через heredoc php функции вызываются вообще? Например date() чтобы вывести у timestamp'а из бд.
447 2384889
>>384887
конечно,
просто напиши cli-утилиту/скрипт на php,
можно даже с параметрами,
и вызывай с помощью интерпретатора, а-ля /bin/php
448 2384891
>>384889
Не, я просто думал он типа echo работает, в крайнем случае фигурными скобками выделить как значения.
449 2384893
>>384891
что-то такое есть https://stackoverflow.com/questions/104516/calling-php-functions-within-heredoc-strings , если очень ннада, но я бы вынес в отдельный файл-скриптик на РНР
450 2384894
>>384893
Ну вот я выбираю записи из бд, мне их надо на страницу все отобразить, а там у каждой записи timestamp вместо времени человеческого, как поступить лучше?
451 2384896
>>384894
тут вообще РНР не нужен, достаточно преобразовать timestamp в нужный формат на уровне запроса к БД, например для мускуль:

select date_format(column_name, '%Y-%m-%d') as human_date

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
452 2384898
>>384896
Не знал про такое, спасибо. Читаю эти книги по пхп и как рыба об лед бьюсь, в жизни все равно вещи по-другому делают. Хз как устраиваться куда-то вообще.
453 2384899
>>384898
если освоишь ООП, MVC и Solid -- иди пили Symfony/Laravel, за них платят по-человечески
454 2384900
>>384899
Да я уже про деньги не думаю, мне бы хоть за еду, лол.
455 2384905
>>384900
А что ты уже умеешь, и где обитаешь?
456 2384944
>>347129 (OP)
Все уснули. Готовьте перекат!
457 2384945
Пытаюсь создать проект Laravel , ввожу команду php composer.phar create-project --prefer-dist laravel/laravel mysite , получаю сообщение To enable extensions, verify that they are enabled in your .ini files:
- C:\php\php.ini
Что это означает и что делать?
458 2384978
>>384945

У тебя не установлены (или установлены, но не включены в php.ini) какие-то расширения PHP, которые требуются для Laravel. Какие именно, должно быть написано в сообщении об ошибке.
image.png98 Кб, 947x613
459 2385001
Как в шаге установки модуля получить введенные данные в инпут?

Почему через GET/POST не получается вытащить данные с инпута? Битрикс их куда-то в другое место сохраняет или как?

Я пробовал и вручную указывать метод и пост и гет, но толку ноль.
460 2385025
>>385001
Всё пацаны, разобрался. Сейчас у меня что-то данные с чекбокса не хотят устанавливаться. Думаю туплю где-то как обычно.
461 2385026
>>385001
Через контекст, а с него через $request оказывается надо всё брать.
462 2385081
>>385026
Что за контекст?
464 2385117
>>385104
А, это эксклюзивно к битриксу относится, я так и думал. Кстати как ты его начал изучать? У меня в регионе вроде пользуется спросом, в вакансиях зачастую идет вместе с пхп.
465 2385258
>>384978
спасибо.
466 2385269
const от define() отличается ведь, да? Там в комментах мануала пишут что-то про время доступа или что-то в этом роде.
467 2385716
Можно ли базовыми средствами зашифровать(или как там) передачу данных с формы на сервер?
468 2385745
>>385117
Начинал в 2019 в июне вкатываться. Начал с фронта как и большинство вкатунов. Потом забросил, даже не осилив жс. Потом через 3 месяца снова начал пытаться, у меня случилось горе, и я снова сдался. Потом через полгода начал изучать C# по метаниту, прошел где-то до делегатов, охуел от сложности всего и снова сдался.
Потом я наконец пришел в пхп, его уже довольно основательно изучил по разным ресурсам, уже и задачи на кодварсе решал, правда несложные, максимум 5кую. Параллельно немного изучил sql и фронт. Ну и тоже периодически бросал, возвращался и так вот до начала этого года. С начала года начал пытаться в Битрикс, т.к. подумал, что это изи вкат во ВСЕХ планах. Но оказалось изи вкат только в плане количества вакансий и меньшей конкуренции.

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

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

В общем, за всё время вкатунства, это первый раз, когда мне удалось зайти так далеко, да еще и заинтересоваться всей этой темой. Я седня сдал ласт задание и был нереально рад, что смог его сделать. Завтра уже продолжу учиться с радостью. Щяс позволю себе посмотреть аниме перед сном.
468 2385745
>>385117
Начинал в 2019 в июне вкатываться. Начал с фронта как и большинство вкатунов. Потом забросил, даже не осилив жс. Потом через 3 месяца снова начал пытаться, у меня случилось горе, и я снова сдался. Потом через полгода начал изучать C# по метаниту, прошел где-то до делегатов, охуел от сложности всего и снова сдался.
Потом я наконец пришел в пхп, его уже довольно основательно изучил по разным ресурсам, уже и задачи на кодварсе решал, правда несложные, максимум 5кую. Параллельно немного изучил sql и фронт. Ну и тоже периодически бросал, возвращался и так вот до начала этого года. С начала года начал пытаться в Битрикс, т.к. подумал, что это изи вкат во ВСЕХ планах. Но оказалось изи вкат только в плане количества вакансий и меньшей конкуренции.

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

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

В общем, за всё время вкатунства, это первый раз, когда мне удалось зайти так далеко, да еще и заинтересоваться всей этой темой. Я седня сдал ласт задание и был нереально рад, что смог его сделать. Завтра уже продолжу учиться с радостью. Щяс позволю себе посмотреть аниме перед сном.
470 2385753
>>385745

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


ненадо, а то опять случится горе и ты сдашься
471 2385764
>>385745
Я вообще конкретно про битрикс интересовался, может хорошие курсы или книги, но твоя история тоже интересна. У меня тоже уже несколько раз руки опускались и сам я очень медленно все делаю в плане обучения. Там наверное надо бац-бац кабанчикам быстро все.
472 2385771
>>385751
О, спасибо. Все подробно и понятно.
473 2385782
>>385764
Ну хорошие курсы только от самого битрикса, еще можно посмотреть Михаила Базарова. Остальное только по крупицам собирается с опытом и гуглением.
474 2385797
Почему полям класса все равно надо писать модификатор public (иначе не пропускает интерпретатор), вроде там public по-дефолту должен быть?
475 2385872
>>385797

>должен


кому и почему? есть же документация https://www.php.net/manual/en/language.oop5.properties.php
476 2385879
>>385872
Ну вот написано же

>Свойства класса могут быть определены как public, private или protected. Свойства, объявленные без явного ключевого слова области видимости, определяются как общедоступные (public)


Я делаю вывод что можно объявлять без указания области видимости и будет назначено public. Так вот я не могу просто написать свойство класса $x без всего, пишет ошибку.
477 2385959
>>385879

>можно объявлять без указания области видимости и будет назначено public


Схуяли? И зачем вкатышу вообще об этом думать?
478 2386063
>>385751

> Определять константу почти всегда лучше с помощью define(), потому что тут больше возможностей и меньше вариантов «поймать» ошибку.



Это неправильный вывод. Объявлять лучше с помощью const, так как это более чистый синтаксис и он (наверно) лучше понятен статическим анализаторам кода. define можно использовать только если const не работает.
479 2386064
>>385716

Если использовать протокол HTTPS, то все передаваемые и получаемые данные шифруются.
480 2386067
>>385797

Да, такая рекомендация есть в стандартах. Я думаю, это ради читаемости, чтобы было видно, что поле публичное, а не то, что ты пока не решил, каким его сделать.
481 2386118
>>386067
Просто мне показалось странным, что методы пропускает без указания, а свойства нет. Там похоже ноги растут из старых версий пыхи где надо было var писать.
image.png53 Кб, 945x532
482 2386149
>>386118
>>385879
>>385797
Вон что чел пишет.
image.png15 Кб, 588x285
483 2386160
ну что за хуйня? уже весь интернет перелопатил. Заливаю проект на сервер, а он выдает 404. Хотя на локальном все отлично работает. в чем ошибка то блять?
484 2386222
Правь .htaccess
У тебя скорее всего рут сайта на папку public поставлен.
485 2386300
>>386273 (Del)
Так полно вакансий где нужен опытный разраб пхп, чтоб переписывать код на го.
486 2386309
>>386300
Что там, по скорости такой прирост?
487 2386323
>>386309
https://habr.com/ru/post/495224/

Правда это гибрид, но тоже хорошо показывает.
488 2386372
Привет всем. Как себя чувствует пхп в плане вакансий в настоящее время? Стоит вкатываться? Развивается ли пхп или загнивает?
489 2386383
>>386372

>пхп


пы эч пи*
490 2386389
>>374485

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



что за библиотека?
491 2386394
>>375820 (Del)
что за цветовая схема?
492 2386449
>>386372
как обычно, вакансий полно -- открой сам и посмотри
image.png1,3 Мб, 1376x764
493 2386753
>>386372
Сижу обновляю приложение на РНР, которое я написал на заказ в одно лицо на
plain PHP + MariaDB + Bootstrap +JS/jQuery + SCSS + Gulp + RabbitMQ + Java.

Бизнес, основанный на этом приложении, принёс владельцам около 1 млрд рублей за 5 лет. Я получил за это время свои скромные 2-3 М, параллельно работая над другими подобными проектами.

Работать буду до утра, и могу ответить на вопросы по программированию и фрилансу.
хуи не сосу, бочку не делаю
494 2386780
>>386778 (Del)
В вопросе тебе стоило бы указать версию РНР и тип БД.
Попробуй так:

$statement->execute();
$statement->setFetchMode(PDO::FETCH_ASSOC);
while($row = $statement->fetch()) {
print_r( $row );
}
495 2386781
>>386778 (Del)
Не по теме конечно, но писал бы ты лучше альтернативным синтаксисом, а то выглядит как блевота, честно говоря.
496 2386810
есть ли смысл писать на php8? или лучше сидеть на 7.4? просто многие либы как будто не поддерживают восьмерку и работают на ней хуево
497 2386811
>>386753
сколько потребовалось чтобы вкатиться в работу?
498 2386841
>>386811
вкатиться на первые копейки -- пара месяцев после курсов (в сертифицированном обучающем центре, очно)

на +- норм деньги -- стандартные 10 000 часов коммерческого опыта
499 2386842
>>386808 (Del)
открой код страницы и посмотри, что там на месте изображений
500 2386848
>>386807 (Del)
<? php foreach(): >?
#code
<php endforeah; ?>
501 2386923
>>386841
Какой раньше вкат легкий был, сейчас уже после никаких курсов не возьмут
502 2386942
Как обновить opensever без настраивания всего заново и потери существующих БД?
>>386923
А сейчас как вкатываются вообще тогда?
503 2387257
>>386942

> А сейчас как вкатываются вообще тогда?



Никак, джуны не нужны, сделаешь пару пет проектов, 18 летний тимлид обоссет на собесе и пойдешь с лицом лягушки на завод
504 2387295
>>387257
На заводе пишут на пыхе? Или ты имеешь в виду гайку крутить?
505 2387421
>>387257

>18 летний тимлид


Нах в такие уебанские конторы ходить, лол.
Я стал отказываться от таких цирковых собеседований (могу себе позволить)
506 2387509
>>387295
На завод только с ВО прогеров берут, а вкатуны гайки крутить, да
507 2387521
>>387509
Ну у меня бакалавриат по ит, толку.
508 2387532
>>387521
так ты умеешь что-то или нет?
509 2387578
>>387532
Define "что-то". Могу из формы значения в базу писать и потом выводить их через echo. Но так никто не делает ведь да, там какие-то шаблонизаторы нужны и т.д.
510 2387636
>>386160

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

Открой инструменты разработчика в браузере (F12) на вкладке Network, перезагрузи страницу и посмотри, что там выведется.

>>386389

Пиджакс, на vanilla js, 6 Кб в сжатом виде. https://github.com/MoOx/pjax

Меня удивляет, что люди не знают про такую библиотеку и начинают изобретать велосипеды на реакте.
511 2387638
>>386778 (Del)

Это PDO? Тогда в нем есть fetchAll(). Однако, в него не надо передавать текст SQL запроса. Ты ведь уже указал текст запроса при вызове prepare(). Вот мануал (и там есть примеры кода с fetchAll): https://www.php.net/manual/ru/pdostatement.fetchall.php

Кто выдает ошибку? Твоя IDE или при выполнении кода реально возникает ошибка?

Не надо писать цикл с fetch, если тебе нужны все записи, то лучше использовать fetchAll().

Также, при выводе данных на странице нужно использовать htmlspecialchars, чтобы не было уязвимости XSS и чтобы все символы корректно вставлялись в HTML, как описано тут: https://github.com/codedokode/pasta/blob/master/security/xss.md
512 2387640
>>386807 (Del)

Это <?= htmlspecialchars($x) ?> вместо <?php echo $x; ?> и if через двоеточие. Мануал: https://www.php.net/manual/ru/control-structures.alternative-syntax.php
513 2387643
>>387578

Не знаю, нужно ли тебе это, но у нас есть урок про шаблонизаторы: https://github.com/codedokode/pasta/blob/master/php/templates.md

А так да, тебе надо учить ООП и фреймворки, а не писать кривые скрипты на чистом PHP.
514 2387678
>>387643
Я читал урок и в принципе понимаю как поделить обработку формы и "шаблон", который вызывает через action этот обработчик, но вот этих сторонних шаблонизаторов не касался.
Сейчас на чистом не пишут, только фреймворки и CMS? И предполагается что джун уже знает это все чтобы с 1го дня с этим работать?
515 2387826
Не могу определиться какой вариант лучше использовать.

От тебя жду ответ - какой вариант предпочтешь и почему.
Код: 3v4l.org/sJMke
516 2387831
>>387826

Есть еще вариант с array_reduce, по моему, в плане читаемости вариант с циклом лучше и короче, только скобку лучше перенести:

foreach ($enjoyers as $e) {
$sum += $e->getSomething();
}

Также, в коде с array_map желательно закрывающую скобку ставить в начале строки

echo array_sum(array_map(
....fn($e) => $e->getSomething(),
....$enjoyers
));

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

$ids = array_map('intval', $iids);
517 2387949
image.png8 Кб, 545x77
518 2388356
>>387831
Ну да, вышло короче на одну функцию.

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

Спасибо.
519 2388360
>>387918 (Del)

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

mysql -uroot users

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

Тут https://askubuntu.com/a/763359 пишут, что теперь подсоединиться к mysql как root можно только если ты залогинен в систему как root. Работать из-под root это очень плохая идея, потому нужно создать в MySQL нового пользователя и дать ему права на все базы данных. Для этого коннектимся к БД, используя sudo:

sudo mysql -uroot

Далее, создаем нового пользователя БД:

CREATE USER 'имя пользователя'@'localhost' IDENTIFIED BY 'пароль';

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

Далее, даем новому пользователю все виды доступа ко всем таблицам всех баз данных:

GRANT ALL PRIVILEGES ON звездочка.звездочка TO 'имя пользователя'@'localhost' WITH GRANT OPTION;

И применяем изменения:

FLUSH PRIVILEGES;

Если ты хочешь дать доступ не ко всем базам данных, а только к одной, то пиши ... PRIVILEGES ON базаданных.звездочка ...

После этого проверь, что логин работает:

mysql -uпользователь -pпароль

Если все ок, то впиши данные в свой скрипт.

Мануал:

CREATE USER https://dev.mysql.com/doc/refman/8.0/en/create-user.html
GRANT https://dev.mysql.com/doc/refman/8.0/en/grant.html

Чтобы увидеть всех пользователей, выполни запрос
519 2388360
>>387918 (Del)

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

mysql -uroot users

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

Тут https://askubuntu.com/a/763359 пишут, что теперь подсоединиться к mysql как root можно только если ты залогинен в систему как root. Работать из-под root это очень плохая идея, потому нужно создать в MySQL нового пользователя и дать ему права на все базы данных. Для этого коннектимся к БД, используя sudo:

sudo mysql -uroot

Далее, создаем нового пользователя БД:

CREATE USER 'имя пользователя'@'localhost' IDENTIFIED BY 'пароль';

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

Далее, даем новому пользователю все виды доступа ко всем таблицам всех баз данных:

GRANT ALL PRIVILEGES ON звездочка.звездочка TO 'имя пользователя'@'localhost' WITH GRANT OPTION;

И применяем изменения:

FLUSH PRIVILEGES;

Если ты хочешь дать доступ не ко всем базам данных, а только к одной, то пиши ... PRIVILEGES ON базаданных.звездочка ...

После этого проверь, что логин работает:

mysql -uпользователь -pпароль

Если все ок, то впиши данные в свой скрипт.

Мануал:

CREATE USER https://dev.mysql.com/doc/refman/8.0/en/create-user.html
GRANT https://dev.mysql.com/doc/refman/8.0/en/grant.html

Чтобы увидеть всех пользователей, выполни запрос
520 2388380
>>387678
Ну где-то и на яве пишут, джун сейчас во-первых никому не нужен, во-вторых да, должен знать все и больше
521 2388396
>>388380
Ну охуенно, а где нужны джуны тогда? Сейчас вроде "дефицит айти специалистов".
522 2388400
в общем спустя какое-то время подумал - нафиг это программирование, вот это всякое айти там да.
бездушно это, не лежит действительно к этому душа так сказать.
523 2388438
>>388400
Держи в курсе.
524 2388464
>>388396
>>388400
Ну в битрикс вкатывайся. Там не нужны алгоритмы, надо просто разбираться в самом битриксе, в ООП, в MVC, которое у битры немного другое, немного скуль, немного фронт. Хотя где-то много фронта, т.к. нет отдельного, по-разному короче.

Я к тому, что тут проще вкатиться, конкуренция меньше, знаний надо меньше. Надо лишь разобраться в устройстве всего битрикс фреймворка и всё.
525 2388622
>>386222
>>387636
Спасибо, ошибка действительно была из-за непрвильно выставленного рута сайта
526 2388625
>>388396
Действительно дефицит, только как ты написал СПЕЦИАЛИСТОВ. А джун нахуй нужен? Чтобы его учить? Ты хоть 2 года учи дома за проектами свой ларавел, разработка это совсем другое. В компании будешь учиться с нуля, это никому не нужно
527 2388671
>>388625
Ну и откуда кабаны хотят новых "мидлов" тогда получить?
528 2388691
>>388671
Обучать есть смысл, если работа узкопрофильная. А на пхп у кабана всегда найдется работник с подходящим опытом. Даже если поиск будет долгим это профитнее чем учить новичка с нуля.
529 2388692
>>388671
Да им поебать, придет человек хорошо, не придет итак деньги капают, вакансия есть не просит
530 2388742
>>388625

Ты не прав. Джун, если он дома тщательно изучил HTML, CSS, PHP, ООП, фреймворк, СУБД, алгоритмы, проектирование интерфейсов, очень полезен.

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

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

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

Естественно, везде речь идет о сообразительном джуне, готовом разбираться в коде и любящем читать англоязычную многостраничную документацию. Если это какой-нибудь выпускник курсов по информатике, которого учили только числа Фибоначчи считать, или вкатыш, не понимающий ООП и не желающий читать мануалы, но считающий, что он заслуживает средней зарплаты по отрасли, то конечно, толку от него 0.
531 2388749
>>388742
Откуда вы это берете пздц. Тут одни диваны-вкатыши сидят? Какие-то абстракции в голове придумываете, как можно джуна занять и за что ему все таки заплатить. Такое может написать только тот, кто в компании никогда не работал
532 2388785
>>388749
Расскажи реальную ситуацию из собственного опыта.
533 2388807
>>388785
Рассказываю, джунов никто не берет, нигде, хантят одних и тех же людей туда сюда, делают проектики, потихоньку зарабатывают
534 2389009
кароче решил изучить этот ваш пиэйчпи. буду каждую неделю теперь отписывать об результатах. сам я работаю полу эникеем полу админом так что я не вкатывальщик, похуй искать работу по этой залупе или нет посмотрим. до этого програмирование вообще не изучал по факту(так в шараге проходили но я ничего не делал)
535 2389088
>>388749

Открываем hh, выбираем "без опыта", получаем вакансии: https://hh.ru/search/vacancy?area=1&area=113&experience=noExperience&search_field=name&search_field=company_name&search_field=description&text=разработчик+php&from=suggest_post

Ну и может быть, как опытный, ты расскажешь никогда не работавшему в компании человеку, кто у вас занимается прикручиванием форм обратной связи, перекрашиванием кнопок и правкой текста условий использования сайта? Исключительно сениоры с 10 годами стажа?
536 2389154
>>389009
Принтер почини мне, компьютерщик
537 2389170
>>389009
Я умею подключаться к mysql, делать запросы, еще могу решать задачки на кодварсе, еще задачки с ОП книги, еще... Синтаксис ООП знаю, но применять пока не умею, только собираюсь писать свой фреймворк по гайду. Потом мб свой целиком зделаю, хотя зачем, тут ведь главное понять внутренности плюс-минус, а потом уже переходить к популярным фреймворкам типа битрикса или ларавель или симфони. Оттуда уже делать какой-то проектик, хотя это сложно когда нет поставленной задачи, за которую тебе заплатят. Но один проект заставить себя можно сделать. Правда до конца не получилось пока ни разу.

Держу в курсе.
538 2389201
>>389170

>Zdelau


xdddddd

>derju v kurse


ok. pohui.
539 2389273
>>347129 (OP)
Читаю спецификацию языка. Возник вопрос. Что за нотация используется, с помощью которой описывают синтаксис? Она мне не совсем понятна.

https://phplang.org/spec/13-functions.html#function-definitions
540 2389274
>>389170

>собираюсь писать свой фреймворк по гайду


Есть гайд?
541 2389329
>>389274
Ну степ бай степ гайд только. Но есть и статья просто с подсказками. Загуглиш сам.
542 2389352
>>389273

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

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

Например, мы можем сказать, что выражение 2 + 2 это не-терминал, так как оно составлено из трех терминалов: ЧИСЛО 2, +, ЧИСЛО 2.

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

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

Например, лексическая грамматика может выглядеть так:

ЦИФРА (не-терминал) - это '0', '1', ... '9'
БУКВА это 'a'...'z'
ПОДЧЕРКИВАНИЕ это '_'
ЦЕЛОЕ_ЧИСЛО - это одна или более ЦИФР
ИМЯ_ПЕРЕМЕННОЙ - это '$', затем (БУКВА или ПОДЧЕРКИВАНИЕ), затем 0 или более (ЦИФР, БУКВ или ПОДЧЕРКИВАНИЙ)

Здесь ЦИФРА - это не-терминал. Но в синтаксической грамматике ЦИФРА и ИМЯ_ПЕРЕМЕННОЙ будут уже терминалами, и они могут использоваться так:

ПРИСВАИВАНИЕ - это ИМЯ_ПЕРЕМЕННОЙ, '=', ВЫРАЖЕНИЕ

Правила грамматики по-английски почему-то называют productions.

Для описания правил грамматики есть стандартные синтаксисы вроде BNF (очень старый и неудобный), ABNF, EBNF.

В спецификации используют свой стандарт, которые расплывчато описан тут https://phplang.org/spec/09-lexical-structure.html#grammars
542 2389352
>>389273

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

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

Например, мы можем сказать, что выражение 2 + 2 это не-терминал, так как оно составлено из трех терминалов: ЧИСЛО 2, +, ЧИСЛО 2.

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

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

Например, лексическая грамматика может выглядеть так:

ЦИФРА (не-терминал) - это '0', '1', ... '9'
БУКВА это 'a'...'z'
ПОДЧЕРКИВАНИЕ это '_'
ЦЕЛОЕ_ЧИСЛО - это одна или более ЦИФР
ИМЯ_ПЕРЕМЕННОЙ - это '$', затем (БУКВА или ПОДЧЕРКИВАНИЕ), затем 0 или более (ЦИФР, БУКВ или ПОДЧЕРКИВАНИЙ)

Здесь ЦИФРА - это не-терминал. Но в синтаксической грамматике ЦИФРА и ИМЯ_ПЕРЕМЕННОЙ будут уже терминалами, и они могут использоваться так:

ПРИСВАИВАНИЕ - это ИМЯ_ПЕРЕМЕННОЙ, '=', ВЫРАЖЕНИЕ

Правила грамматики по-английски почему-то называют productions.

Для описания правил грамматики есть стандартные синтаксисы вроде BNF (очень старый и неудобный), ABNF, EBNF.

В спецификации используют свой стандарт, которые расплывчато описан тут https://phplang.org/spec/09-lexical-structure.html#grammars
543 2389453

>в общем спустя какое-то время подумал - нафиг это программирование, вот это всякое айти там да.


бездушно это, не лежит действительно к этому душа так сказать.

>>388464
у меня вопрос вообще не в том что не осилил, это не проблема в чем-то разобраться.

просто залипать в кампуктер значительное время для меня не очень хорошо, а занимаясь разработкой это так есть по факту, считай работаешь + в свободное время учишь либы/фреймворки.
544 2389635
>>389329
Ну раз тебе тяжело ссылку на гайд дать, то я не скажу в какой книге разрабатывается фреймворк на PHP.
545 2389653
>>389635
https://habr.com/ru/post/654983/

https://stackoverflow.com/questions/1831610/how-to-develop-a-mvc-framework-from-scratch - тут рекомендуют сначала хорошо разобраться в MVC на уже существующих фреймворках. Хотя на других ресурсах рекомендуют сделать свой по гайдам, чтоб разобраться в нутре MVC фреймворков.
Трудно сказать, что лучше. Выбери свой путь. Я решил изучать уже существующие. Сначала один, потом другой для сравнения. Потом мб напишу свой для развития.

https://www.youtube.com/watch?v=6ERdu4k62wI - классика, очередное видео FreeCodeCamp.

Сам я ничего из этого не пробовал, просто погуглил за тебя, чтоб ты сказал мне книгу.
546 2389689
Есть ли разница между != и <> сравнением, может по приоритету? Или это для тех кто пришел из других языков (не знаю где правда такой оператор сравнения).
547 2389711
>>389689
<> является стандартом SQL. Наверное оттуда.
548 2389712
>>389689
Разницы нет. Обычно юзают !=
image.png16 Кб, 632x157
549 2389961
>>389689
По примеру с постгрес, он потом сам конвертирует != в <>
550 2390529
После колледжа есть шанс найти работу?
551 2390540
>>390529
Я после шараги 2 месяца чилил, потом за 2 нашел)
Был на двух собесах, на первом сначала отказали, потом через неделю написали на почту "вы ещё не трудоустроились?"
Ну а я уже был на другом месте. Как-то легко меня берут.
552 2390637
>>348810
Эй, анон, если ты еще тут. Прошло уж два месяца вместо двух недель.

Как твои успехи?
553 2390654
>>390637
Хихихм, привет. Лару учил откровенно говоря мало, так как учёба и другие обстоятельства. Дописал файлообменник до вида более менее, решал задачи, структуры данных какие-то реализовывал, сейчас пишу сайт с новостями, на чистой пыхе. С июля (закончится сессия как раз) буду дрочить лару и жс, проектом на ларе будет форум (имидж борда, кто как хочет). В общем-то, все неплохо, хотя могло быть намного лучше
554 2390659
Почему sql запросы так долго выполняются? Я например беру данные с бд и сравниваю их с данными из формы и это происходит долго, секунды 2(да для меня это долго)
555 2390664
>>390654
А, по поиску работы. Разослал в компании 4 наверное. В одной посмотрели резюме но ответа не было, в другой отказали (я решил мало ли меня удалённо могут взять, написали что возможно вернутся к моей кандидатуре, но это пиздеж очевидный ) и в других нашли разработчика до того как даже глянули резюме. Как-то так
556 2390701
>>390659

Это не очень нормальная цифра. Обычно запросы занимают миллисекунды или меньше.

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

SELECT SQL_NO_CACHE x FROM y WHERE ... ;

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

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

EXPLAIN SELECT x FROM y ...;

Документация (может быть сложновата для начинающего): https://dev.mysql.com/doc/refman/8.0/en/explain.html

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

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

Если твой проект не секретный, то ты можешь запостить тут запрос, вывод EXPLAIN и сколько у тебя всего записей в таблицах и может кто-то увидит причину проблем.
557 2390702
>>390654
Кинь проект, посмотрю =)
мимо проходящий
558 2390717
>>390702
Возможно,как сделаю. Хуйня в том что я верстать не умею :)
559 2390719
>>390717
да просто ссылку на гит скинь, я фронт не хочу смотреть, чисто как ты на бэке писал
560 2390729
>>390719
дай свой телеграм,не хочу здесь кидать
561 2390732
>>390729
Чего ты боиьшся?)
562 2390733
>>390729
черт, кинул, а не сохранилось
Back1ng
563 2390770
Подскажите где посмотреть примеры кода других людей? Интересует php laravel
на гитхабе только? а как искать? пишу в поиск laravel, а там одни package (либо вообще элементарные проэкты вроде блогов), а мне проекты интересно посмотреть
564 2390807
>>389653
Учти только, что MVC это минимальная база для джуна. По-хорошему ещё надо микросервисную архитектуру понимать, а там уже SOLID, юнит-тесты, обязательный ООП, полезно знать структуры данных хотя бы базовые и прочее такое. Хотя если собираешься на вордпрессе говнокодить, то необязательно. Но учти, что это именно программерская база, а не только веб-макаки.
565 2390825
>>390770

Я бы попробовал так. Вбиваем в Гугл "laravel based projects" и видим разные сайты вроде

https://www.dunebook.com/5-best-open-source-project-built-using-laravel/

Берем оттуда случайный проект, и идем на гитхаб смотреть код.
566 2390832
>>390807

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

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

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

Также, можно услышать, что микросервисы позволяют использовать разные языки программирования. Согласен, если у тебя высоконагруженный сервис, то можно, как Вконтакте, писать свои хранилища на Си или на Расте, или Го. Но если ты не способен осилить эти языки, то наверно микросервисы тебе не очень-то и нужны.
567 2390833
>>390832
Что такое микросервисы в это контексте, через soap когда пересылаются данные?
568 2390867
>>390832

>ООП и юнит-тесты никак не связаны с микросервисами


Связаны напрямую.

>Наоборот, монолит, скорее всего окажется лучше и удобнее, чем гора микросервисов


Для чего окажется? Для какого проекта? Приведи примеры.

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


Тыскозал, опятьже?

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


Какая компания? Можно конкретику?
avatars-BhtsUJ01vnbBLNtY-oPgROQ-t240x240.jpg17 Кб, 240x240
569 2391089
>>347129 (OP)
Ананас, подскажи что лучше начинать учить вместе с php, сервер apache или ngnix на linux?

Установил на второй ноут ubuntu, никогда им не пользовался но вроде весело все идет, сейчас думаю какой сервер поставить. О apache двойственные впечатления, пердолинг с htaccess заебал для статичных сайтов (учился), и говорят он устарел вообще и тормозит быстродействие.PHP разработчики пользуются же VDS а не виртуальными серверами как я понял?(git там,laravel) я же по сути любой сервер(ngnix или apache) на этот VDS могу поставить, и панель управления типа ispManager? Правильно мыслю или лучше все учить для рынка?
570 2391110
>>391089
Можешь позже изучить пердолинг серверов, мне за полгода работы один раз пришлось менять конфиг нжинкса, я про него на тот момент нихуя не знал, но за пару часов нагуглил и пофиксил, больше ни разу его не приходилось трогать
571 2391121
Если бы вы сейчас вкатывались в серверную часть веба чтобы начали учить python/django или pho/laravel. На питоне могу писать простенькие скрипты по работе, но есть ощущение что на позицию джуна бекендера на пистоне не найти, а на пхп есть хоть какие-то шансы. Вообще задумка такая, что нати работу на пхп и как более менее втянусь голанг учить. Норм план или хуйня, айти в РФ всё и вообще надо огород сажать?
572 2391229
>>347129 (OP)
Сап, аноны. Убедительная просьба не кидаться говном, мб есть тут люди шарящие за битрикс.
Как отсортировать элементы в catalog.section по конкретному значению множественного свойства типа список?
Т.е. есть свойство "Тэги", значения "Популярное", "Рекомендуемое" и т.д. У элемента могут быть выбраны хоть все сразу. Мне же нужно отсортировать каталог по этому свойству, чтоб сначала шли элементы у которых проставлено значение "Популярное"
573 2391233
>>391089
А нахрен тебе апачи и энжникс? Это не задачи разработчика, а ебаться тебе придется с тем что будет. Тут уже все от звезд на небе зависит
574 2391238
>>390867
Хули ты тут высрал? Анон прав, монолит в подавляющем большинстве выигрывает, хотя бы тем что его разрабатывать проще.
На кой хуй ебаться с кучей сервисов маленькой команде разработчиков, когда речь идет о небольшом интернет магазине? Или у тебя все разрабатывают огромные проекты по типу какого-нибудь контакта?
575 2391248
>>391121

>python/django


Абсолютно бесполезная хуйня без задач, которая умерла не успев достичь популярности. Node во всем лучше.
576 2391280
>>391248
На году вакансий почти нет. Либо для мидлов минимум. Мне интересно в плане поиска работы в первую очередь.
577 2391485
Анончики, можете сразу полить меня говном, но все же.
Я устраиваюсь в некоторую контору, не на программерскую должность, и тестовое задание получил в виде требования написать модуль с использованием связки ZF1+extJS3.4.

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

Можете порекомендовать как и откуда вообще начать с этим работать?
Повторюсь, я из совершенно другой сферы микроконтроллеры/асм/си, и для меня всё это вот ПИЗДЕЦ как сложно.
1522592353462.gif2,6 Мб, 304x200
578 2391552
>>391485
Нахуя давать тестовое по левым вещам?
579 2391562
>>391552
Потому что у них другого нет, это госконтора. Потому что так вышло, что начальник хочет этого, независимо от того чем я буду заниматься.
580 2391723
>>390833

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

Данные можно пересылать и через SOAP, но сейчас обычно используются более современные технологии вроде HTTP+JSON, JSON-RPC, ProtocolBuffers, Thrift, очереди сообщений и тд.

>>390867

Пример: я хочу получить какие-то данные из БД. В монолите я просто захожу в консоль MySQL, пишу запрос с 8 джойнами (а я хорошо умею использовать джойны) и получаю нужные данные. В микросервисном проекте я должен потратить во много раз больше времени, писать какие-то кастомные скрипты, чтобы добиться того же. Хотя, может есть какая-то компания, которая за большие деньги дает возможность делать поиск в распределенных базах данных?

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

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

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

Пример 4: в монолите я жму на название функции и перехожу к ее определению. А в микросервисе я попадаю на функцию отправки запроса в другой сервис и не могу перейти к определению в один клик.

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

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

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

А что, что ты пишешь про тесты, я вообще не понял. Тесты без проблем используются в монолитных проектах.
580 2391723
>>390833

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

Данные можно пересылать и через SOAP, но сейчас обычно используются более современные технологии вроде HTTP+JSON, JSON-RPC, ProtocolBuffers, Thrift, очереди сообщений и тд.

>>390867

Пример: я хочу получить какие-то данные из БД. В монолите я просто захожу в консоль MySQL, пишу запрос с 8 джойнами (а я хорошо умею использовать джойны) и получаю нужные данные. В микросервисном проекте я должен потратить во много раз больше времени, писать какие-то кастомные скрипты, чтобы добиться того же. Хотя, может есть какая-то компания, которая за большие деньги дает возможность делать поиск в распределенных базах данных?

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

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

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

Пример 4: в монолите я жму на название функции и перехожу к ее определению. А в микросервисе я попадаю на функцию отправки запроса в другой сервис и не могу перейти к определению в один клик.

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

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

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

А что, что ты пишешь про тесты, я вообще не понял. Тесты без проблем используются в монолитных проектах.
581 2391730
>>391248

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

Нода вообще сейчас занимает странное место. Если ты хочешь удобный язык, пожертвовав скоростью выполнения, то есть Питон. Если ты хочешь высокую скорость, то есть Раст, если ты хочешь удобную асинхронность и высокую скорость, то есть Го. А какие плюсы у Ноды?
582 2391734
>>391485

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

https://github.com/zendframework/zf1/blob/master/INSTALL.md

> Zend Framework requires no special installation steps. Simply download the framework, extract it to the folder you would like to keep it in, and add the library directory to your PHP include_path



Ну и ты бы написал, что за ошибки пишет композер, может у тебя просто чего-то не установлено?

Я из любопытства посмотрел страницу zf1 на packagist, и там из зависимостей только PHP >= 5.2.11. Я также из любопытства сделал composer.phar require zendframework/zendframework1 и он установился без ошибок на моем Линуксе.
583 2391781
Xammp или OpenServer?
изображение.png45 Кб, 1893x562
584 2391822
>>391734
Анончик, всё заработало, просто вручную без компостера раскидал.
Добра тебе.
585 2391879
>>391781
У нас на работе почти все OpenServer используют.

мимо битриксоид
586 2391923
>>391781
Установить линукс и LAMP
587 2391950
>>391781
Open server позволяет выбирать версию пыхи, апача/нгинкса, субд без переустановок, просто меняя в настройках ospanel.
588 2392024
Вот тут кто-то нахваливает Ноду, а давайте посмотрим на реальный код на Ноде, написанный профессиональными разработчиками:

https://github.com/npm/cli/blob/latest/workspaces/arborist/lib/arborist/build-ideal-tree.js

const _applyUserRequestsToNode = Symbol('applyUserRequestsToNode')
...
await this[_applyUserRequestsToNode](tree, options)
...
async [_applyUserRequestsToNode] (tree, options) {

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

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

const GRAVITY = 9.81;
const MONTHS = ['Jan', 'Feb', ...];

А они используют const для обычных переменных, это запутывает при чтении кода. Хуже того, "константы" в Ноде не такие уж и постоянные:

const cant_change_this = [];
cant_change_this.push(1); // никаких ошибок

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

И еще, почему-то разработчики на Ноде не любят называть вещи своими именами и объявляют функции как константы, то есть вместо:

function some_name(some_arg1 = 5, some_arg2 = 6) { return some_arg1 == some_arg2; }

Пишут

const some_name = (some_arg1 = 5, some_arg2 = 6) => some_arg1 == some_arg2;

Очевидно, что первый вариант намного лучше: прочитав первое слово, уже понятно, что перед нами функция. А во втором варианте нужно прочесть всю строку, и найти в ней стрелку, спрятанную среди знаков равенства, прежде чем поймешь, что у нас функция, замаскированная под константу.
588 2392024
Вот тут кто-то нахваливает Ноду, а давайте посмотрим на реальный код на Ноде, написанный профессиональными разработчиками:

https://github.com/npm/cli/blob/latest/workspaces/arborist/lib/arborist/build-ideal-tree.js

const _applyUserRequestsToNode = Symbol('applyUserRequestsToNode')
...
await this[_applyUserRequestsToNode](tree, options)
...
async [_applyUserRequestsToNode] (tree, options) {

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

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

const GRAVITY = 9.81;
const MONTHS = ['Jan', 'Feb', ...];

А они используют const для обычных переменных, это запутывает при чтении кода. Хуже того, "константы" в Ноде не такие уж и постоянные:

const cant_change_this = [];
cant_change_this.push(1); // никаких ошибок

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

И еще, почему-то разработчики на Ноде не любят называть вещи своими именами и объявляют функции как константы, то есть вместо:

function some_name(some_arg1 = 5, some_arg2 = 6) { return some_arg1 == some_arg2; }

Пишут

const some_name = (some_arg1 = 5, some_arg2 = 6) => some_arg1 == some_arg2;

Очевидно, что первый вариант намного лучше: прочитав первое слово, уже понятно, что перед нами функция. А во втором варианте нужно прочесть всю строку, и найти в ней стрелку, спрятанную среди знаков равенства, прежде чем поймешь, что у нас функция, замаскированная под константу.
589 2392033
>>392024

Кстати, приватные свойства в JS все-таки недавно добавили. Однако, там много чего не хватает, например:

- автогенерация конструктора
- автогенерация геттеров/сеттеров

То есть, если у меня есть класс

class Test {
#someProperty;
}

То я хочу, чтобы я мог добавить какую-то пометку вроде @property и JS для меня сгенерировал бы конструктор, который заполнит это свойство и геттеры-сеттеры, которые позволят мне обращаться к этому полю:

let test = new Test(10);
test.someProperty = 20;

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

При этом, естественно, я бы хотел выбирать, что сделать:

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

Так что я не понимаю того анона, который сказал, что Нода лучше Питона, хотя в Питоне описанное выше есть, а в Ноде нету. Это есть в Питоне, в Свифте, в C# если не путаю.
589 2392033
>>392024

Кстати, приватные свойства в JS все-таки недавно добавили. Однако, там много чего не хватает, например:

- автогенерация конструктора
- автогенерация геттеров/сеттеров

То есть, если у меня есть класс

class Test {
#someProperty;
}

То я хочу, чтобы я мог добавить какую-то пометку вроде @property и JS для меня сгенерировал бы конструктор, который заполнит это свойство и геттеры-сеттеры, которые позволят мне обращаться к этому полю:

let test = new Test(10);
test.someProperty = 20;

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

При этом, естественно, я бы хотел выбирать, что сделать:

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

Так что я не понимаю того анона, который сказал, что Нода лучше Питона, хотя в Питоне описанное выше есть, а в Ноде нету. Это есть в Питоне, в Свифте, в C# если не путаю.
590 2392041
>>392033
Питон хуйня потому что из-за этих ебаных отступов трудно копипастить.
591 2392064
>>392041

Ты пишешь странные вещи. Во-первых, копипастить нет никаких проблем, если твой редактор поддерживает команды "увеличить отступ" и "уменьшить отступ" (все нормальные редакторы кроме какого-нибудь легаси времен DOS это поддерживают).

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

const rpj = path => readFile(path, 'utf8')

Кто догадается, что значит rpj?

const readBinDir = async (path, data) => {
const add_id = data => {

Каждый называет функции как хочет, никакого единообразия.

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

array.map(e => e.name)

Это не значит, что слово function устарело и теперь надо везде писать громоздкую и плохо читаемую конструкцию с const. Я подозреваю, это функциональщики хотят сделать JS код похожим на их функциональные языки, где функции объявляются через равенство. Но JS это не функциональный язык и у него есть свой синтаксис, и код должен быть читаемым, а не похожим на твой любимый функциональный язык.
593 2392070
>>392041

И да, кстати, что тебе мешает настроить редактор или написать плагин, чтобы при вставке он исправлял отступы сам?
594 2392073
Вот еще проблема из JS кода:

er => {
if (er.code === 'EJSONPARSE') {

Похоже, разработчик на Яваскрипте не слышали, что можно делать разные классы исключений и проверять эти классы. Тогда хотя бы IDE будет подсказывать и проверять их имена.
595 2392078
Вот еще кусок из npm. Такое ощущение, что этот код сгенерирован обфускатором, а не написан человеком:

https://github.com/npm/cli/blob/latest/workspaces/arborist/lib/arborist/build-ideal-tree.js#L327

.then(root => this[_global] ? root
: !this[_usePackageLock] || this[_updateAll]
? Shrinkwrap.reset({
path: this.path,
lockfileVersion: this.options.lockfileVersion,
resolveOptions: this.options,
}).then(meta => Object.assign(root, { meta }))
: this.loadVirtual({ root }))

Это же просто тяжело читать. Ужасный стиль кода. Я не робот, чтобы в уме разбирать такие выражения.
596 2392080
>>392078

Ну и отдельно минус им за то, что нагородили там кучу .then вместо использования await. Эта асинхронность в Ноде полезна в 1% случаев и только мешается в 99%.
597 2392082
>>392078

Кстати, в этом же файле оператор return имеет длину более 70 строк:

https://github.com/npm/cli/blob/latest/workspaces/arborist/lib/arborist/build-ideal-tree.js#L311

return начинается в строке 311 и заканчивается где-то в районе 380.
598 2392084
>>392082

Если такой код написали функциональщики, то, конечно, желания когда-либо использовать функциональные языки у меня поубавилось. Императивный код однозначно лучше хотя бы тем, что в нем не пишут return на 70 строк и гору из then.
599 2392090
>>392080
Так это одно и тоже по сути - await это синтаксический сахар просто, который так же работает через промисы, просто декларация более привычная, но это так же асинхронно работает.
600 2392091
>>392073
Они пишут свои скрипты в notepad++
601 2392093
>>392090

Читается лучше.

let x =await getX();
let y = await getY(x);

Против горы из коллбеков.

А еще лучше, конечно, использовать язык, где есть блокирующие функции и await не нужен.
602 2392095
Ну и, конечно, очень тяжело код без типов. Вот пример из того же npm:

https://github.com/npm/cli/blob/latest/workspaces/arborist/lib/arborist/load-virtual.js#L86

async [loadFromShrinkwrap] (s, root) {

Что такое s? Что такое root? Понять невозможно.
603 2392103
>>392093
Ну да, await дает некое удобство, но все равно продолжает оставсть асинхронным.

Так в ноде же вроде есть блокирующие и неблокирующие операции: типа readFile() и readFileSync()
604 2392108
Нашел на мозилле ресурс для основательного изучения JS, подписка 5 лет и довольно дешевая. Но первые 7 глав бесплатны.

https://learnjavascript.online/
605 2392115
>>392108
есть же наш православный сайт для изучения JS

learn.javascript.ru
606 2392121
>>392115
Это тоже хорошо.
607 2392143
>>392024

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


Уже как несколько лет есть.

> это запутывает при чтении кода


Запутывает только тебя, когда ты пишешь на JS больше одной недели - привыкаешь.

> "константы" в Ноде не такие уж и постоянные


Потому что объекты передаются по ссылке. Тут абсолютно логичное поведение. Для неизменяемых объектов в JS есть Object.freeze

>Очевидно, что первый вариант намного лучше


Нет, не очевидно. Ты забываешь про минификацию

>найти в ней стрелку


Зачем ты ищешь стрелку, если тебе IDE цветом показывает, что это функция? Даже если ты в блокноте пишешь код, то наличие скобок после = сразу говорит о том, что эта функция.
>>392033

>пометку вроде @property


Уже есть в планах на 2023.

>в Питоне описанное выше есть


А в ноде есть нормальная асинхронность, лучшая производительность, интеграция с SPA-фреймворками, более дешевая цена разработки.
608 2392144
>>392073
Причем тут вообще JS, если это очевидная проблема макаки-формошлепа, который это писал? Говнокодить можно и на питоне и на пыхе и на чем душе угодно.
609 2392146
>>392144
Ну вообще есть концепция, одна из, что исключения нужно использовать при критических ошибках в логике программы, а если речь идет об ожидаемом поведении: вроде как пользователеь что не так ввел - то тут лучше воспользоваться паттерном увдедомлений.
610 2392156
>>392143

> привыкаешь.


А зачем привыкать к плохому?

>> "константы" в Ноде не такие уж и постоянные


> Потому что объекты передаются по ссылке. Тут абсолютно логичное поведение.



Зачем мы используем const? Чтобы сказать читателю кода, что эта переменная не изменится, и чтобы защититься от случайного изменения. Если ты массивы и объекты при этом разрешаешь изменять, то весь смысл const теряется. const для массивов и объектов по сути ничего не значит.

И это точно не константа.

>>Очевидно, что первый вариант намного лучше


> Нет, не очевидно. Ты забываешь про минификацию


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

> Зачем ты ищешь стрелку, если тебе IDE цветом показывает, что это функция?


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

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

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

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



только вот код на Ноде, судя по npm, нечитаемая лапша.
611 2392345
Сколько версий PHP нужно знать в общем? PHP5/7/8 верно? Перечитывать документацию?
612 2392382
Ого, очень рад, что тред жив и ОП ещё тут спустя столько лет! Когда-то тоже тут сидел и много задачек решал, даже делал калькулятор с парсингом дробных значений и вектор в стиле ФП. Сейчас работая фуллстеком столкнулся с необходимостью синхронизировать код между PHP и TS/Dart, вручную это делать было утомительно, а автоматические решения не удовлетворяли требованиям - какие-то инструменты вроде grpc заставляют всю архитектуру приложения менять, какие-то инструменты вроде swagger заставляют писать большие yml/json. Подумал, что было бы удобно просто отметить нужные PHP-классы и как-то одной командой получить TS/Dart. Сделал, в проде больше чем полгода: https://github.com/riverwaysoft/dto-converter

Что думаете? Под капотом работа с AST и кодогенерацией. Планирую добавить больше документации (сейчас её мало так как in-house инструмент) + описать внутреннее устройство в большой статье на хабре.
Снимок экрана 2022-06-29 в 20.16.29.png42 Кб, 1392x788
613 2392393
614 2392490
>>392345
Да можешь с первой начать, че там читать то, ну =)
615 2392513
>>392382

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

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

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

Что касается swagger, то для PHP есть инструменты для его генерации через DocBlock-аннотации. Хотя, если у тебя есть хорошие DTO, то может быть swagger можно генерировать как-то из них. Swagger хорош как язык документирования API, то есть ты передаешь коллегам не кучу TS-классов со словами "на, разбирайтесь", а человеко- и машинночитаемую документацию.

Ну и иногда в описанной тобой ситуации за основу берут описание класса/интерфейса на IDL. Это не конкретный язык, а скорее разновидность языка. Пример IDL можно увидеть в спецификациях DOM, в исходных кодах Chrome/Firefox.
616 2392515
>>392345

5 не нужна, можно изучить последнюю версию + прочитать на сайте PHP список изменений между последней версией и PHP7.4. У них есть удобный список того, что поменялось в каждой версии: https://www.php.net/manual/ru/migration81.php
617 2392524
PDO::quote может все равно пропускать sql-инъекции?
618 2392686
>>392524

Не должен, если использовать правильно. То есть, только для подстановки чисел или строк в SQL-запрос. Это безопасно:

$safeX = $pdo->quote($x);
$pdo->execute("SELECT ... WHERE x = $safeX");

Но если ты используешь quote для каких-то других целей (например, для защиты от XSS), применяешь quote 2 или более раз, или экранируешь данные в одном месте программы, а используешь их совсем в другом месте, то там могут быть уязвимости.

Но лучше просто использовать плейсхолдеры.
16411396300660.jpg45 Кб, 604x340
619 2392697
Здравствуйте, имеется сайт с видео на ларавел. Все видео рассортированы по категориям. Но нужно чтобы видео листались в рандомном порядке, но не совсем в рандомном, а так чтобы пользователь смог посмотреть все видео без повторов. Подскажите, пожалуйста, как это лучше реализовать?
Screenshot2022-06-30 phpMyAdmin.png25 Кб, 393x557
620 2392771
Open server в phpmyadmin не пускает, уже все перебробовал, сталкивался кто?
621 2392777
Оставил отклик на работу на работу в которой нужен 3 летний опыт. Контора в Нидерландах, я знаю все что им требуется Laravel/Vue.js но опыта у меня 3 годового в и сфере нет, только неофициальный. Плюс нет портфолио, но я чую что могут взять, короче что делать? Начну работать научусь же да?
622 2392812
>>392771
Дефолтный юзер это root без пароля. Или ты по какому-то своему старому логину не можешь зайти?
623 2392815
>>392771
А все, надо было пароль root
624 2392818
>>392777
Поможешь мне с моим вопросом? >>392697

А я тебе расскажу про работу в Европе. У меня кореш устроился в Нидерландсую контору как раз месяц назад.
625 2392819
>>392697
Здравствуйте.
16497492826180.mp4574 Кб, mp4,
480x360, 0:09
626 2392822
627 2392950
Кинули на новый проект - там ни документации, нихуя. Только куча кода с которой непонятно как работать т.к. там везде интеграции с внешним сервисом. В чатике поддержка минимальная и в основном все молчат. ПМ уже просит какие-то сроки, а у меня проект даже не поднят потому, что я неебу как с ним работать.
Мне валить из конторы?
628 2393003
>>392950
Ни примеров нихуя, откуда нам знать что ТЕБЕ делать? Ты программист или кто?
629 2393016
>>392950

Омежка, спокойно, никуда валить не нужно. Пишешь тимлиду/сеньору и просишь помочь развернуть проект и провести краткий экскурс о струтуре проекта, после чего приступаешь к макакингу за 300кк/нс.
630 2393073
>>393003

>Ни примеров нихуя, откуда нам знать что ТЕБЕ делать?


Каких примеров? Причём тут моя таска? Ты о чём вообще?

>>393016

>Пишешь тимлиду/сеньору


Он тоже в чатике сидит и ему похуй по-моему.
Вообще не понимаю нахуй так делать тогда - давать человеку неизвестный проект без какого-то введения. Они ждут, что я сам изучу за неделю то, что они за 2-3 года напилили?
png-transparent-pepe-the-frog-illustration-tribal-wars-2-vi[...].png11 Кб, 920x453
631 2393133
Начал учить php, а мне сказали что php для лохов. Обзывались вордпрессом и битриксом.
632 2393141
>>393133
Так и есть, в пхп самая высокая конкуренция среди всех языков и с него перекатываются на другие типо питона или го, а ты берешь и вкатываешся в пхп в 2022ом лол
633 2393155
Как вставлять картинки например в какой нибудь пост, который форматируется пользователем? Я должен тело поста перевести в html и сохранить его в базу данных в тело? Или распарсить как-то?
634 2393157
>>393133
Лучший язык так-то.
1656616540428.jpeg447 Кб, 1366x2048
635 2393182
>>393155
Не понял твоей мысли.

Картинки хранишь на жёстком диске.
В базе данных создаёшь таблицу в формате "id | путь до картинки".
В таблицу с постами добавляешь столбец, где хранишь id картинки либо null, в случае, если ее нет.

Для поста создаёшь html шаблон. В случае, если у поста есть картинка, то ты в шаблон вставляешь тег наподобие <image src="post->imagePath">.

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

Мимо двухмесячный вкатыш, возможно мой способ не оптимальный
636 2393197
>>393182
Да но что если ты захочешь удалить картинку или изменить порядок в посте?
1.jpg13 Кб, 473x272
637 2393208
Я правильно понимаю, что инклюдить по относительному пути не получится, если например подключать через третий файл, ведь там будет уже другой дополнительный с другим относительным путем. Пример:
interface.php в корне.
file1.php в папке script : include "../interface.php";
file2.php в корне: include "script/file1.php";
Фатал ошибку выдает, тут походу получается с точки зрения file2, что interface лежит по идее как просто include "interface.php".
1656618855200.jpeg175 Кб, 1280x937
638 2393221
>>393197
1. Удаляешь картинку из хранилища и строчку из таблицы.

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

2.2. Подробнее:
Тело поста ты все равно хранишь в базе данных в формате text, так что ничего не мешает сделать как-то так.

"Lorem lorem lorem
Lorem lorem
@image
Lorem lorem ipsum
Lorem"

Ты сам можешь придумать как улучшить, если что-то не нравится.
1656618968259.jpeg14 Кб, 360x303
639 2393223
>>393208
__DIR__ . "/path".
640 2393256
>>393073

Должно быть README с инструкциями по установке. Нет ридми - не беда! Включай голову и попробуй разобраться сам. Прежде всего скажи спасибо предыдущим разработчикам, а затем осмотри корень проекта, а можно и другие папки, на наличие специальных файлов:

- может, есть папки с документацией в формате txt или md?
- может, есть shell-скрипты?
- если есть файл composer.json, то наверно надо установить зависимости с помощью composer. А может в этом файле даже прописано действие для установки?
- если есть bower.json, то наверно это библиотеки для фронтенда
- если есть package.json, то это точно библиотеки для фронтенда. Также там в секции scripts могут быть какие-то полезные команды
- если есть Makefile, то в нем могут быть полезные команды
- а может есть Докерфайл? Тогда, возможно, проект запустится в Докере. А даже если нет, то из него можно извлечь полезную информацию

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

После этого попробуй запустить проект. Если падает с ошибкой - разберись, от чего она возникает и поправь.
641 2393265
>>393256

>попробуй запустить проект


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

Как с этим работать я хз.
642 2393270
>>393265

>должны как-то тянуть данные из внешнего источника


В смысле нескольких источников. Оно там всё повязано друг на друга и везде токены-хуёкены под разный стафф.
Поддержки на это всё я получаю минимум - один пук в чатик в день.
image.png190 Кб, 500x395
643 2393273
>>393265
Юнит-тестов тоже не завезли.
xdebug не настроен - там принято вардампом пидорить как диды.
644 2393277
>>393223
Спасибо, а glob() путь берет относительно места нахождения файла, из которого он вызывается?
645 2393279
>>393273

>Юнит-тестов тоже не завезли.


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

я набухался сегодня - пошло оно всё
646 2393283
>>393073

>Он тоже в чатике сидит и ему похуй по-моему.


Ты читать умеешь? Ты пишешь не в ЧАТИК, а пишешь НАПРЯМУЮ тимлиду. Если не отвечает - звонишь на телефон. Если не берет - идешь к его непосредственному руководителю. Повторяешь до победного конца, постоянно идя к руководителю выше.

>Они ждут, что я сам изучу за неделю то, что они за 2-3 года напилили?


Нахуй ты меня, т.е. гиза на дваче об этом спрашиваешь? ПМа своего спроси лучше.
647 2393329
>>393141

>в пхп самая высокая конкуренция среди всех языков.


С хуяли, если я только и дело слышу про питон и жаба скрипт. У меня последнее время ощущение, что питон учат все, школьники, домохозяйки, деды в доме престарелых, зэки в тюрячке. Да на питон статистически больше вакансий, но если их забрать там около половины это датасосайенс и машинпукинги всякие, мне это не интересно, мне не интересен матан. Да и эти направления как правило нужны в крупных компаниях с бигдатой, а там дохуя бюрократии и требуют вышку, то есть я уже проигрываю конкуренцию любому дауну 4 года отсидевшему в ВУЗе. Я просто хочу веб делать, а веба на питоне меньше, соответственно и шансы на трудоустройство уменьшаются. Голанг вообще говорят нет смысла вкатываться с нуля, ибо там ищут людей которые уже имеют опыт веб разработки.
648 2393330
>>393133
Хз, язык интересный, очень удобный особенно для первого, работы дохуя на PHP. Варианты развития есть большие. Почти весь бэкенд, особенно новых сервисов VK написан на пыхе. Они свои фреймворки пишут и много полезных штук. Так же начали выбирать снова пых как основной язык для разработки в Сбере. Еще достаточную часть в Авито и Баду

Изучаешь пхп + ларавель и в дополнение к этому вторым языком учишь js, и считай продался в любую компанию на хайофер.
649 2393616
>>393330
Спасибо, что потушил мой пукан.
650 2393624
>>393330
Удел пхп это блондинки и лендинг страницы
651 2393635
>>393616
Вордпресс и прочие cms это ебаный кал, да, даже те, которые на основе симфони сделаны и в целом современные, но вот писать на голом симфони/ларавеле кайфово. Функционала из коробки дохуя, код красивенький, если изъебнешься даже по солид хуелид будет, фреймворки стабильные, гарантировано известно, что никуда не денутся, и никакой зумерский нитакойкаквсе фреймворк их не вытеснит как это регулярно происходит в мире жс. Один минус - пхп же, скорость работы говно, плюс после языка, живущего один реквест, интуитивно тяжело переключаться на какую-нибудь ноду.
652 2393729
>>393635
То есть мне отказываться от вакансии на битрикс? Я думал что норм ща всё будет... Думал потом как-нибудь перейду на этот ларавель, но сейчас надо потерпеть как говорится.
653 2393733
>>393729
Ты уже выучил битрикс? Что читал?
654 2394852
>>392697
Очевидно, придётся хранить
- либо каждое просмотренное человеком видео,
- либо случайно сгенерированный порядок клипов и положение просмотра в нём
photo2017-11-3009-52-12.jpg103 Кб, 1280x819
655 2394856
>>387578
>>387643 - это не я отвечал.

вообще, мне, например, нужен человек для поддержки приложения на чистом РНР. Если интересно, напиши в ТГ https://t.me/your_future_life
656 2394896
>>394852
Дап, но в каком виде это лучше хранить?
657 2394964
>>383830
О, благодарю, анон.
Тебе надо преподом быть)) Нормально разъясняешь.
658 2394968
>>383832
Благодарю
659 2395021
>>393133

>а мне сказали что php для лохов


Так и есть, а чего ты хотел от знания скриптоязыка? Думал сучки будут течь, а бояре из нормальных языков будут первыми руку тянуть?
1656859067724.mp42,8 Мб, mp4,
480x854, 0:24
660 2395252
Кто-то работает из под линукс?
Как быть с правами доступа?

Например:
1. Я поднимаю проект на ларавель в докере
2. Композер из контейнера с php генерирует мне файлы и папки фреймоворка.
3.1. Пытаюсь открыть сайт в браузере и получаю permission denied error.
3.2. Пытаюсь отредактировать файлы через редактор и получаю access denied retry as sudo.
4. Прописываю
# chmod -R 777 ./
5. Казалось бы, все хорошо, но если сгенерировать миграцию
(Через $ docker exec -ti project_app bash)
$ php artisan make:migration create_orders_table
И попробовать отредактировать миграцию, то снова 3.2.

Как быть? Что править? Мне надо себя закинуть в какую-то группу? Но миграция, например, генерируется с правами 600, и добавление в группу мне явно не поможет.

Как навсегда забыть о проблемах с правами доступа к файлам? Не прописывать же мне после каждого действия
# chmod -R 777 ./
Да и небезопасно это явно.
661 2395310
>>394896
Блять, в любом, которое меньше места занимает. Массив id через разделитель + одно число-курсор/положение в этом плейлисте.
662 2395320
>>395252
Дело в владельце файлов, нужно как вариант синхронизировать айди юзера www-data в контейнере с айди твоего пользователя в системе.
663 2395664
Объясните зачем нужен докер? я не понимаю, много раз читал но все равно не пойму, зачем тратить кучу времени на всю эту настройку и т.п если можно просто на сервере поднять lemp залить с гита проект и все?
16089852525510.png1006 Кб, 2359x1749
664 2395814
>>395310

>Массив id через разделитель + одно число-курсор/положение в этом плейлисте.



А если у меня допустим 5000 видео в каждой категории, и каждый час добавляются новые видео в каждую категорию? Надо чтобы пользователь при открытии видео из категории 1 видел при пролистывании далее только видео из категории 1. И еще нужно учесть что id видео будут не порядку, тк некоторые видео могут быть удалены из-за жалоб.
665 2395937
>>395664

>зачем тратить кучу времени на всю эту настройку и т.п если можно просто на сервере поднять lemp залить с гита проект и все?


Я не спец по докеру, но чтение любой статейки о докере в принципе даёт ответы на твои вопросы. Самое банальное зависимости, ты обновил приложение, запускаешь, а тебе выдаёт "пук пук версия пэхапэ 7.4 больше не поддерживается, требуется обновление мням", докер позволяет избежать этой хуйни. Или ты обновился, а там баг, хочешь вернуться на предыдущую версию, а зависимости библиотеки всякие уже обновлены, надо и их откатывать, это превращается в череду жопной боли и тд. Гораздо проще завалить контейнер и просто поднять новый с предыдущей версией где бага не было. Конечно можно тупо сделать снэпшот машины перед обновлениями и потом откатить но это не бест практикс я думаю. Так же у тебя может там на тачке ещё что-то крутиться которое будет требовать другие зависимости, будет конфликт, то есть придётся для каждой приложухи свою виртуалку заводить, это как бы шиза и нерациональное расходование ресурсов сервака. Ну и типо безопасность, изолированность от ОС.
Я это как-то так вижу, сам работаю админом, могу сказать что админа докер избавляет от лишнего пейна и горения в заднице.
manglo-09-720x425.jpg25 Кб, 720x425
666 2395944
>>395252
>>395664
Двачую. Зачем нужен докер?

Стеки типа php/composer/laravel(и тд)/vue не нуждаются же в пердолинге (разве что с версией php)?
Типа чего, я например laravel с его богатством офицальных фреймворков буду изобретать велосипед? Я слышал Laravel вообще может на ВИРТУАЛЬНОМ ХОСТИНГЕ размещаться с обычной php.

в чем я не прав? VDS с Git конечно нужен чисто для проффесиональной деятельности и совместной работы, адекватного деплоя и дебаггинга , а ДОКЕР ЗЕЧЕМ?
15868781996230.gif8,8 Мб, 400x295
667 2396064
>>395944

>ДОКЕР ЗЕЧЕМ


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

Особенно охуенно когда требуют докер, но не дают рабочую машину - типа ставь на свою и тяни всю херь сам к себе и ебись с этим. Прям дногалерное нищебродское айти такое.
Нет никаких проблем поднять рабочий сервак с гитом для каждого разраба чтобы он там работал изолированно. Правда для этого надо отдельно девопса иметь, но у говна для этого нет денег обычно и они эту хуиту на разрабов скидывают - чтобы они сами докер пердолили.
668 2396147
>>388464
Найс тролишь долбоеб
669 2396164
>>396147
тише, не пали
670 2396167
Как делают роутинг по-уму?
671 2396197
>>396147
А что не так? Всё по факту.
16528861833320.jpg56 Кб, 370x369
672 2396254
>>395814
бамп вопросу
16565209021771.png356 Кб, 600x450
673 2396274
>>396147
Ну блядь, чем не годится сервер с lamp/lemp и системой контроля типа git/hub/lab/gitea? Я просто новичок, неужели мне эту поебень учить? У php-шников ведь есть composer, symphony, laravel, мне что для работодателей нужно учить докер?

Как бы не проблема, но есть ли смысл. Бэкенд на js/node если в проекте, смысл вижу. Фронтенд и система микросервисов там неебическая какая-то тоже. А на php звучит как-то неуместно
674 2396286
>>396274
Тебе не нужен контроль версий если нечего контролировать, у тебя не такие большие проекты чтобы их заносить по веткам, в будущем когда научишься кодить поймешь зачем это нужно и только тогда выучишь. Сервера никакие ставить тебе не надо, ты можешь скачать готовые стаки, но они однокнопочные, просто запустил и работаешь, в твоем случае тебе даже не нужно никакие конфиги писать. Composer это менеджер пакетов для PHP, упрощает работу в разы, Symfony и Laravel это вообще фреймворки, один строится поверх другого. Докер тебе нужен как раз таки чтобы не заморачиваться с серверами. Микросервисная архитектура пишется на PHP причем повсеместно и это нормальная практика использовать PHP в связке с JS для этого путем разделения фронтов.
675 2396341
Сап пр. Допустим я делаю SPA приложение, оформляю авторизацию через token, передаю токен в заголовках.
Это фиксит csrf да, но теперь если я захожу создать функционал приватных фоток, чтобы их видели не все пользователи.
Я не могу создать просто тег img с сылкой на фотку, т.к это отправляет GET запрос, а он токо кукисы передают, собственно поэтому токен не передается. Получается мне нужно делать запрос на мой роут фоток, чтобы он мне скинул в бейс64?
Тогда стоит вопрос кеширования. Мне его самому пилить?
Делают ли адекватные парни передачу токена в хедерах? Или я че-то не выкупаю.
Как в ВК это реализованно? Они генерируют случайную ссылку которая временно работает и потом по ней может пройти любой чел?
676 2396721
Привет, анон
Есть какие нибудь адвайс листы со списком программ на пыхе? типа рулетки? Надо бы тренировать себя, а в чем реализоваться хз
677 2397014
Я правильно понимаю, что лучше делать запрос к бд через PDO? это типа унивирсальный запрос для всех БД типа mysql/nosql/redis/postgresql(и тд названия не знаю, глупенькай)?

лучше PDO умолчанию использовать?
678 2397082
679 2397237
>>397014
Да, вот только в Битриксе пдо не юзают.
680 2397251
>>396064

>дногалерное нищебродское айти


Судя по твоему высеру, ты ничего другого и не видел.
Когда придется столкнуться с крупным микросервисным приложением, тогда расскажешь, как тебе просто все поднять без докера на локальной машине
681 2397253
>>397237
Почему?
4m7kx3.jpg61 Кб, 500x622
682 2397285
>>397251
Дружок пирожок, а на сравнительно старом ноуте на ubuntu докер нормально работать будет? или нужно неебаться с стационарный комп собирать? Я слышал на винде он лагает пиздос и требовательный, это правда?
Или от проекта зависит?

Может кто знает
683 2397296
>>397285
Я имею ввиду php стеки вчастности
684 2397352
>>397285
Я слышал докер не пашет только на win7, а линухи/10 нормально.
685 2397354
Вот у меня есть таблица с каким-то списком, и сверху поисковая строка. Как по уму сделать, чтобы AJAXом эту таблицу выводить динамически? Всю полностью запихнуть в heredoc скрипта сервера, а в шаблоне в какой-то div элемент ее писать?
686 2397372
>>397354

>Как по уму сделать, чтобы AJAXом эту таблицу выводить динамически?


Что ты подразумеваешь под "по уму"? Самый простой вариант - сделать кнопку "Поиск", при нажатии на котороую делать запрос и обновлять данные в таблице.
687 2397392
>>397372
Короче я продублировал всю таблицу и в скрипте, и в шаблоне(где обернул ее в div). При вбивании в строку поиска после каждого символа с помощью обработчика onkeyup у inpuy она аяксом полностью заменяется. Скорее всего для больших реальных таблиц БД это очень нерационально по производительности, но для небольших объемов пойдет по идее.
688 2397418
>>397392
хх.ру недавно добавили аякс на поиске, я аж вздрогнул, подумал может приснилось, что самый крупный снг сайт по поиску работы додумался сделать себе фичу 15-летней давности
689 2397426
>>397418
Кстати про хх.ру, люди собеседуются только один раз в в какую-то фирму и попадают типа в блеклист после отказа, или это нормальная практика собеседоваться туда же через какой-то промежуток времени?
690 2397429
>>397426
Да не, просто второй раз собеседоваться можно через 1-2-3-4-5-6 месяцев. В ультратоп компаниях мб через год.

А в блеклист можно попасть, если ты поведешь себя по-свински. Типа нагрубишь и нахуй пошлешь, или договоришься на собес, а сам не появишься и т.д.
691 2397442
почему ларавел такое говнище?
692 2397451
>>395814
>>396254
Меня (и никого из программеров) не прикалывает, когда собеседник свои "допустим" выдумывает на ходу и по частям.

Поэтому бесплатно думать и отвечать уже не буду.

Что мешало описать полные требования в первом посте?
693 2397460
>>397253
Потому-что битрикс это ебаное говно созданное тупыми ебланами наебывать ссаных гоев.
695 2397462
>>397354
Зачем тебе heredoc? Ты хочешь всунуть туда таблицу?
Один из грамотных вариантов это послать запрос на твой скрипт сервера который отправит данные в application/json формате, получить ответ и запарсить с помощью ajax, вывести таблицу с помощью директив пыхи. Если нужно обновить данные просто отправляешь свой поисковой post запрос, который потом принимаешь там же и выводишь таким же образом соответствующую информацию.
696 2397463
>>397451
Двачую.
697 2397614
>>397462
Да просто во всех примерах ajax'а которые я пока видел там скрипт что-то выводит через echo, а js это присваивает свойству innerHTML какого-то элемента документа.
Если не затруднит, можешь кинуть пример того, о чем ты говорил?
698 2397788
>>397251
Долбоёб дногалерный, ты?
Работаю над крупным распределённым приложением без всякого докера.
699 2397831
>>391730

> Если ты хочешь удобный язык, пожертвовав скоростью выполнения, то есть Питон. Если ты хочешь высокую скорость, то есть Раст, если ты хочешь удобную асинхронность и высокую скорость, то есть Го. А какие плюсы у Ноды?


Зачем выбирать из говен когда есть решётки с asp.net которые обладают всем вышеперечисленным?

>>392108

>основательного изучения JS


Чтобы основательно запомнить все баги/костыли этих помоев существующих ради управления DOM'ом надо ещё денег заплатить?

>>396064
Ох уж эта боль ждуна который предпочтёт на каждый проект ставить на ОСь тонны говна вместо того, чтобы просто набрать в консоли: docker-compose up
Заебись наверное накатывать кучу хуйни и запускать через костыли проект, а потом на новом проекте ставить другие костыли пока твоя ОСь не упадёт нахуй от такого кол-ва мусора в системе.

>>397788

>Работаю над крупным распределённым приложением


Из всех зависимостей в котором пыха, мускуль и апач?
700 2397967
Как получить трассировку приложения в пыхе. Подразумевается не вывод стектрейса, а полноценный дебажный лог php-приложения т.к. в нем есть различные джобы и прочая фоновая активность надеюсь не слишком всрато объяснил
Пытался заюзать поделие азиатов, но на 8-ом пыхе не собирается https://github.com/Qihoo360/phptrace
Есть ли еще аналоги phptrace?
701 2397971
>>397967
Не вывод стектрейса в странице*

быстрофикс
702 2398035
>>397831

>Чтобы основательно запомнить все баги/костыли этих помоев существующих ради управления DOM'ом надо ещё денег заплатить?


Я заплатил, но там норм базу дают.
703 2398054
>>398035
Самое главное постичь баги этого недоязыка с динамической типизацией, почему NaN !== NaN и прочие фичи
image.png668 Кб, 652x552
704 2398063
>>398054

>4 пик


Что это за хуйня
705 2398072
>>398054

>NaN !== NaN


>1.1*1.1


>'2'+ '2' - '2'


То ли дело в православном C++! Там то по другому все работает, да?
706 2398156
Сап, камни!

Нужна следующая помощь:

Есть форма для создания тестов с вопросами (пик 1)
Также, есть вопросы. Для них тоже есть форма (пик 2)
Логично, что тест и вопросы связаны один-ко-многим.

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

Вопрос:
Я правильно понимаю, что для того, чтобы одним запросом отправлять на сервер данные "вложенных форм" нужно копать в сторону JS?
Можете подсказать, какая реализация будет более выигрышной?
707 2398164
>>398156
Нормально ли, если кнопка "сохранить тест" будет сначала отправлять по пути example.com/tests/store, по которому в таблицу с тестами запишется тест; а затем в цикле, в количестве раз, равному количеству вопросов, будет отправлять по пути example.com/questions/store, по которому в таблицу с вопросами запишется вопрос, связанный с тестом через поле с id теста?
708 2398181
>>398156
Может быть в Laravel через TestController можно сделать что-то типа

$test = Test::create($testFormData);
$questions = $test->questions()->create($questionFormData);

??
709 2398205
Как же всё-таки сделать динамическую форму, которая будет сохранять данные в несколько таблиц одновременно?
710 2398226
>>398205

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


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

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

Структура таблицы:

Тесты
— id
— name

Вопросы
— id
— test_id
— text

Ответы
— id
— question_id
— text

Цепляешь таблицы друг за другом, а внутри скрипта создаешь отношения.
711 2398228
>>398226
Да, это я понимаю.
Но как мне реализовать форму, чтобы из нее данные попадали в таблицы тестов, вопросов и ответов? Из TestController.store делать редирект в QuestionController.store а оттуда в AnswerController.store?
712 2398244
>>398226
Нормально ли будет если кнопка "добавить вопрос" будет добавлять в форму следующую структуру вида:

</input type="text" name="question_{i}">
</input type="text" name="answer_{i}">
Где i - номер вопроса в тесте

И в контроллере я буду парсить по question_ . '#\\d#' и answer . '#\\d#'

И для каждого блока, где i одинаковый, я буду вызывать редирект в Question controller и оттуда в AnswerController.

Разве пользователь не сможет подменять i через браузер? Это ведь будет все ломать?
713 2398291
>>398286 (Del)
У меня intelephense vscode тоже не видел интерфейс, реализованный в классе, пока я не открыл файл с ним в новой вкладке. Видимо баг у них, либо надо как-то док-комментами @ показывать это.
714 2398402
>>398181
Внезапно, оказалось, что можно.
И подобных методов достаточно:

$test->save($comment);
$test->saveMany([$comment1, $comment2]);
$test->create($commentData);
$test->createMany([$commentData1, $commentData2]);


Тогда вопрос следующий:
Как внутри формы выделять блоки вопрос-ответ? Разве POST-запрос может иметь уровни вложенности?
715 2398404
>>398402
Фикс.
Конечно, $test->comments()->save($comment).
716 2398421
>>398409 (Del)
Из консоли ты можешь подключиться к базе данных через этого юзера? Менять пароль для юзера пробовал?
717 2398471
>>398409 (Del)
Выше в треде у анона была такая же проблема.
718 2398495
>>398475 (Del)
Чего там, ошибка в конфиге или через судо надо запускать?
719 2398518
>>393277

glob(), как и большинство других функций, берет пути относительно рабочей директории процесса. То есть, если рабочая директория это c:\data\, и ты пытаешься открыть файл a\b.txt, то PHP будет пытаться открыть c:\data\a\b.txt.

В ОС вроде Linux/MacOS/Windows у каждого процесса есть "рабочая директория". Ты можешь получить ее функцией getcwd() и изменить функцией chdir(). Собственно, рабочая директория придумана как раз для того, чтобы не надо было писать полные пути к файлам, а можно было использовать относительные.

Если ты запустил скрипт из командной строки, то рабочая директория это директория, которая была текущей на момент запуска скрипта (это не директория, где находится скрипт). Например, если текущая папка была

c:\data\

и ты запустил команду

php c:\scripts\1.php

То рабочей директорией будет c:\data\. В линуксе все аналогично, только слеши наклонены в другую сторону и нет букв у дисков.

Если твой скрипт запускается веб-сервером (то есть, ты открываешь страницу в браузере), то рабочая директория непредсказуема и ты не должен на нее полагаться. Ты можешь явно поменять ее с помощью chdir(), если ты хочешь иметь какое-то предсказуемое значение, но лучше генерировать пути относительно какой-то константы вроде ROOT_DIR или относительно папки скрипта __DIR__.
720 2398522
>>398518

А, еще. Рабочая директория наследуется при запуске нового процесса. Поэтому, когда ты запускаешь скрипт из командной строки, то PHP наследует рабочую директорию от оболочки. Рабочая директория не зависит от того, в какой папке расположен сам скрипт.
721 2398536
>>395252

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

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

https://docs.docker.com/engine/reference/builder/#user
https://docs.docker.com/engine/security/userns-remap/

Например: мы настраиваем, что пользователь mysite на хосте соответствует пользователю root в контейнере. Мы запускаем программу в контейнере как root, и если она создает файл, то она видит его владельца как root, но на хосте его реальный владелец виден как mysite.

Это называется linux user namespaces и container uid mapping. Они описаны в мануале по Линуксу: https://man7.org/linux/man-pages/man7/user_namespaces.7.html

Там, кстати, написано, что можно просмотреть маппинги для контейнера через /proc/{id процесса на хосте}/uid_map. Под каким пользователем на хосте запущен контейнер, ты можешь увидеть в /proc/{id процесса на хосте}/loginuid

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

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

Работа с Докером требует знания командной строки, shell и основ Линукса. Докер это не магическая кнопка, которая сама решит все проблемы.
721 2398536
>>395252

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

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

https://docs.docker.com/engine/reference/builder/#user
https://docs.docker.com/engine/security/userns-remap/

Например: мы настраиваем, что пользователь mysite на хосте соответствует пользователю root в контейнере. Мы запускаем программу в контейнере как root, и если она создает файл, то она видит его владельца как root, но на хосте его реальный владелец виден как mysite.

Это называется linux user namespaces и container uid mapping. Они описаны в мануале по Линуксу: https://man7.org/linux/man-pages/man7/user_namespaces.7.html

Там, кстати, написано, что можно просмотреть маппинги для контейнера через /proc/{id процесса на хосте}/uid_map. Под каким пользователем на хосте запущен контейнер, ты можешь увидеть в /proc/{id процесса на хосте}/loginuid

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

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

Работа с Докером требует знания командной строки, shell и основ Линукса. Докер это не магическая кнопка, которая сама решит все проблемы.
722 2398557
>>395664

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

- определенные версии библиотек PHP
- определенная версия PHP (у тебя нет желания тестировать каждое изменение кода со всеми предыдущими и будущими версиями PHP)
- определенные расширения к PHP
- определенные утилиты командной строки (например: для конвертации PDF в картинку)
- определенная версия PostgreSQL
- определенные плагины к PostgreSQL
- определенная версия redis
- определенная версия nginx

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

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

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

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

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

- линуксовые менеджеры пакетов вроде apt или rpm могут не содержать нужной программы в репозитории, или не содержать нужной версии, или содержать версию, собранную с другими настройками (например, утилита есть, но она не поддерживает какой-то формат данных).
- в разных дистрибутивах пакет с одной программой может называться по-разному. В одном это пакет convert, в другом это libconvert, а в третьем convert-utils. Непонятно, как в документации все это описать.
- линуксовые менеджеры пакетов не умеют ставить программу с произвольными настройками компиляции
- линуксовые менеджеры пакетов умеют ставить программы только глобально и не позволяют поставить две версии одной программы или установить программу в произвольную папку. Одному проекту нужна утилита convert версии 1.5, а другому версии 1.7, и обе поставить невозможно.
- линуксовые программы и утилиты часто хардкодят пути к файлам. Например, программа позволяет хранить настройки только в /etc/hosts. Что делать, если у тебя 2 проекта и в каждом нужны свои настройки, непонятно.
- наконец, линуксовые менеджеры пакетов не работают под Windows или Mac

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

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

То есть, вместо того, чтобы сделать правильный универсальный менеджер пакетов, просто сделали кривой костыль на shell-скриптах, что очень часто принято делать в мире Линукс. Для PHP-библиотек есть композер, для Rust-библиотек есть Cargo, только для Сишного хлама требуются такие костыли.

Мне кажется, правильное решение было бы таким:

- сделать менеджер пакетов вроде cargo/composer для Си. Он должен уметь скачивать исходный код и зависимости и компилировать их под любую платформу с любыми настройками.
- сделать платформу или несколько платформ, которые позволяют писать код на Си кроссплатформенно. Большинству утилит не нужны какие-то навороченные API, им хватает чтения файлов и работы с сетью.
- сделать убер-менеджер пакетов, который сам ничего не ставит, а умеет лишь устанавливать и запускать другие менеджеры. Например, если твоему проекту нужны библиотеки на Го, Ноде и Rust, то он установит соответствующие менеджеры и все что им нужно, и попросит их установить нужные библиотеки и программы. Не глобально, а в папочку с проектом.
722 2398557
>>395664

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

- определенные версии библиотек PHP
- определенная версия PHP (у тебя нет желания тестировать каждое изменение кода со всеми предыдущими и будущими версиями PHP)
- определенные расширения к PHP
- определенные утилиты командной строки (например: для конвертации PDF в картинку)
- определенная версия PostgreSQL
- определенные плагины к PostgreSQL
- определенная версия redis
- определенная версия nginx

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

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

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

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

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

- линуксовые менеджеры пакетов вроде apt или rpm могут не содержать нужной программы в репозитории, или не содержать нужной версии, или содержать версию, собранную с другими настройками (например, утилита есть, но она не поддерживает какой-то формат данных).
- в разных дистрибутивах пакет с одной программой может называться по-разному. В одном это пакет convert, в другом это libconvert, а в третьем convert-utils. Непонятно, как в документации все это описать.
- линуксовые менеджеры пакетов не умеют ставить программу с произвольными настройками компиляции
- линуксовые менеджеры пакетов умеют ставить программы только глобально и не позволяют поставить две версии одной программы или установить программу в произвольную папку. Одному проекту нужна утилита convert версии 1.5, а другому версии 1.7, и обе поставить невозможно.
- линуксовые программы и утилиты часто хардкодят пути к файлам. Например, программа позволяет хранить настройки только в /etc/hosts. Что делать, если у тебя 2 проекта и в каждом нужны свои настройки, непонятно.
- наконец, линуксовые менеджеры пакетов не работают под Windows или Mac

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

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

То есть, вместо того, чтобы сделать правильный универсальный менеджер пакетов, просто сделали кривой костыль на shell-скриптах, что очень часто принято делать в мире Линукс. Для PHP-библиотек есть композер, для Rust-библиотек есть Cargo, только для Сишного хлама требуются такие костыли.

Мне кажется, правильное решение было бы таким:

- сделать менеджер пакетов вроде cargo/composer для Си. Он должен уметь скачивать исходный код и зависимости и компилировать их под любую платформу с любыми настройками.
- сделать платформу или несколько платформ, которые позволяют писать код на Си кроссплатформенно. Большинству утилит не нужны какие-то навороченные API, им хватает чтения файлов и работы с сетью.
- сделать убер-менеджер пакетов, который сам ничего не ставит, а умеет лишь устанавливать и запускать другие менеджеры. Например, если твоему проекту нужны библиотеки на Го, Ноде и Rust, то он установит соответствующие менеджеры и все что им нужно, и попросит их установить нужные библиотеки и программы. Не глобально, а в папочку с проектом.
723 2398566
>>398557
а из-за этой виртуальной машины производительность не падает на продакшене? а если несколько докеров на одном сервере, всё нормально с этим, можно не волноваться?
724 2398570
>>396167

Используют готовую библиотеку или фреймворк для роутинга, а не пишут велосипед. Или ты имел в виду, как правильно придумать URL для страниц? У меня есть старый пост по теме: https://gist.github.com/codedokode/772a4ccc03e41d6b7cba

>>396274

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

>>396286

Микросервисная архитектура, я надеюсь, все же не используется повсеместно, так как для большинства небольших и средних проектов это просто выбрасывание денег на ветер. Я же писал где-то выше про это >>390832 >>391723
725 2398577
>>398566

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

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

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

Часто, Докер используют только для разработки, но не на продакшене.
726 2398578
Я опять с тестами, вопросами и ответами
Выяснил, как можно передавать массивы в POST-запрос, но теперь меня терзают смутные сомнения.

Например, я буду динамически добавлять блоки вопрос-ответ в форму как на пик1.

Но что, если сильно хитрый юзер решит подменить $i в
<input type="text" name="questions[$i][text]">?

разве это не может все мне сломать?
727 2398583
>>398578
Есть ли способ как-то детектить изменения в html форме, навязанные юзером?

В динамической форме ведь не сработает сохранять начальное состояние формы и сравнивать с формой, пришедшей от клиента?
728 2398587
>>396341

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

Можно вернуться к кукам и использовать их. Также, ты можешь сгенерировать ссылку с токеном в ней вроде /img/ds6ds6fshdf7sdfhsf539sdfsdf/selfie.jpg или selfie.jpg?token=dhd7f8f8f7df77df. Но это не очень безопасно, так как такая ссылка может попасть в поисковики. Например, ты пересылаешь ссылку по скайпу, скайп сливает ссылку в Bing, Bing индексирует картинку и делает ее всем доступно. Или глупый пользователь сам выложит где-нибудь ссылку и будет жалеть.

По моему, ВК использует сложноподбираемые ссылки. Я туда давно не захожу, так что не в курсе. Раньше у них в ссылке был просто прописан id пользователя и пользователи себя деанонимизировали, выкладывая где-нибудь ссылку.

Защищаться от CSRF можно двумя способами:

1) проверять HTTP-заголовок Origin
2) CSRF-токеном
729 2398593
>>397014

Да, но PDO только для SQL-баз данных и не работает с redis.

>>397285

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

- Докер может скачивать гигабайтные образы, тебе придется удалять аниме, чтобы они влезли на диск
- в проекте для программ могут быть прописаны неадекватные настройки. Например, запустить 10 процессов базы данных и выделить каждому по гигабайту, хотя потребности в таком количестве процессов и памяти нету. Это можно решить либо сделав свои конфиги, либо сделав в Докерфайлах возможность кастомизации настроек
730 2398598
>>397354

Если у тебя таблица небольшая и не хранится в базе данных, то проще просто целиком засунуть ее в тело страницы в виде JSON и добавить JS библиотеку, которая позволяет брать данные из JSON и выводить постранично с поиском.

> обработчика onkeyup



Это устаревший подход, надо использовать событие input, так как данные в поле ввода можно менять без нажатия клавиш (например, перетащить мышью или вставить через меню).
731 2398600
>>397354

А вообще, если ты хочешь получить адекватный ответ, то сформулируй:

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

В xdebug есть трассировка? в которую попадает каждый вызов функции: https://xdebug.org/docs/trace

>>398054

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

>>398156

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

- часто бывает, что у вопросов одинаковое кол-во баллов. Не надо заставлять пользователя 50 раз вводить одно и то же число. Можно, например, по умолчанию ставить кол-во от предыдущего вопроса
- в "тип ответа" не подсвечен выбранный вариант. Опять же, можно по умолчанию выбирать тип от предыдущего вопроса.
- поле ввода "число баллов" очень далеко оторвано от лейбла
- хорошо бы иметь возможность перетаскивать ответы и перетаскивать или как-то еще сортировать вопросы
- хорошо бы сделать быструю навигацию между полями, вопросами с помощью горячих клавиш и как-то проинформировать пользователя об этом (простое решение - вывести информацию, более хитрое - выводить подсказку только если пользователь делает операцию неэффективным способом)
733 2398620
>>398608
О, спасибо за совет с сохранением значений из прошлого вопроса!
Навигацию и перетаскивание я планировал реализовать позднее.

У меня проблема с организацией структуры инпутов в форме.
Я ведь правильно понимаю, что я должен передавать серверу массив вопросов? А как правильно организовать инпуты, чтобы результатом стало что-то вроде пикрил? А может мне не нужно делать вложенные массивы, а обойтись линейным?>>398608
734 2398623
>>398156

Теоретически, ты можешь обойтись без JS, чистым HTML. В HTML можно использовать имена полей с индексами вроде

question[1][text]
answer[1][1][text]

В PHP они придут массивами. Мануал: https://www.php.net/manual/ru/faq.html.php#faq.html.arrays

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

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

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

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

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

Чтобы просто добавить вопрос или вариант ответа ты можешь сделать шаблон в теле страницы с помощью тега <template> и JS-скриптом клонировать данные из DOM шаблона и вставлять в DOM страницы. То есть, это будет работать без отправки запроса на сервер.

И не забудь об оптимизации пользовательского опыта. Желательно сделать добавление вопросов максимально просто. Например, сделать поле "текст вопроса", и когда пользователь что-то в нем печатает, автоматически появляются остальные поля (тип ответа, варианты ответов) и поле для следующего вопроса.

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

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

Если с этим совсем сложно, то можно на стороне JS генерировать временные id, которые легко отличить от настоящих.
736 2398632
>>398164

Нет, это плохая идея, так как это медленно, и непонятно, что делать, если посередине у тебя упал интернет и часть вопросов не отправилась.

Лучше будет в JS собирать все данные и отправлять одной пачкой в формате JSON. Чтобы операция была атомарной: или тест создан целиком со всеми вопросами, или произошла какая-то ошибка.
737 2398655
>>398164

Также, если ты хочешь более красивые URL, то используй:

POST /tests/ для создания нового теста
PUT /tests/124/ для обновления теста с id

Также, ты можешь сохранять тест в процессе создания как бекап, например, каждые 60 секунд отправляя его на POST /tests/draft/{draft id}/, но эти данные должны сохраняться как "черновик", а не вносить изменения в реальный тест, пока пользователь не подтвердит желание перезаписать тест.

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

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

Без версионирования будут проблемы, если кто-то сдал тест на 100%, потом в тест добавили вопросы, и у него оценка автоматически снизилась. Или уже, поменяли текст вопроса, и его ответ стал неправильным. Если не использовать версионирование, то придется запрещать редактировать тест, если кто-то уже проходил его.
738 2398657
>>398598
>>398600
Да я просто изучаю ajax немного, думаю это на собесах тоже спрашивают, никаких требований естественно. Просто подумал про производительность такого подхода.

>Это устаревший подход, надо использовать событие input


Ты имеешь в виду oninput? Почему-то на htmlbook.ru нет его, они не обновляют сайт или там просто неполная информация? На w3schools естественно нашел.
739 2398660
>>398181

Это называется сериализация (преобразование объектов в массивы и обратно). Ты можешь использовать возможности Ларавель, или сериализаторы вроде JMSSerializer, Symfony Serializer.

>>398205

Ты отправляешь все данные одной пачкой. На сервере ты:

- при создании создаешь граф из объектов (Тестов, Вопросов, Вариантов Ответов)
- при редактировании ты загружаешь объекты из БД и обновляешь их пришедшими данными

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

Далее ты валидируешь и если все ок, то сохраняешь объекты обратно в БД. В Ларавель по моему для этого надо вызывать save() у каждого объекта, а в Data Mapper вроде Доктрины достаточно просто вызвать $em->flush() и она сама все сохранит.

Не забудь обернуть сохранение в транзакцию, чтобы не было такого, что при ошибке половина изменений сохранилась, а половина нет.
740 2398678
>>398205

То есть, принцип такой:

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

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

> Но как мне реализовать форму, чтобы из нее данные попадали в таблицы тестов, вопросов и ответов? Из TestController.store делать редирект в QuestionController.store а оттуда в AnswerController.store?



У тебя будет одна точка входа в контроллере (TestController.store), которая получает большой JSON с данными и создает/обновляет модели. Нет такого правила, что ты можешь создавать Вопросы только в QuestionController. Не нужно делать редиректы.

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

- в контроллере принимаем JSON и превращаем его в массив массивов
- вызываем TestEditService#deserializeTest(array $data): Test для преобразования жуткого массива массивов в граф из объектов Test, Question, Answer
- вызываем TestEditService#validateTest(Test $test): Error[] для валидации теста
- вызываем TestEditService#loadTest(int $id) для загрузки предыдущей версии теста из БД
- вызываем TestEditService#createNewVersion(?Test $old, Test $new), которая обнаружит изменения и создаст новую версию теста. Если вопрос изменился, то мы создаем новый вопрос, если нет, то мы включаем в новый тест вопрос из старого теста, чтобы не множить сущности без необходимости.
- если все ок, то редиректим на просмотр теста или возвращаем JSON с успешным результатом

Заметь, что такое разделение кода позволяет тестировать функции по отдельности. Ты можешь, например, вызвать deserializeTest() и проверить, что возвращается правильный набор объектов. Потом протестировать следующую функцию итд. Конечно, в идеале тестировать с помощью автоматических тестов.
740 2398678
>>398205

То есть, принцип такой:

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

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

> Но как мне реализовать форму, чтобы из нее данные попадали в таблицы тестов, вопросов и ответов? Из TestController.store делать редирект в QuestionController.store а оттуда в AnswerController.store?



У тебя будет одна точка входа в контроллере (TestController.store), которая получает большой JSON с данными и создает/обновляет модели. Нет такого правила, что ты можешь создавать Вопросы только в QuestionController. Не нужно делать редиректы.

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

- в контроллере принимаем JSON и превращаем его в массив массивов
- вызываем TestEditService#deserializeTest(array $data): Test для преобразования жуткого массива массивов в граф из объектов Test, Question, Answer
- вызываем TestEditService#validateTest(Test $test): Error[] для валидации теста
- вызываем TestEditService#loadTest(int $id) для загрузки предыдущей версии теста из БД
- вызываем TestEditService#createNewVersion(?Test $old, Test $new), которая обнаружит изменения и создаст новую версию теста. Если вопрос изменился, то мы создаем новый вопрос, если нет, то мы включаем в новый тест вопрос из старого теста, чтобы не множить сущности без необходимости.
- если все ок, то редиректим на просмотр теста или возвращаем JSON с успешным результатом

Заметь, что такое разделение кода позволяет тестировать функции по отдельности. Ты можешь, например, вызвать deserializeTest() и проверить, что возвращается правильный набор объектов. Потом протестировать следующую функцию итд. Конечно, в идеале тестировать с помощью автоматических тестов.
741 2398688
>>398244

Не изобретай велосипед. В именах полей можно использовать индексы массива, вроде question[1]. Если ты будешь собирать данные из формы с помощью JS, то можно либо самому писать библиотеку для этого, либо использовать готовую вроде https://www.npmjs.com/package/@jalik/form-parser

Эта библиотека собирает данные из формы в массив массивов и поддерживает квадратные скобки в именах полей.
742 2398691
>>398286 (Del)

Надо писать use app\modules\admin\AddItem либо new admin\AddItem.

Урок по неймспейсам: https://github.com/codedokode/pasta/blob/master/php/autoload.md
743 2398708
>>398495

Тут отвечали: >>388360

В новых версиях MySQL подключиться как root можно только через sudo, потому надо для сайта создать отдельного пользователя MySQL с паролем.

>>398578

Прислать тебе могут что угодно: массив вместо строки, строку вместо массива, массив вложенностью в 100 уровней и тд. Твой код должен надежно работать в любой ситуации.

Ты можешь попробовать прикрутить Ларавелевскую валидацию данных запроса:

https://laravel.com/docs/9.x/validation#quick-writing-the-validation-logic
https://laravel.com/docs/9.x/validation#validating-arrays

или что-то другое.

Обрати внимание, что тут фактически два уровня валидации:

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

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

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

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

- принимаем массив, и создаем объекты-DTO
- передаем в сервис эти объекты и он на их основе вносит изменения в модель или в БД

Отличие DTO от моделей:

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

DTO используют, например, когда у тебя в модели 50 полей, а в форме всего 5 и тебе удобнее передать небольшой объект. Или когда данные в форме хранятся в другом формате, не как в модели. В Ларавеле есть что-то вроде DTO: https://laravel.com/docs/9.x/validation#creating-form-requests но эти "DTO" очень сильно завязаны на формы и могут испортить архитектуру.
743 2398708
>>398495

Тут отвечали: >>388360

В новых версиях MySQL подключиться как root можно только через sudo, потому надо для сайта создать отдельного пользователя MySQL с паролем.

>>398578

Прислать тебе могут что угодно: массив вместо строки, строку вместо массива, массив вложенностью в 100 уровней и тд. Твой код должен надежно работать в любой ситуации.

Ты можешь попробовать прикрутить Ларавелевскую валидацию данных запроса:

https://laravel.com/docs/9.x/validation#quick-writing-the-validation-logic
https://laravel.com/docs/9.x/validation#validating-arrays

или что-то другое.

Обрати внимание, что тут фактически два уровня валидации:

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

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

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

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

- принимаем массив, и создаем объекты-DTO
- передаем в сервис эти объекты и он на их основе вносит изменения в модель или в БД

Отличие DTO от моделей:

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

DTO используют, например, когда у тебя в модели 50 полей, а в форме всего 5 и тебе удобнее передать небольшой объект. Или когда данные в форме хранятся в другом формате, не как в модели. В Ларавеле есть что-то вроде DTO: https://laravel.com/docs/9.x/validation#creating-form-requests но эти "DTO" очень сильно завязаны на формы и могут испортить архитектуру.
744 2398709
>>398583

Проще всего отправлять всю форму на сервер и там сравнивать с данными из БД.

А так, изменения можно определять по событию input с помощью JS. Событие input всплывает, потому достаточно повесить один обработчик на форму, и ты будешь получить информацию об изменении любого поля.

Такой обработчик можно использовать, чтобы выдавать предупреждение при попытке закрыть вкладку с несохраненными изменениями или для бекапа формы в localstorage или на сервер.
745 2398713
>>398583

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

>>398620

Тут нужно несколько уровней вложенности: тест состоит из многих вопросов. А вопрос может содержать много вариантов ответов.

То есть:

questions[1][text]
questions[1][answers][2][text]
questions[1][answers][2][correct]

Ты можешь попробовать сделать форму совсем плоской, но работать с ней может быть неудобно:

question_text[1]
question_points[1]
answers_text[16]
answers_correct[16]
746 2398716
>>398657

Есть на MDN: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event и в спецификациях DOM. Ты, наверно, используешь устаревший источник информации.
747 2398785
>>398713
Выходит так, что радио-кнопки должны иметь разные имена
name="questions[1][answers][1][correct]"
name="questions[1][answers][2][correct]"
name="questions[1][answers][3][correct]"


Но ведь это приведет к тому, что они больше не будут составлять одну группу? Здесь тоже надо использовать JS?
748 2398837
>>398785

У радиокнопок можно сделать одинаковое имя, но разные value.

Вариант с разными именами нужен, если у нас чекбоксы.
749 2398865
Имеет ли смысл писать свой роутер? В ТЗ сказали реализовать ToDO используя как можно меньше кода, а я никогда не писал роутер, отказался от работы.
750 2398925
>>398570

>Используют готовую библиотеку или фреймворк для роутинга, а не пишут велосипед. Или ты имел в виду, как правильно придумать URL для страниц? У меня есть старый пост по теме:


Ну и то, и то. А как там вот в уроке url'ы без названия скрипта с расширением php в конце - это в htaccess надо как-то переадресацию настраивать уметь в каждой папке?
751 2398945
>>398865
Это же тред про обучение. Для обучения -- да, стоит, раз есть пробелы.
752 2399090
>>398925

Способ переадресации зависит от используемого сервера.

В Apache используется mod_rewrite, это модуль, который переписывает URL согласно правилам до тех пор, пока URL не перестанет меняться: https://httpd.apache.org/docs/2.4/rewrite/intro.html

В Nginx обычно просто все запросы, не соответствующие статическим файлам, перенаправляют на index.php, как тут в конце страницы, только SCRIPT_FILENAME надо присвоить "/index.php": https://nginx.org/ru/docs/beginners_guide.html

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

/posts/{id}/

В таком случае роутер должен дополнительно извлечь значения параметров из URL и вернуть их.
753 2399103
>>398945
Ну значит я правильно сделал, а на будущее всем скажу, что при устройстве на работу все чему учит ОП - учитывается. И я не говорю, что я сомневался, просто убедился.
754 2399110
>>398867 (Del)
Используй бинарные типы, TRUE/FALSE.
755 2399117
>>398865
На джуна собеседовался?
Я тоже не знаю, как такое делать. Надо наверное фреймворк какой-то начать изучать и там смотреть как сделали.
756 2399120
>>399117
Не на джуна.
757 2399122
Просили написать свой роутер и использовать пару контроллеров и как можно меньше кода. У них фреймворк на симфони.
758 2399124
>>399120
На кого если не секрет?
У меня в мухосрани на стажера есть вакансия, там в требованиях только php (и/или JS). Вот думаю, что на тестовом будет.
На джуна уже фреймворк/цмс требуют знания, я этого не касался пока вообще.
759 2399168
>>399124
На фуллстака по Laravel/Vue. Однако я указал в навыках, что знаю PHP вот меня и попросили в ТЗ роутер написать, а я уже и забыл как это делать. ЗП попросил 1500$.
Была еще контора которая на 3000 евро, дали ТЗ сделать CRUD приложение, которое я сделал, но там конкуренция получше меня была, пришлось пососать. Но я вынес из этого, что мне нужно повысить свой уровень и потом пытаться снова, либо пойти джуном поработать, параллельно обучаться дальше в темпе.
760 2399219
>>399103
Подтверждаю, даже для битрикса спросили почти все.
761 2399222
>>399124
На джуна не во всех вакансиях требуют фреймворки/смс, но в любом случае это будет огромным плюсом.
762 2399229
такой вопросик
если бы вы сейчас начинали изучать что то, стали бы учить пыху или что то другое?
763 2399230
>>399229
Я сам пыхарь но посоветовал бы изучить JS, а потом пыху.
764 2399255
>>398475 (Del)
>>387918 (Del)
Что за тема в вскод?
765 2399357
>>398867 (Del)

Для радиокнопок браузер передает name и value нажатой кнопки. То есть, состояние невыбранных кнопок он не передает. Если ты отправляешь данные через JS, то, конечно, можешь передавать состояние любых кнопок, и выбранных, и невыбранных.

Аналогично для чекбоксов, передаются только отмеченные чекбоксы, их name и value.

С помощью JS данные можно передать в любом формате. Но если ты будешь использовать такой же формат, как и браузер, то сможешь воспользоваться готовыми библиотеками вроде той, что я приводил выше.
766 2399470
Есть ли смысл учить VUE3, если я сейчас прохожу конкретный учебный курс php/js/laravel?

Javascript и PHP вроде как, довольно самодостаточными языками стали, а приложения на андроид и юбер-фронтенд-стартапы на ноде я не планирую делать. Про то, что он используется в Laravel я знаю, но просто стоит ли тратить время, если он сдуется за ненадобностью, или же он необходим потому-что голый джаваскрипт недостаточно фунцкионален?
767 2399483
>>399470
Если не знаешь JS то не лезь пока во фреймворки, вне зависимости от того где ты будешь его использовать нужно знать ванильный JS. Потом фреймворки будут легче даваться.
serial-experiments-lain-iwakura-lain-hd-wallpapers-16678222[...].jpg226 Кб, 1280x1024
768 2399485
>>399430 (Del)
ты на русском общаешься или узбекском?

>правельно сылку


>мол как должна


>сылка


>свой маму ибал



Вы всерьез идете программировать?
769 2399486
>>399470
Платный курс?
770 2399522
>>399486
Да, платный. https://htmlacademy.ru/profession/backender-solo

Показалось самое адеватное из того что видел. Ну курс от ОПчика пройду паралельно, мне нравится.
771 2399589
>>399470
Ну для галки стоит изучить, это же недолго и несложно. Во многих вакансиях видел такое требование, иногда оно шло как "плюс".
772 2399605
>>399522
Боже ну и наебка.
773 2399636
>>399605
В чем наебка?
774 2399638
>>399636
В том что ты можешь изучить больше, но бесплатно.
775 2399653
>>399605
Обоснуй?

про вакансии и отзывы похуй, у меня есть контент и план учебы, мне все нравится - там от базы, протоколы/html/css, до проектов,и включает почти полные курсы по этим языкам (js/php) и фреймворкам (yii,laravel). Мало того, я взял с большой скидкой
drk1.jpg44 Кб, 1200x675
776 2399693
>>399653
Отдельно отмечу тренажеры, и поддержку наставников в чате ( моем случае). Менеджеры хорошие, отзывчивые, даже решил одну проблему в свою пользу (в другой конторке меня бы нахуй послали сходу даже не сомневаюсь).

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

тоже думал что курсы нахуй не нужны
777 2399942
>>399693
А думать вас там тоже учат на курсах? Я хуею с вас, учиться нужно не по курсам, а делая что-то, создавая. Какие из вас программисты, когда вам нужно с ложечки подавать информацию? Я бы понял, если бы вы брали курсы по каким то сложным вещам, где реально нужен человек, который поможет разобраться во фреймворке и т.д (И то на ютубе полно информаций), но такие простые вещи объяснять это просто пиздец.
778 2399981
>>399942
Нахуй мне твой ютуб, с него тоже у меня есть видео. Я предпочитаю и официальную документацию, и спижженые видеокурсы и тд. С хуяли ты взял что я не собираюсь самостоятельно что-то делать?

Там просто структуризированная информация, по главам, аккуратно, с тренажерами и самое главное в мире PHP - современный код, а не легаси хуйня 12летней давности, или пустое дерьмо от васяна для ютабчека из разряда ВЕСЬ ВУЕ ЗА ЧАС.
Я ебал все на разных сайтах искать, (есть отличные материалы не спорю) где каждый порит хуйню в меру своей испорченности, зачем мне тратить время?

Еще раз напомню что ОПчик тоже молодец, мне нравится стиль изложения и затронутые им темы
779 2400002
Вкатываюсь в битрикс, уже раздали нам задачи, пора их делать. И тут что-то я начал сомневаться. Меня прям раздирает депрессняк от битрикса. Я все время думаю, что мог бы сразу вкатиться в ларавель и больше никуда не выкатываться с него, а не изучать этот битрикс, знания которого я считаю лишними для себя. Все время вспоминаю слова анонов про то как плохо быть битриксоидом, что потом никуда ты не перекатишься, так мол и повязнешь в нем и т.д.

У меня есть 2 варианта: вкатываться в Laravel и осенью искать оффлайн работу по всей России, либо продолжать тут вкатываться в битрикс, зато удаленно сразу. В планах после вката в битрикс параллельно вкатываться в ларавель потихоньку и через полгода начать пытаться проходить собесы по ларавелю.

Будут ли учитывать мой опыт на битриксе? Или это наоборот хуево, что я был битриксоидом и нахватался "плохой практики кода"? Что посоветуете? Забыть про битрикс и хуячить ларавель сразу?

Я устал сомневаться. Наверное изначально не стоило лезть в битрикс...
изображение.png225 Кб, 624x750
780 2400087
В пыхе полный ноль, но срочно надо разобраться в этом куске кода. Что тут происходит, и где может быть подвох?
image.png40 Кб, 731x639
781 2400199
Мне вот интересно, когда уже колесо сансары даст оборот и мы снова вернемся к написанию нативных форм?
782 2400205
>>400087
Ладно, уточню запрос что возвращают Session::get, или где про это почитать? В официальных доках ларавеля никакого описания
783 2400206
>>400205
Тире пропустил, ну да и ладно
784 2400215
>>399981
Бля когда работать начнёшь просто ахуеешь :)
785 2400238
>>400205

Почитать можно в API docs, там есть поиск: https://laravel.com/api/9.x/Illuminate/Support/Facades/Session.html#method_get

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

Но в Laravel есть request->session, может это то же самое? Оно описано тут: https://laravel.com/docs/9.x/session#interacting-with-the-session
786 2400273
>>400199
За это и не люблю ЖС и его фреймворки. Потому, что постоянно вижу кашу из кода и тегов в файлах. Читается как говно и выглядит как говно.
Хуже всего когда такой ещё и в ПХП умеет - тогда жди файлы из адовой мешанины пхп+хтмл+жс где всё во всё завёрнуто, что неделю пить придётся в попытке развидеть.
787 2400294
>>400215
Ошибка новичка же.
788 2400298
>>400294
Поподробнее.
Просто я сам новичок и мне интересно
789 2400299
>>400298
Поподробнее пожалуйста
790 2400301
>>400298
Когда дадут ТЗ все что ты изучал на курсах окажется не нужным.
image.png426 Кб, 800x800
791 2400308
Когда другие пиздострадают по ЕОТ, ты пиздострадаешь на сообщения тяночки из HR конторы которая дала ТЗ и напрямую тебя отшила и ты знаешь почему.
792 2400406
В задаче про кредит в банке постоянно бесконечный цикл получается, вроде бы все правильно же делаю
https://onlinephp.io/c/d9f7d
793 2400418
>>400406
Условие остановки цикла $max < 10000 никогда не выполнится.
794 2400433
>>400418
А блять, это же отдельная переменная
795 2400622
>>400273
Пыха гораздо больше говно. Это я тебе говорю как человек, которому за сутки пришлось искать дыры в жс и пыхе, перед этим вообще их не зная. Если в жскоде я разобрался на лету, то с пыхой долблюсь уже довольно долго, и это ещё не предел
796 2400856
>>400622

>перед этим вообще их не зная


Так тебе и мнение рано иметь - я то оба языка знаю и работаю на них.
797 2400901
>>400856
Ну так я тебе мнение со стороны говорю. Пыха — кусок полупереваренного кала без нормальной документации к своим говнофреймворкам и с синтаксисом, который невозможно нормально читать
798 2400997
>>400901
Толсто

Че мамка сеня приготовила?
799 2401023
>>400901
Так-то у пхп одна из топовых документаций, даун. Что к языку, что к Ларавелям. Просто ты её не читал или не понял в силу скудоумия.
800 2401061
>>401023
Продолжаешь оправдывать это кал, потому что за него тебе платят? Глупо
801 2401080
>>401061
Что глупо, шиз? Работать за деньги? А может срать на пхп в треде про пхп глупо?
802 2401189
>>401023
Кстати поддвачну, у пыхи топ документация среди всех языков, на которых я работал. У симфони неоч, конечно, но её достаточно по крайней мере.
803 2401227
>>401061
Не кормите зеленого.
804 2401272
Мне 39 лет, возможно ли с нуля изучив php найти работу?

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

Я знаю о чём говорю, потому что сам ищу уже 3 года работу, мне 36. Я не с нуля, я сайты делал всю жизнь на фрилансе (на php и js). Сейчас сайты на фрилансе готовы делать за 500 рублей + отзыв, масса желающих, это и выпускники курсов, и выпускники вузов без опыта, и такие как я, кто раньше на этом пытался заработать на жизнь.

Сейчас клиентов на сайты поубивилось, этому есть целый ряд причин:
мелкие/средние сайты в целом сдают позиции на фоне Youtube, Instagram и т.д.
многие отрасли заняли крупные игроки (напр взять вакансии - если раньше были сайты с вакансиями в каждом городе, то сегодня это несколько крупных федеральных игроков, если взять интернет-магазины - то сейчас всё подминают под себя федеральные площадки, имеющие федеральную логистическую сеть, где вам проще стать их партнёром и продавать всё с их площадки, т.к. весь народ тусуется там, это и озон, и вайлдбериз и т.д., в сша ранее всё аналогично было до тех пор, пока не остался один амазон и walmart и так во всех сферах)
всю остальную мелочевку под себя взяли wix'ы и прочие конструкторы сайтов, где все сами себе лепят сайты либо заказывают слепить что-нибудь на этих площадках фрилансеров, а это, как я уже писал, 500 рублей + отзыв и 2 дня работы (но это надо ещё конкурс выиграть на эту работу, т.к. желающих попотеть за эти деньги немеряно).

Так что на фрилансе не от хорошей жизни, а от того, что на работу никого не берут. Моя ошибка была в том, что я вовремя не ушёл из этой отрасли в более перспективную, нужно было уходить либо с PHP, либо с сайтостроения (пытаться устраиваться в финтех джуном лет 10 назад, пока ещё это было возможно, ибо в сайтостроении как программист не прогрессируешь, наоборот - деградируешь, стек технологий устаревает), либо вообще из IT. Меня не берут из-за отсутсвия опыта работы в команде и опыта коммерческой разработки на том или ином фреймворке. Я бы и рад получить этот опыт, но негде. Работодатели дообучать старичков не готовы. Если вам за 30, вы не будете сидеть сутки решать ненужную вам задачку из спортивного интереса (а в 20 я с удовольствием сам это регулярно проделывал).

Джунам без знания готового стека компании двери сейчас везде закрыты, если только по знакомству. Там, где вы в вакансиях видите джун, по факту на собесе будут спрашивать за миддла. Т.е. ООП, паттерны проектирования, GIT, работа в команде, опыт работы с фреймворком X, будут смотреть, можно ли сразу вам будет кинуть задачу и ждать результат, не контролируя каждый шаг. Т.е. им нужен готовый человек, которого не нужно обучать, на это сейчас работодатели уже не идут, ибо нет надобности. Конкурс - по 100 человек на одну вакансию джуна. Из 100 точно найдётся тот, кто уже работал с их стеком в другой конторе, нет смысла кого-то обучать, дураков нет, деньгами работодатели не разбрасываются. А джун сейчас везде указывают лишь для того, чтобы платить по-джуновски. Когда указывают миддл, знайте, что спрашивать будут по знаниям на senior'а, а платить как миддлу.

откуда ветер дует

В интернете есть куча "реальных" историй успешных успешников, вкатившихся в айти, но ответьте себе честно, вы сами то в это (тыц, тыц, тыц) верите? Не чувствуете, чем это всё попахивает? Подумайте, куда побежит добрая половина желающих вкатиться, вдохновившись подобными историями и "честными" комментариями под ними? Не на курсы ли какие-нибудь? Более того, разоблачали уже и кучу таких "вкатышей" и в youtube (да-да, пропаганда не ограничивается текстовыми постами). Сегодня в IT больше всех зарабатывают продавцы лопат. Золота для самих золотоискателей нет.

Подытожим:
Игнорируйте в интернете истории успешных успешников (не важно, посты ли это, или комментарии под ними, или это в youtube "Канал вкатившегося в IT 60 летнего таксиста"), всё, что вам нужно, это мониторинг сайтов вакансий и понимание того, как там всё происходит на самом деле, т.е. немного поэкспериментируйте, не начиная изучать само программирование, прощупайте почву.
Не смотрите на количество самих вакансий. Хрюши отрабатывают свои копейки. Им нужно показывать видимость своей работы. По факту, когда начнёте рассылать отклики, то увидите, что лишь 60% откликов вообще ими открываются (hh показывает, открывали или нет отклик), т.е. почти половину ваших откликов вообще никто не увидит. Но иногда вас могут даже пригласить на собеседование, однако если вы не миддл, то будет пара каких-нибудь вопросов, не имеющих отношение ни к джуну, ни к программированию вообще, и фраза "если что мы вам перезвоним", а хрюша отметит у себя в тетрадке +1 к списку проведённых за день собеседований (при этом за результатом собеседования вы ещё будете бегать неделю, а там как правило про вас уже забывают сразу по его окончании).
Отговариваю ли я вас изучать программирование? Нет, вовсе нет, но подходить к этому вопросу со стороны экстренного поиска нового источника средств к существованию нужно с трезвой головой и пониманием некоторых вещей, упомянутых мной выше. Иначе можно остаться вообще с голой задницей. Программисты низшего звена (высшего - это своего рода управленцы, их много и не нужно, это как в отделке - нужны Равшан, Джамшут и 1 насяльника), коих большинство, сегодня примерно в том же положении, что и таксисты/риелторы. Только в таксомоторку и агентство недвижимости проще устроиться на работу.
804 2401272
Мне 39 лет, возможно ли с нуля изучив php найти работу?

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

Я знаю о чём говорю, потому что сам ищу уже 3 года работу, мне 36. Я не с нуля, я сайты делал всю жизнь на фрилансе (на php и js). Сейчас сайты на фрилансе готовы делать за 500 рублей + отзыв, масса желающих, это и выпускники курсов, и выпускники вузов без опыта, и такие как я, кто раньше на этом пытался заработать на жизнь.

Сейчас клиентов на сайты поубивилось, этому есть целый ряд причин:
мелкие/средние сайты в целом сдают позиции на фоне Youtube, Instagram и т.д.
многие отрасли заняли крупные игроки (напр взять вакансии - если раньше были сайты с вакансиями в каждом городе, то сегодня это несколько крупных федеральных игроков, если взять интернет-магазины - то сейчас всё подминают под себя федеральные площадки, имеющие федеральную логистическую сеть, где вам проще стать их партнёром и продавать всё с их площадки, т.к. весь народ тусуется там, это и озон, и вайлдбериз и т.д., в сша ранее всё аналогично было до тех пор, пока не остался один амазон и walmart и так во всех сферах)
всю остальную мелочевку под себя взяли wix'ы и прочие конструкторы сайтов, где все сами себе лепят сайты либо заказывают слепить что-нибудь на этих площадках фрилансеров, а это, как я уже писал, 500 рублей + отзыв и 2 дня работы (но это надо ещё конкурс выиграть на эту работу, т.к. желающих попотеть за эти деньги немеряно).

Так что на фрилансе не от хорошей жизни, а от того, что на работу никого не берут. Моя ошибка была в том, что я вовремя не ушёл из этой отрасли в более перспективную, нужно было уходить либо с PHP, либо с сайтостроения (пытаться устраиваться в финтех джуном лет 10 назад, пока ещё это было возможно, ибо в сайтостроении как программист не прогрессируешь, наоборот - деградируешь, стек технологий устаревает), либо вообще из IT. Меня не берут из-за отсутсвия опыта работы в команде и опыта коммерческой разработки на том или ином фреймворке. Я бы и рад получить этот опыт, но негде. Работодатели дообучать старичков не готовы. Если вам за 30, вы не будете сидеть сутки решать ненужную вам задачку из спортивного интереса (а в 20 я с удовольствием сам это регулярно проделывал).

Джунам без знания готового стека компании двери сейчас везде закрыты, если только по знакомству. Там, где вы в вакансиях видите джун, по факту на собесе будут спрашивать за миддла. Т.е. ООП, паттерны проектирования, GIT, работа в команде, опыт работы с фреймворком X, будут смотреть, можно ли сразу вам будет кинуть задачу и ждать результат, не контролируя каждый шаг. Т.е. им нужен готовый человек, которого не нужно обучать, на это сейчас работодатели уже не идут, ибо нет надобности. Конкурс - по 100 человек на одну вакансию джуна. Из 100 точно найдётся тот, кто уже работал с их стеком в другой конторе, нет смысла кого-то обучать, дураков нет, деньгами работодатели не разбрасываются. А джун сейчас везде указывают лишь для того, чтобы платить по-джуновски. Когда указывают миддл, знайте, что спрашивать будут по знаниям на senior'а, а платить как миддлу.

откуда ветер дует

В интернете есть куча "реальных" историй успешных успешников, вкатившихся в айти, но ответьте себе честно, вы сами то в это (тыц, тыц, тыц) верите? Не чувствуете, чем это всё попахивает? Подумайте, куда побежит добрая половина желающих вкатиться, вдохновившись подобными историями и "честными" комментариями под ними? Не на курсы ли какие-нибудь? Более того, разоблачали уже и кучу таких "вкатышей" и в youtube (да-да, пропаганда не ограничивается текстовыми постами). Сегодня в IT больше всех зарабатывают продавцы лопат. Золота для самих золотоискателей нет.

Подытожим:
Игнорируйте в интернете истории успешных успешников (не важно, посты ли это, или комментарии под ними, или это в youtube "Канал вкатившегося в IT 60 летнего таксиста"), всё, что вам нужно, это мониторинг сайтов вакансий и понимание того, как там всё происходит на самом деле, т.е. немного поэкспериментируйте, не начиная изучать само программирование, прощупайте почву.
Не смотрите на количество самих вакансий. Хрюши отрабатывают свои копейки. Им нужно показывать видимость своей работы. По факту, когда начнёте рассылать отклики, то увидите, что лишь 60% откликов вообще ими открываются (hh показывает, открывали или нет отклик), т.е. почти половину ваших откликов вообще никто не увидит. Но иногда вас могут даже пригласить на собеседование, однако если вы не миддл, то будет пара каких-нибудь вопросов, не имеющих отношение ни к джуну, ни к программированию вообще, и фраза "если что мы вам перезвоним", а хрюша отметит у себя в тетрадке +1 к списку проведённых за день собеседований (при этом за результатом собеседования вы ещё будете бегать неделю, а там как правило про вас уже забывают сразу по его окончании).
Отговариваю ли я вас изучать программирование? Нет, вовсе нет, но подходить к этому вопросу со стороны экстренного поиска нового источника средств к существованию нужно с трезвой головой и пониманием некоторых вещей, упомянутых мной выше. Иначе можно остаться вообще с голой задницей. Программисты низшего звена (высшего - это своего рода управленцы, их много и не нужно, это как в отделке - нужны Равшан, Джамшут и 1 насяльника), коих большинство, сегодня примерно в том же положении, что и таксисты/риелторы. Только в таксомоторку и агентство недвижимости проще устроиться на работу.
805 2401324
>>401272
Так душно пишешь поговорил с пастой.
И еще с нотокой заговора, уныло. Фриланс блядь, я бы на твоём месте жопу а офис понес если деньги нужны.
Конечно таксист или охранник с курсов нехуя не получит, английский сам по себе для простых людей сложен, тем более технический.
Сайт за 500р? Одностраничный лендинг? Даже лендинг никто не станет делать что за пиздобольство

Короч вали нахуй, и забери ссобой свою пасту
806 2401391
>>400901
Согласен, к битрикс фреймворку доки нет нормальной и не будет никогда.
807 2401443
>>401189

>симфони неоч


У Симфоны да. У Ларки годная - там тоже сайт целый для этого. Сайт и сообщество, да не одно. И это не включая обычного погуглить где на любой вопрос ответ найдётся.
808 2401467
>>401391
но Битрикс это цмс! или нет?
809 2401484
>>401467
Некоторые поехавшие его фреймворком называют. Как и Вордпресс иногда лольно почитай статейки с самоподдувом где они пытаются натянуть MVC на ВП.
Привыкай.
810 2401592
>>401272

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

Ну и знание ООП или git это скорее требования к джуниору.

Обучиться можно и самому.
811 2402115
>>399229
В идеале, все языки начинаются с C (на котором все остальные языки и написаны).

Хорошая новость: синтаксис РНР +- похож на С++, так что это не самый плохой язык для обучения.
14663933427080.jpg138 Кб, 1000x700
812 2402117
>>400002
если расширить твои сомнения:

есть пидорские/санкционные/вендорские/частные технологии,

а есть святой Open Source.

Выбор очевиден какбэ.
813 2402118
>>402115
Кстати, хоть кто-нибудь работал с управлением памятью на РНР?

Да, есть и такое, и в байтоёбские конторы типа VK это активно требуют.
814 2402167
>>402117

>есть пидорские/санкционные/вендорские/частные технологии,


Это Битрикс?

>а есть святой Open Source.


А это Laravel?

Если ты за Ларавель, то всё, твёрдо и чётко бросаю Битрикс. Осенью после свадьбы друга поеду в какой-нибудь рандом-город работать на святом Open Source Framework. Спасибо за правильное мнение, Анон. Родина тебя забудет.

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

А пока придётся работать сборщиком ягод в лесу... Но это и хорошо. Лето всё-таки, надо успеть надышаться свежим воздухом.
815 2402212
>>402167

>Спасибо за правильное мнение, Анон


Велкам. Давай, продышись там.
А зачем ехать? Можно ведь удалённо.

> зачем эта компания перешла с лары на битрикс


Заказчики редко имеют своё мнение.

+ мб предыдущую версию сделали так хуёво или сложно или дорого, что даже битрикс показался выходом
image.png12 Кб, 472x120
816 2402227
Господа, после фреймворка что лучше изучить? из вариантов js или WP
js знаю на уровне скопировать код из документации и натянуть его на свои нужды, ну и немного промисы.
Цель трудоустроится.
В моем представлении js будет требоваться на галере, а WP для фриланса, так ли это?
И сильно ли сложен wp по сравнению с фреймворками(мой-yii2)
817 2402662
>>402227
Ну как сказать, хочешь норм функционал сайта изучай js.
image.png526 Кб, 1196x670
818 2402689
>>402227

>В моем представлении js будет требоваться на галере, а WP для фриланса, так ли это?


Бля, пчёл, ты бы хоть почитал, что это и для чего используется, для начала. Уж представляю, что ты там на yii2 клепаешь..
819 2402796
>>402689
Я прекрасно понимаю что и куда.
Я спрашивал конкретно про приоритеты.
820 2404047
Где учить ларавель ?
821 2404135
>>404047
В Израиле.
822 2404222
Какого уровня тестовое задание для стажеров может быть по пыхе?
823 2404237
>>404222
отпиздить фронтендера
824 2404266
>>404237
Скорее получить пизды от фронтендера за уебищную структуру ответа метода.
825 2404673
Решил перекатиться по-быстрому из ts/nestjs в php/laravel. Реально ли за 2 недельки осуществить перекат? Есть понимание всяких там ооп, grasp, solid. Есть знания sql, postgresql, typeorm. Планирую по-быстрому освоить синтаксис пхп за первую недельку, а за вторую пробежаться по документации и переписать свой пет проджект на ларавел. Достаточно ли этого, чтобы начать рассылать резюме на php junior вакансии?
826 2404767
>>404673
Какие могут быть причины такого переката? Я вот думаю в обратную сторону перекатиться
827 2405383
>>404767
внатури,
я наоборот хочу перекат в ts/vue с пихи, а ты тут такой человекнаоборот
828 2405475
>>405383
Так laravel теперь с VUE в комплекте, нахуй на js фреймворки перекатываться то, нового пердолинга с js хочеться?

Не понимат

Лучше тогда на go пиздовать

А чем я неправа?
829 2405623
>>405475

>laravel теперь с VUE в комплекте


Ну да, на вуе же свсем жс не надо знать что бы формошлепать.
830 2405878
>>405623
ну это то понятно что VUE на JS, но если менять структуру вообще, (работу с базами данных) есть вариант либо на nodejs перейти и подобные JS фреймворки
либо на GO, слышала что с PHP именно на него переходят

он жи современен типа многопоточен что то такое
831 2406033
>>405475

>laravel теперь с VUE в комплекте


Тебе необязательно его ставить - старый добрый Блейд никуда оттуда не девался. В целом не очень понимаю нынешнюю политику Лары, куда стремятся понапихать всего побольше и помоднее - однажды оно их не туда заведёт.
832 2406261
>>405475
я смотрю на оферы (европка)
не вижу нихуя о ларавел и вю

а вот вю + тс очень много
+ нюкс

и зп очень даже

да и мне просто заходит вюха очень
833 2406275
>>406261
тс это typescript? нюкс это что такое?
вюха блядь. зачем так разговариваеш?
834 2406290
>>400406
Прорешай лучше это сначала
https://ru.hexlet.io/courses/php-basics
835 2406343
>>406275

>нюкс


крудошлеп, пора учится РЕАЛЬНОЙ разработке. Nuxt это.
836 2406347
>>406261
Ну так да, зачем лишнее звено в виде PHP, когда условный Next/Nuxt/Gatsby/Remix и что там еще есть справляются точно также, если не лучше?
837 2406381
>>406347

>лишнее звено в виде PHP



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

Понимаешь, как бы это по научному сказать, PHP это пенитрация, временами даже двойная пенитрация. А джс это полувялый, который суют на полпалки, смекаешь?
838 2406387
>>406381

>Врятле жс будет хорошо работать с базами данных


С каких пор с БД работает язык, а не ORM? И нода при таком сценарии отработает быстрее, чем пыха.

>для глюченных игрух на юнити


С каких пор юнити понимает жс?

> да кнопочки анимировать


жс не анимирует кнопочки, анимирует кнопочки DOM api
839 2406389
>>406381

>Врятле жс будет хорошо работать с базами данных


Ну да, то ли дело пыха.
мимо фанат LINQ в C#
840 2406416
>>406387

>С каких пор юнити понимает жс?


Игры на Unity3d пишутся в связке C# +js.
>>406389

>фанат LINQ в C#


Как веб вообще связан с твоим C# муха навозная
841 2406430
>>406416

>Игры на Unity3d пишутся в связке C# +js.


Нет, там свой говноязык, похожий на js, но им не являющийся.

>Как веб вообще связан с твоим C#


Речь шла про БД, не про web. По работе с БД js и PHP одинаково посасывают у C#. js чуть посасывает глубже
842 2406446
>>406347
Глянул Remix, это они в мире js изобрели фуллстек фреймворки через 10 лет после того, как они померли?
843 2407024
Есть ли адекватные PHP программисты по типу жс ниндзи только по PHP?
844 2407076
>>407024

>жснинзя


>адекватный


>смотреть видео


>по js


>и php



Что тебе не хватает книг и тренажеров? Статей там. Видео же как интро можно воспринимать, но на серьезных щщах смотреть видосы по php это грех вообще какой-то, лучше с нуля что нибудь самому высирать и пользоваться официальной документацией, и гуглить по вопросам на stackoverflow

Или купить комплексный курс по языку с тренажерами и теорией
845 2407102
>>407076
Мне кажется, что людям тяжело переходить от теории к практике, я сам такой. Вот эти видео, где кто-то что-то пишет, как бы являются промежуточным звеном.
846 2407118
>>406446
10 лет назад они померли потому что появились рякты и вуи, сейчас вновь оживают но уже на фундаменте ряктов и вуев.
847 2407225
>>407076

>Что тебе не хватает книг и тренажеров? Статей там.


Порекомендуй книги и статьи, тренажеры, пожалуйста.
848 2407250
>>407118
Через 10 лет изобретут суперреакт и супервуй, фуллстак фреймворки опять сдохнут, а через 20 лет придумают (((новые))) фуллстак фреймворки на основе суперреакта и супервуя?
849 2407325
>>407250
Да, потом колесо сансары даст новый оборот и все пойдет по новой
Без названия.jpg6 Кб, 190x265
850 2407827
>>407225
Курсы/тренажеры по PHP:
ну во первых курс о ОПа, а шапке треда
https://ru.hexlet.io/courses/php-basics
https://htmlacademy.ru/profession/backender-solo (платный)

Статьи:
https://habr.com/ru/hub/webdev/
https://habr.com/ru/hub/php/
https://habr.com/ru/company/skyeng/blog/666626 (книги)

Документация:
https://www.php.net/manual/ru/
https://laravel.su/docs/8.x/installation

(по JS ахуенные тренажеры, книгу можно скачать на трекере https://learn.javascript.ru/intro#itogo?map )

Возможно в интернете есть еще тренажеры, нужно просто искать
851 2408142
>>407827
Спасибо! :)
852 2409410
>>406347

Как ты можешь сравнивать JS с PHP, если в JS все асинхронное и тебе придется писать await через строчку, а в PHP ты просто пишешь бизнес-логику и не мучаешься?

Если уж ты хочешь сравнивать, давай сравнивать PHP и Python, например.

>>406387

> И нода при таком сценарии отработает быстрее, чем пыха.



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

> С каких пор с БД работает язык, а не ORM?



А в JS вообще есть что-то наподобие Доктрины (Data Mapper)? А то я вижу, как разработчики React и Redux передают туда-сюда огромные нетипизированные массивы и мне вспоминается Друпал лет так 10 назад, когда там тоже все было на массивах.
853 2409434
Как на линуксе удобней всего локально запускать пхп и sql ? Например на винде через опен сервер в два клика можно развернуть, есть в линухе аналог?
855 2409493
>>406387

>С каких пор с БД работает язык, а не ORM?


Гуглим что такое ORM и на чём оно пишется. это абстракция, написанная, внезапно, с помощью яп

>И нода при таком сценарии отработает быстрее, чем пыха.


Мнение неграмотного вкатунца не очень важно.
856 2410026
>>407024
Елисеев.
857 2410189
Сап двач, мне надо отправить 45000 записей в базу данных(просто одно слово, всегда разное ), как это сделать максимально быстро? Я делал стандартно INSERTом и получается пиздец как медленно, какие настройки в бд (для phpmyadmin) поставить чтобы ускорить выполнение?
858 2410377
>>410189

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

Также, есть статья в мануале:

https://dev.mysql.com/doc/refman/8.0/en/optimizing-innodb-bulk-data-loading.html
https://dev.mysql.com/doc/refman/8.0/en/insert-optimization.html
859 2410424
>>410377
у меня вообще все операции с бд проходят как будто медленнее чем должны,намного медленнее (мб дело в опенсервере)
изображение.png71 Кб, 778x474
860 2410803
Аноны, что это за хуйня, на штор ругается? Фетч пробовал прожимать.
861 2411173
>>407024

>Есть ли адекватные PHP программисты по типу жс ниндзи только по PHP?


вообще никогда не видел полноценный блог по пхп/беку
но запомнились эти три:
1. Дмитрий Елисеев - наверное годная вода по ооп и архитектуре(не для начинающих), вроде у него основной контент платный
2. Дмитрий Афанасьев - разбор ларавел
3. Виктор Зинченко - для новичка нормальный курс пхп старт
862 2411218
Где есть инфа как работает mysql ? Не в плане создания баз и прочего, а именно его принцип работы на компьютере, как запускается, как делает запросы и хранит свои базы и прочее, в гугле только что такое СУБД и как джойны селекты делать, даже в книгах не нашел
photo2016-05-2300-28-42.jpg67 Кб, 503x600
863 2411242
Получил сегодня оффер на 360К гросс, стек: PHP/MySQL.

Пишу, чтобы сказать: на РНР есть жизнь (хотя меня щас обосрут и скажут, что это копейки, на что отвечу, что я особо и не старался).

Так что, сомневающиеся, не сдавайтесь, есть свет в конце 10 000 часов тоннеля.
image.png1,6 Мб, 908x1280
864 2411324
>>411242
немного добавлю, что это включало linux, devops, jira, git, rabbitmq, bootstrap, js, jquery, angular, + fluent/upper-intermediate tech english + some soft & management skills
14348797347.jpg18 Кб, 448x256
865 2411338
866 2411339
>>411338
щтотокое?
867 2411756
>>411218

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

> как запускается



Самый простой способ - просто открыть консоль и вручную запустить программу в консоли (это называется foreground mode). Но обычно вручную ее не запускают, а настраивают автоматический запуск при загрузке ОС. В Линукс это называется "демон" (daemon) и реализуется, например, через systemd, в Windows это называется "служба" (service). То есть при установке на Windows MySQL добавляет службу, и таким образом, запускается когда загружается ОС.

Подробнее гугли про службы Windows или про демоны в Linux.

> хранит свои базы



Базы данных хранятся в файлах, в Linux они расположены в /var/lib/mysql, в Windows по моему в C:\ProgramData\MySQL\. Есть два варианта - либо каждая таблица хранится в отдельном файле, либо все таблицы хранятся в одном огромном файле.

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

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

Общая архитектура InnoDB: https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html

Подробно про формат хранения данных на диске: https://dev.mysql.com/doc/refman/8.0/en/innodb-on-disk-structures.html

> как делает запросы



Запрос парсится, строится план запроса (какие таблицы или индексы читать, что искать) и выполняется.

Если ты хочешь лучше разобраться, как работают СУБД, предлагаю попробовать написать свою мини-СУБД. Придумать формат для таблиц и индексов, и написать код, который будет выполнять запросы.

Парсить SQL-запросы относительно сложно, потому тебе прощу будет передавать запросы в виде массивов вроде:

[
'type' => 'select',
'from' => 'some_table',
'where' => ['x', '=', 10]
]

Если есть какие-то еще вопросы, задавай.
867 2411756
>>411218

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

> как запускается



Самый простой способ - просто открыть консоль и вручную запустить программу в консоли (это называется foreground mode). Но обычно вручную ее не запускают, а настраивают автоматический запуск при загрузке ОС. В Линукс это называется "демон" (daemon) и реализуется, например, через systemd, в Windows это называется "служба" (service). То есть при установке на Windows MySQL добавляет службу, и таким образом, запускается когда загружается ОС.

Подробнее гугли про службы Windows или про демоны в Linux.

> хранит свои базы



Базы данных хранятся в файлах, в Linux они расположены в /var/lib/mysql, в Windows по моему в C:\ProgramData\MySQL\. Есть два варианта - либо каждая таблица хранится в отдельном файле, либо все таблицы хранятся в одном огромном файле.

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

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

Общая архитектура InnoDB: https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html

Подробно про формат хранения данных на диске: https://dev.mysql.com/doc/refman/8.0/en/innodb-on-disk-structures.html

> как делает запросы



Запрос парсится, строится план запроса (какие таблицы или индексы читать, что искать) и выполняется.

Если ты хочешь лучше разобраться, как работают СУБД, предлагаю попробовать написать свою мини-СУБД. Придумать формат для таблиц и индексов, и написать код, который будет выполнять запросы.

Парсить SQL-запросы относительно сложно, потому тебе прощу будет передавать запросы в виде массивов вроде:

[
'type' => 'select',
'from' => 'some_table',
'where' => ['x', '=', 10]
]

Если есть какие-то еще вопросы, задавай.
868 2411934
>>411756
Я не он, но чем именно являются индексы "физически", что они позволяют ускорять поиск?
869 2411975
>>411934
Могут быть B-деревом, хеш-таблицами или другими хитровыебанными видами деревьев, на хабре есть серия статей про индексы PostgreSQL правда, но не суть, у mysql индексы попроще ощутимо
image.png38 Кб, 1101x831
870 2412065
А как правильно сохранять значения в полях динамически созданной формы?
Если бы форма была статическая, я бы просто на oninput у каждого поля повесил функцию, которая запишет данные в LocalStorage.

Можно повесить один обработчик на форму, чтобы отслеживал значения каждого поля и сохранял их в LocalStorage, а потом, при обновлении страницы, генерировать форму на основе данных из хранилища и заполнять соответствующими значениями?
871 2412149
>>412065
можно, мы тебе разрешаем всем двачом
1658430127394.mp42,3 Мб, mp4,
406x720, 0:28
872 2412309
>>412149
Это будет валидным, а главное рабочим решением?
873 2412442
>>412309
если сделаешь рабочим -- будет валидным
874 2412444
>>412442
>>411242
это я, кстати
875 2412471
>>411934

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

Теперь представь, что мы взяли из таблицы все email и выписали их в список по алфавиту, и к каждому приписали id строки, к которой он относится:

aa:jTaaANUSexawyYmplePUNCTUMcn"som, 243
a=|\abANUSexDqmamplePUNCTUMcohCnm, 154
...
zx6`+yANUSexamz:$plePUNCTUMcoMUim, 90654

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

То есть, на каждом шаге мы уменьшаем список возможных вариантов в 2 раза. За 20 шагов (log2 от миллиона) мы можем найти любой email или понять, что такого в списке нет.

Более того, так как индекс содержит только email, он меньше, чем таблица и может быть даже поместится в память целиком, что еще сильнее ускорит поиск по нему, так как диск, даже SSD, намного медленнее, чем память.

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

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

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

Хеш-таблицы тоже можно использовать для индекса, но они позволяют искать только по равенству (WHERE x = 10), а деревья позволяют искать так же по условиям больше/меньше, WHERE x > 10, находить mIN(x) и MAX(x) и быстро брать N первых/N последних записей.
875 2412471
>>411934

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

Теперь представь, что мы взяли из таблицы все email и выписали их в список по алфавиту, и к каждому приписали id строки, к которой он относится:

aa:jTaaANUSexawyYmplePUNCTUMcn"som, 243
a=|\abANUSexDqmamplePUNCTUMcohCnm, 154
...
zx6`+yANUSexamz:$plePUNCTUMcoMUim, 90654

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

То есть, на каждом шаге мы уменьшаем список возможных вариантов в 2 раза. За 20 шагов (log2 от миллиона) мы можем найти любой email или понять, что такого в списке нет.

Более того, так как индекс содержит только email, он меньше, чем таблица и может быть даже поместится в память целиком, что еще сильнее ускорит поиск по нему, так как диск, даже SSD, намного медленнее, чем память.

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

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

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

Хеш-таблицы тоже можно использовать для индекса, но они позволяют искать только по равенству (WHERE x = 10), а деревья позволяют искать так же по условиям больше/меньше, WHERE x > 10, находить mIN(x) и MAX(x) и быстро брать N первых/N последних записей.
876 2412477
>>412065

Да, лучше с помощью addEventListener повесить обработчик. И желательно ограничить частоту его срабатывания, например, не чаще чем раз в 10-15 секунд, а то у тебя на каждое нажатие клавиши будет выполняться код и писать данные на диск. Это может замедлить работу браузера.

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

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

Если пользователь не сохранил тест (это может быть только если у него упала вкладка или браузер), и снова заходит на создание теста, и есть бекап, то можно вывести вопрос: вы не сохранили тест, восстановить данные или нет? Если нет - то бекап удаляется.

Тут, правда, есть проблема: что, если пользователь откроет несколько вкладок и создает несколько тестов? Не затрут ли бекапы друг друга?

Это можно решить таким образом: при загрузке страницы мы генерируем случайный id и сохраняем бекап с этим id. При восстановлении мы просто берем первый сохраненный id и восстанавливаем из него. После того, как пользователь успешно его сохранит, восстанавливаем второй бекап итд.
877 2412643
>>411756
А индексы делаются автоматически, или их нужно вручную создавать?

А обращаться к ним через специальную комманду нужно?

мимо-другой-анон
878 2412798
>>412643

Индексы создаются вручную. Ты можешь при создании таблицы в CREATE TABLE указать их (самый частый пример - когда ты указываешь PRIMARY KEY, KEY это и есть индекс) либо добавить их позже с помощью CREATE INDEX:

https://dev.mysql.com/doc/refman/8.0/en/create-index.html

Индексы не надо указывать в запросе, так как считается, что планировщик MySQL лучше понимает, когда их надо использовать, а когда нет. Но можно указать, чтобы они использовались /не использовались с помощью USE INDEX или IGNORE INDEX: https://dev.mysql.com/doc/refman/8.0/en/index-hints.html

Посмотреть, какие индексы используются в запросе, можно приписав перед ним EXPLAIN или EXPLAIN ANALYZE (это дает информацию в другом формате), например,

EXPLAIN SELECT a FROM b WHERE c = 10;
EXPLAIN ANALYZE SELECT a FROM b WHERE c = 10;

Мануал: https://dev.mysql.com/doc/refman/8.0/en/explain.html
879 2412808
>>412643

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

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

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

WHERE a = 1 AND b = 2
WHERE a = 1
WHERE a =1 AND b > 2
WHERE a > 1

Но он не позволяет ускорить поиск по WHERE b = 1 (подумай, почему, если хочешь разобраться).

Типичный пример: у нас есть таблица лайков, а ней 100М записей и мы хотим быстро узнать: ставил ли пользователь 123 лайк пользователю 456? Запрос будет вида

WHERE user_id = 123 AND liked_user_id = 456

и тут составной индекс по (user_id, liked_user_id) позволит сделать поиск очень быстро. Также, такой индекс позволит быстро узнать, кому пользователь ставил лайки. Но не позволит узнать, кто ставил пользователю лайки.

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

WHERE a + b = 5
или WHERE LOWER(username) = 'ivan'

Обычный индекс по колонкам a и b тут не поможет (подумай, почему). А функциональный индекс по выражению a+ b или по LOWER(username) поможет.

Мануал: https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts
879 2412808
>>412643

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

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

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

WHERE a = 1 AND b = 2
WHERE a = 1
WHERE a =1 AND b > 2
WHERE a > 1

Но он не позволяет ускорить поиск по WHERE b = 1 (подумай, почему, если хочешь разобраться).

Типичный пример: у нас есть таблица лайков, а ней 100М записей и мы хотим быстро узнать: ставил ли пользователь 123 лайк пользователю 456? Запрос будет вида

WHERE user_id = 123 AND liked_user_id = 456

и тут составной индекс по (user_id, liked_user_id) позволит сделать поиск очень быстро. Также, такой индекс позволит быстро узнать, кому пользователь ставил лайки. Но не позволит узнать, кто ставил пользователю лайки.

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

WHERE a + b = 5
или WHERE LOWER(username) = 'ivan'

Обычный индекс по колонкам a и b тут не поможет (подумай, почему). А функциональный индекс по выражению a+ b или по LOWER(username) поможет.

Мануал: https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts
880 2413061
Как сгенерить рандомный пароль/соль? random_bytes нечитаемую хрень вываливает, и у меня функция crypt тоже нечитаемые символы генерит.
881 2413169
>>412477

> не чаще чем раз в 10-15 секунд


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

>Если да, то удаляем бекап.


Нет гарантий, что ты успеешь его удалить до того, как браузер убьет вкладку.
>>412065
Лучший вариант - сохранять на сервере раз в N секунд и отдать юзеру. Используя уникальный ключ при этом, да.
883 2413326
В JS я использую eslint и расширение для vscode, которое при сохранении файла исправляет все ошибки (добавляет точки с запятой в конце, двойные кавычки заменяет на одинарные, исправляет отступы, удаляет лишние переносы строк, и т.д.). Как добиться подобного в PHP?
884 2413394
>>413170

>v+php+takogo+net


А жаль.
885 2413476
А шо там по C10k у php? Как решается проблема?
886 2413522
Сап. У меня есть БД с таблицей пользователей, у которых различные столбцы (имя, фамилия, возраст и т.д.), после определенной выборки через SELECT... WHERE ... осталось, допустим, 4 пользователя. Каким образом я могу создать 4 уникальных JSON(внутри которых key - столбец, value - значение столбца) и передать в XHR, чтобы вывести этих 4-х пользователей с данными?
887 2413628
>>413394
Криптографический генератор присутствует, большего не нужно.
>>413326
Т ыбы хоть 30 секунд на гугол потратил. Аналог prettier - Intelliphense, аналог еслинта - noverify есть другие линтеры
888 2413631
>>413061

Ты правильно делаешь, что используешь криптографическую функцию, а не предсказуемый генератор вроде mt_rand.

Ты можешь использовать random_int и преобразовывать числа в символы с помощью массива:

$chars = mb_str_split("abcdefg....789");
$char = $chars[random_int(...)];

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

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

Если поделить количество попыток подбора на скорость перебора, то ты получишь сколько времени в среднем нужно на подбор пароля.
889 2413636
>>413169

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

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



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

Сохранять на сервере хорошо, но требует постоянное и надежное соединение с Интернетом. И безлимитный трафик. Если эти условия выполняются, то да, можно сохранять данные в тест в статусе "черновик", например.
890 2413642
>>413326

Есть php-cs-fixer, он не подходит?

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

>>413476

Так же, как и в других языках. На практике, правда это не очень нужно, так как есть другие языки вроде Го (а для бизнес-логики лучше PHP).

>>413522

С помощью json_encode?
891 2413668
>>413631
Спасибо за уделённое внимание, но мне нужна была простая автогенерация. Функцию-то я влепил, как в гуглах... в код, но делать это хочется для в можно меньшем количестве случаев: и чтобы код не раздувался, и чтобы силы на это лишние не тратились.
08n-02954jg948.jpeg7 Кб, 225x225
892 2413740
На ровном месте!

password: 1234512345
salt: QWERTYqwerty
crypt: $1$QWERTYqw$Z8oTXgHYxGQxpq6hSwz8h.
execute: useradd --no-create-home --password "$1$QWERTYqw$Z8oTXgHYxGQxpq6hSwz8h." cow
https://pastebin.com/x0Mb3T06

Не логинется. А в shadow следующее -
cow:.:19196:0:99999:7:::
Иногда что-то появляется. Но эффект тот же.
893 2413791
>>412798
>>412808
спасибо за подробный ответ, ананачос.
894 2413852
>>413740

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

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

Также, посмотри, нет ли в параметрах команды спецсимволов, которые надо экранировать. Например, знак доллара в bash это спецсимвол.
896 2413859
>>413740

Ты можешь проверить, правильно ли bash воспринимает команду, добавив перед ней echo:

echo useradd ...

И посмотреть, что выведется.
HD-wallpaper-hatsune-miku-grotesque-red-luminos-hatsune-mik[...].jpg118 Кб, 800x741
897 2413889
ВОПРОС НА МИЛЛИОН

На российском рынке вакансий, больше котируется Symfony или Laravel? По вашим наблюдениям?

hh-вакансий
symfony-290
laravel-389

Крупные фирмы на которые я натыкаюсь, почему-то symfony используют. Он мне НЕ нравится, все начиная от логотипа/названия коверканного, и вообще кажется устаревшим. Но если деняки будут платить, и других аналогов в РФ нет - то буду его выдрачивать. Или стоит держать курс на Laravel?
898 2413921
>>413889

> Он мне НЕ нравится, все начиная от логотипа/названия коверканного, и вообще кажется устаревшим.


Оу, ты тоже оцениваешь "технологию" по логотипу?
899 2413962
>>413889
Что это за компании?
900 2413965
>>411756
Оу, спасибо анончик за такой развернутый ответ
901 2413980
>>413921
ну все с друг другом связано, я суеверный дизайнер-анальник.

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

>>413962
незнаю, рандомно выбираю с понравившихся сайтов, с вакансий на hh. Просто смотрю стек студий, и часто вижу почему то блядь symfony.
lamoda, creonit.ru - последние на которые я натыкался.
902 2413989
>>413857

>надо экранировать


Кавычки!!
--password '%s'"
Ты прав, стирались доллары и творилась дичь...
903 2414028
>>413889
У меня в мухосрани yii требуют (ну и цмс в довесок), причем не 2й, что там вообще может быть на нем?
904 2414057
>>413889

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

Ты бы изучил лучше, например, насколько удобно писать автоматизированные тесты под оба фреймворка. Насколько удобны их ORM. И тд.
905 2414058
>>414028

Устаревший код. Но, справедливости ради, Yii не выглядит сложным фреймворком, наверно в нем можно за день-два разобраться.
906 2414063
>>414028

>что там вообще может быть на нем?


Вонючее легаси. Если за эту работу предлагают меньше 150к, то шли нахуй - пусть сами в своём говне ковыряются.
907 2414079
>>414058
Всегда какие-нибудь подводные вылазят.
>>414063
Какие 150к в мухосрани, лол?
908 2414183
>>414079

>Какие 150к в мухосрани, лол?


Такие, пчел. Если у них там на Йи первом всё крутится, значит проект выстрелил и деньги есть. И сам проект на месте будет сложным, нахуеверченным и, скорее всего, засратым за годы разработки. В дополнение к этому обвешанным всяким разным софтом.
Вообще похуй уже мухсрань там или нет. На легаси за маленькие деньги не ходят. Вообще в разработку за маленькими деньгами не ходят иначе просто в ДС яндекс-курой устроиться и не ебать мозг.
909 2414324
>>414183
Да, охуенно, просто всем переехать в ДС и в хуй не дуть.
910 2414341
>>414324
Вопрос не в переезде, а в том, что ты хуй человека найдёшь задёшево который в этом будет сидеть и копаться. Джуна ты не посадишь на легаси - он обосрётся, мидл тоже не дурак задёшево работать.
Ну и да - причём тут мухосрань вообще? ИТ-продукты обычно работают в глобальном вебе и деньги отовсюду идут, и их ДС, и из ДС2, и из остальных мухосраней. Просто не будь долбоёбом и не вписывайся за копейки под предлогом классического кабанского пиздежа "мы бедные несчастные из мухосрани".
911 2414342
>>414341

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


Мне один тоже что-то подобное любил втирать, а в ВК у него что не фотачка, то пальмы вокруг. На дураков рассчитано же.
912 2414562
Как раз сегодня видел ваку на Yii с легаси. Сразу пишут, что большая кодовая база, не берут никого ниже миддла, обещают 250к.
Про мухосрани ни слова.
913 2414687
>>414562

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


Ты не журналист случайно? Формулировки пиздец, конечно.
914 2414705
Господа аноны, обращаюсь к вам с вопросом вкатывания.

Учил iOS разработку на свифте и все было неплохо, но тут произошёл хохлокризис и меня переполняют сомнения по поводу мобилок (малое количество джун/стажер вакансий и страх, что Тим Кук насрёт хуйни ), думаю сменить вектор обучение на бэк с пыхой.

Правильно ли я поступаю или лучше не рыпаться и дальше сидеть на мобилках?
915 2414753
>>414562
Не, там было как раз на джуна, и к юии был 1-с битрикс и битрикс фреймворк(в чем вообще разница?) в довесок.
16544280734740.jpg83 Кб, 640x640
916 2414757
Плиз, хелп. Не рендерится дочерний шаблон в связке yii2+twig. Поставил последнюю версию Yii2 и сверху накатил плагин yiisoft/yii2-twig версии 2.4

Задал вопрос на тостере, но никто тоже не знает. Тут читать удобнее -> https://qna.habr.com/q/1180564

Что я делаю: создаю материнский шаблон layouts/main.twig
<!doctype html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<h1>Главная страница</h1>
{% block content %}{% endblock %}
</body>
</html>

Создаю дочерний шаблон home/index.twig и наследуюсь от главного
{% extends "@app/views/layouts/main.twig" %}

{% block content %}
Дочерняя страница
{% endblock %}

Из HomeController'a рендерю дочерний шаблон, но в браузер выводится только материнский.
Все пути правильные, потому что любое изменение в путях приводит к ошибке "шаблон не найден".

Что я упускаю? Вроде бы с точки зрения синтаксиса все верно. Элементарные примеры же.
16544280734740.jpg83 Кб, 640x640
916 2414757
Плиз, хелп. Не рендерится дочерний шаблон в связке yii2+twig. Поставил последнюю версию Yii2 и сверху накатил плагин yiisoft/yii2-twig версии 2.4

Задал вопрос на тостере, но никто тоже не знает. Тут читать удобнее -> https://qna.habr.com/q/1180564

Что я делаю: создаю материнский шаблон layouts/main.twig
<!doctype html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<h1>Главная страница</h1>
{% block content %}{% endblock %}
</body>
</html>

Создаю дочерний шаблон home/index.twig и наследуюсь от главного
{% extends "@app/views/layouts/main.twig" %}

{% block content %}
Дочерняя страница
{% endblock %}

Из HomeController'a рендерю дочерний шаблон, но в браузер выводится только материнский.
Все пути правильные, потому что любое изменение в путях приводит к ошибке "шаблон не найден".

Что я упускаю? Вроде бы с точки зрения синтаксиса все верно. Элементарные примеры же.
917 2414791
Стал мидлом на бумаге и нихуя до сих пор не понимаю, как работает PHP-FPM, как на уровне процесса работает PHP программа, как работает параллелизм и как веб-сервер обрабатывает сразу несколько запросов, если есть только 1 PHP процесс. Где можно почитать про все эти общие вещи работы самого PHP?
918 2414850
>>414791
ПЫХОВСКУЮ СПЕКУ ЧИТАЙ, ПИДОРАС УДАЧЛИВЫЙ
919 2415289
Подскажите, как отправлять письма? есть сайт, где пользователям приходят сообщения в личку, оповещение о каких-то действиях и т.п

Хочется это так же посылать на почту, но как это делают обычные сайты?

Я погуглил и нашел что многие пишут юзать mailgun, а там ценник 35 баксов за 50к писем. И пишут что через smtp какой нибудь яндекс почты все письма будут в спам улетать...

Я сомневаюсь что всякие там форумы платят по 100 баксов в месяц что бы уведомления посылать на почту...
920 2415454
>>415289
Чем тебя стандартный почтовый сервер не устраивает?
921 2415495
>>414687
Не. Там так и написано мидл\синьор. Никаких джунов и тд, что логично.

>>414753

>к юии был 1-с битрикс и битрикс фреймворк


Ой нахуй-нахуй. Это совсем какая-то лютая параша. Просто проходи мимо таких вакух - это помои.
922 2416096
Часто вижу вью рядом с ларавелем. Это норма или работодатели хотят понавесить лишнего на разрабов? Просто не совсем понятно как оно - вроде и бек делай, но в то же время и дизайнерские изъёбства реализуй на фронте. Это как вообще? Говно ведь получится когда всё один человек делает. Или нет?
923 2416272
>>416096

>Это норма или работодатели хотят понавесить лишнего на разрабов?


Просто ларка решила запрыгнуть в уже едущий поезд SPA.

>Говно ведь получится когда всё один человек делает.


Да
изображение.png1,5 Мб, 960x1280
924 2416279
Посоветуйте среду разработки, что-то типа open server, только под линукс.
925 2416349
Сап двач,столкнулся с проблемой. Пишу сайт который сокращает ссылки и пытаясь выгрузить его на хостинг нереально соснул хуйца,выкидывает исключение в классе,хуйня в том что на локалке такое исключение не выкидывает(выкидывало,но я пофиксил немного переделав базу данных) и все пашет норм,в чем может быть проблема? я уже день ебусь с этой хуйней
926 2416487
>>416279
Под линукс нативно всё ставится - гугли LAMP. А ещё там докер нативный есть, если через контейнеры хочешь.
Вообще под линукс никаких проблем с разработкой по нашему стеку нету.
Инструкций в интернете - вагон.

>>416272

>Да


И всем норм типа? Они говноеды?
927 2416509
>>416487

>И всем норм типа?


Да

>Они говноеды?


Они выполняют задачи бизнеса минимальными вложениями
928 2416543
>>414757

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

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

Если ты хочешь хорошо разобраться в этой теме, то придется начать с истории. Прочитай про устаревший протокол CGI (он устаревший, но зато очень простой), разберись как он работает. Затем почитай про протокол FastCGI.

Тут вскользь упомянуто, что делает fpm: https://www.php.net/manual/en/install.fpm.php

PHP-FPM это менеджер процессов и сервер. То есть, он (менеджер) запускается, запускает какое-то количество рабочих процессов и открывает порт для приема запросов по протоколу FastCGI. Когда приходит запрос, он передает его рабочему. Если рабочий падает, он запускает нового. Я правда не уверен насчет тонкостей: например, передает ли менеджер новое соединение рабочему или же куча рабочих просто совместно открывают один порт и ядро Linux передает соединение случайному рабочему?

> как на уровне процесса работает PHP программа



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

> как работает параллелизм



Запускается множество рабочих процессов, и ОС распределяет процессорное время между ними. Ты можешь захотеть прочитать про планировщик ядра в Linux, если тебе это не очень понятно.

> как веб-сервер обрабатывает сразу несколько запросов, если есть только 1 PHP процесс.



Один FPM процесс и много рабочих процессов.
930 2416549
>>414791

Тут среди описания настроек тоже можно подчерпнуть кое-какую информацию: https://www.php.net/manual/en/install.fpm.configuration.php

>>415289

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

Как минимум, нужно: не внесенный в спам-листы IP, корректный обратный DNS, настроить SPF/DKIM, обрабатывать случаи недоставки письма (то есть не пытаться 10 раз отправить письмо на один и тот же несуществующий адрес), отправлять письма только на подтвержденные email, сделать ссылку и заголовки для отписки от рассылки, реагировать на случаи, когда кто-то отправляет твое письмо в спам и отписывать его, итд.

Вот, например, на mail ru есть подробная информация:

https://help.mail.ru/developers/mailing_rules
https://help.mail.ru/developers/notes

Есть возможность отслеживать доставляемость писем: https://help.mail.ru/developers/postmaster

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

form.onsubmit явно не подойдёт, т.к. сервер может выдать ошибку валидации и вернуть пользователя на страницу.
Как можно отправить на клиент событие сохранения в базу данных?

Я знаю про sessionStorage, но мне кажется он не подойдёт для моих целей?
933 2417628
Аноны, поясните мне за try / catch. Вот у меня есть MVC приложение. Контроллер дёргает репозиторий, репозиторий дёргает ресурс, ресурс дёргает непосредственно базу. Куда следует вешать try/catch? На самый нижний уровень, т.е. на момент исполнения запроса? Или он должен быть на всех уровнях абстракции? Но тогда ведь будет пиздец как много дублирующегося кода и много лишних проверок.
934 2418053
>>417617

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


Ручками отправляй форму через fetch и проверяй ответ.
Пример:

async function sendForm(){
const form = document.querySelector('form');
const fd = new FormData(form);
const resp = await fetch(''/path/to/endpoint", {method: "post", body: fd});
if (!resp.ok) throw new Error(resp.status);
}

потом в момент, когда тебе нужно отправить форму:
try {await sendForm(); } catch (e) {
// пришел ответ с кодом не 2xx или нет соединения...
}
935 2418073
936 2418098
>>418053
Благодарю, анон!
937 2418122
>>417628

Для чего тебе try/catch? Если ты ловишь какое-то конкретное исключение, то ты ставишь try вокруг функции, которая его выбрасывает.

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

- https://github.com/codedokode/pasta/blob/master/php/exceptions.md#ловим-исключения

- https://github.com/codedokode/pasta/blob/master/php/exceptions.md#страница-ошибки-в-веб-приложениях
938 2418424
>>418122
Спасибо. Ну я в целом хочу понять хорошие практики использования этого блока, общую тактику их использования. А то везде туториалы только по синтаксису, но нигде не объясняют концепцию.
939 2418446
>>347129 (OP)
Ебать у тебя крутой учебник, ОП. Почему решил заняться такой благотворительностью? Это типа проект на портфолио или ты как хобби этим занимаешься? Не думал создать цыганские платные курсы? Я бы даже задонатил за труд, не будь я нищим стажёром-вкатуном.
940 2418555
как же я ллюблю ПХП1
941 2418766
>>418555
Чем отличается первая версия пыхи от последней?
942 2419569
Как после установки пыхи настроить extension-ы ? Помню там че-то раскомментировать надо для дальнейшей работы но мануал как обычно не завезли
943 2419643
>>418766
он был пьяненький скорее всего, это "!"

мимополоскун
сява-клоун.gif2,5 Мб, 498x365
132123 944 2420541
Доброй ночи. Сам хочу стать вкатуном и в моем мухосранске есть только 1 +- достойная контора.
https://tula.hh.ru/vacancy/67619851?from=employer&hhtmFrom=employer
Можете пожалуйста подсказать, что нужно с нуля учить\готовить для вкатунства в эту хуйню, как вообще называется эта хуйня(Я так понял это фуллстек). На руках имеется неоконченная шарага и минимальные знания в c++ и python. Если не сложно накиньте курсы или литературу которую стоит начать изучать для людей с пониженным IQ. Заранее всем спасибо.
945 2420563
946 2420645
>>420541
Битрикс учи. Будь патриотом ебать. Люби всё русское
947 2420687
>>419569

Ты не написал, какая у тебя ОС.

Если это Windows, то многие расширения идут в комплекте с PHP и единственное, что надо сделать для их включения - это раскомментировать или дописать в php.ini строчку вида extension=something.dll

Если расширение не идет в комплекте, то надо скачать подходящую dll c http://pecl.php.net/ и точно так же дописать строчку.

Расположение файла php.ini можно узнать, если выполнить php-скрипт с командой

<?php

phpinfo();

Если у тебя Линукс, то расширения ставятся через стандартный менеджер пакетов вроде apt, а если расширения в нем нет, то командой pecl install (если я не путаю).
948 2420692
>>418446

Однажды кто-то сделал тред по изучению языка Перл, а я решил сделать тред по изучению PHP. Какой-то умный анон написал, что это лучше оформить в виде сайта, чтобы материал не потерялся и примерно за 1 или 2 вечера сайт был нарисован, сверстан и запрограммирован.

Изначально учебника не было, я просто рисовал картинки с пояснениями в фотошопе и прикладывал к постам.
949 2420695
>>420541

Написано же в вакансии:

> Что мы ожидаем от вас:


> — хороший уровень знаний PHP/MySQL


> — отличный уровень знаний HTML/CSS/JS/jQuery


> — опыт разработки сайтов на 1С-Битрикс



Это и учи.
950 2420701
>>420541

Кроме самого PHP, изучи ООП и посмотри какой-нибудь фреймворк вроде Laravel.
951 2420704
>>420695
Я просто не понимаю в какой последовательности, хотелось бы какой-нибудь гайд, или ссылку на курсы, которые я скачаю слитые, чтобы это начать задрачивать. Есть огромное стремление вкатиться за год, т.к в моей шараге этот год последний, я ебал в армию идти, да и сама вакансия интересует. Проходил один раз практику на местном оружейном заводе. Там ахуенный мужик был, дал нам офис и компы и пояснял за веб. За 2 недели с нуля сделали +- простенький многостраничник на HTML+Css, потом начал заебывать с реактом но мы не успели и практика кончилась
952 2420711
>>420704
А ну и bootstrap был еще, ахуенный конструктор, мне зашло
953 2420746
>>420704

>я ебал в армию идти


а зачем учишь тогда, все равно же в армию идти?
954 2420749
>>420746
откосить по IT, да и есть шанс что просто сам не пойду, я очень больной
955 2421038
>>416549
>>416547
Спасибо большое! Появилось понимание наконец-то. Вот только про одновременную работу несколько процессов так и не понял. Допустим, у меня есть один PHP-FPM в докере, без демонов, он же может обрабатывать только 1 запрос одновременно по идее. Или нет?
956 2421135
Сап, кто-нибудь пишет на laravel + vue? Мне нужно сделать верификацию через почту и затем сделать возможность заблокировать доступ к некоторым роутам для неверифицированных пользователей. Но laravel:auth я не могу использовать, хотя в нем все это есть. Как быть? Хуярить костыли или уже есть где-то готовое решение? Помоги, анончик
957 2421181
>>421135
Тебе уже ответили в соседнем треде: использую гварды из vue router. https://router.vuejs.org/guide/advanced/navigation-guards.html
Примеров полно на гитхабе, сам найдешь.
958 2421235
>>416349
если бы ты сформулировал нормально, тебе бы ответили
959 2421249
>>421038
нет
960 2421312
>>421181
Причем здесь гарды? Мне нужен полностью пак с регистрацией и верификацией, у меня еще jwt в проекте, что усложняет задачу. Проверку я догадался сделать
961 2421392
>>421038

PHP-FPM это только менеджер. Для обработки запросов он запускает рабочие процессы, и ты в конфиге задаешь их количество.
962 2422059
Используют ли JWT-токен в монолитных проектах? Где можно почитать про его использование в php?
963 2422104
При создании контроллера в laravel перестал стартовать сервер. Вот что выдает. Что выдает гуго пробовал- не помогает. Плиз может кто объяснить что сделть

>>>UnexpectedValueException



Invalid route action: [MainController].

at D:\OpenServer\domains\laravel\vendor\laravel\framework\src\Illuminate\Routing\RouteAction.php:92
88 */
89 protected static function makeInvokable($action)
90 {
91 if (! method_exists($action, '__invoke')) {
➜ 92 throw new UnexpectedValueException("Invalid route action: [{$action}].");
93 }
94
95 return $action.'@__invoke';
96 }

1 D:\OpenServer\domains\laravel\vendor\laravel\framework\src\Illuminate\Routing\RouteAction.php:47
Illuminate\Routing\RouteAction::makeInvokable()

2 D:\OpenServer\domains\laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php:190
Illuminate\Routing\RouteAction::parse()
964 2422115
>>422104
методом подбора решил
Route::get('/', action: 'MainController@index');

с остальными вариантами не работало
965 2422128
>>422115

>Теперь страница выдает:


Illuminate \ Contracts \ Container \ BindingResolutionException
PHP 8.0.14
9.22.1
Target class [MainController] does not exist.

Ставился laravel, node.js и sass.
966 2422146
>>422128
Напиши полный путь до контроллера или добавь его в import.
Что-то подобное попробуй и нажми на подсказку, путь сам вставится:
Route::get('/', action: App/Http/Controllers/MainController::class, index)
image.png55 Кб, 479x538
967 2422310
сап двач,стоит следующая задача: вызывается функция с аргументом в виде ссылки(какая-то страница например https://yopta.ru),функция извлекает все ссылки с этой страницы,и по этим ссылкам делает то же самое(то есть тоже извлекает уже с этих страниц другие ссылки),и так 5 раз. Мой код на пике,как можно ускорить это? (все ссылки со всех страниц отправляются в бд)
968 2422589
>>422310

>как можно ускорить это


в многопотоке делай
https://www.php.net/manual/en/book.parallel.php
969 2422743
>>422310
Я кстати заметил что он у меня в бесконечную рекурсию по итогу улетает
970 2422809
>>422743
$count надо static сделать, не? Я если честно рекурсию так и не осилил на примере той задачи о пути из шапки, не могу представить в голове процесс.
971 2422998
>>422589

Для отправки запросов можно просто использовать curl в параллельном режиме, потоки тут не нужны. Хотя, конечно, можно разделить получение страниц и поиск ссылок.
972 2423005
>>422809

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

[1, 2, [3, 4, [5, 6, [7], 8], 9]]

1) Надо посчитать сумму чисел в таком массиве. В пустом массиве сумма равна 0.
2) Надо преобразовать его в одноуровневый плоский массив

Проверить, что значение является массивом, можно функцией is_array().

Задача два. Дан список категорий вида:

[
'Хлебобулочные изделия' => ['Хлеб', 'Булка', 'Лаваш'],
'Кондитерские изделия' => [
'Торты' => ['Из бисквита', 'Вафельные'],
'Пирожные',
'Печенье'
];

Надо вывести все категории, перечисляя их родителей через слеш и указывая сколько у них дочерних категорий:

Хлебобулочные изделия (3)
Хлебобулочные изделия / Хлеб (0)
Хлебобулочные изделия / Булка (0)
...

И так далее.

Сделаешь эти, можешь попросить еще. Или можешь попросить подсказку, если непонятно. В обоих случаях нужна рекурсия и обход дерева.
972 2423005
>>422809

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

[1, 2, [3, 4, [5, 6, [7], 8], 9]]

1) Надо посчитать сумму чисел в таком массиве. В пустом массиве сумма равна 0.
2) Надо преобразовать его в одноуровневый плоский массив

Проверить, что значение является массивом, можно функцией is_array().

Задача два. Дан список категорий вида:

[
'Хлебобулочные изделия' => ['Хлеб', 'Булка', 'Лаваш'],
'Кондитерские изделия' => [
'Торты' => ['Из бисквита', 'Вафельные'],
'Пирожные',
'Печенье'
];

Надо вывести все категории, перечисляя их родителей через слеш и указывая сколько у них дочерних категорий:

Хлебобулочные изделия (3)
Хлебобулочные изделия / Хлеб (0)
Хлебобулочные изделия / Булка (0)
...

И так далее.

Сделаешь эти, можешь попросить еще. Или можешь попросить подсказку, если непонятно. В обоих случаях нужна рекурсия и обход дерева.
973 2423007
>>422809

static использовать не надо, так как он будет накапливаться, если функцию вызвать несколько раз подряд. static вообще лучше избегать.
974 2423106
>>422998
Они разделены, просто не показал этого
975 2423841
Есть правила валидации как на пик1.
Как выводить ошибки валидации для каждого конкретного, сгенерированного с помощью JS, поля? Как передать индексы вопроса/ответа из JS в PHP?
976 2424094
>>423841
как -- решительно. Из вопроса непонятно, что тебе мешает.
977 2424175
>>423841

Не очень понятно, как у тебя устроен процесс обработки формы. (1) Ты отправляешь форму на сервер обычным POST, там она валидируется и выводится заново? (2) Ты используешь pjax? (3) Или же ты отправляешь AJAX-запрос из JS кода, он валидируется и возвращает список ошибок?

На скриншоте у тебя код шаблона нового вопроса, который вставляется в DOM при добавлении вопроса?

Если у тебя классическая стандартная отправка формы без AJAX, то тогда сервер проверяет данные и при ошибках выводит форму заново с ошибками (эта логика описана в моем уроке https://github.com/codedokode/pasta/blob/master/forms.md ). Но в Laravel почему-то сделано немного не так: там при ошибках сервер помещает их в сессию, делает редирект на страницу формы и форма выводится с добавлением ошибок из сессии.

Для проверки массивов ты используешь описанный тут синтаксис со звездочками: https://laravel.com/docs/9.x/validation#validating-nested-array-input (если я ничего не путаю). Чтобы вывести ошибки в таком случае, нужно разобраться, как их получить из переменной $errors, которая относится к классу MessageBag. Тут вроде описан синтаксис со звездочкой: https://laravel.com/docs/9.x/validation#working-with-error-messages . Но если тебе надо получить ошибку с определенным номером, я бы попробовал просто добавить номер, в стиле $errors->get('question.0.text'). Естественно, так как ты выводишь блоки в цикле, номер можно брать из переменной: $errors->get("question.$i.text").

Ты можешь также изучить код класса MessageBag и поискать подходящие методы в нем: https://laravel.com/api/9.x/Illuminate/Support/MessageBag.html . Ты также можешь попробовать сдампить объект $errors и посмотреть, какие ключи у ошибок в нем.

Что касается шаблона нового вопроса, то в данном сценарии него не надо добавлять ошибки, так как в новом, еще не отправленном на сервер вопросе не может быть ошибок.

---

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

---

Если у тебя отправка формы через AJAX, то по-видимому, надо делать так. JS код собирает данные формы в JSON и отправляет на сервер. На сервере они валидируются (используй синтаксис со звездочками по ссылке выше) и получается объект с ошибками. Он преобразуется в JSON и возвращается в качестве ответа на запрос. JS код убирает старые ошибки из DOM и добавляет полученные из JSON.

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

Также, для шаблона нового вопроса рекомендуется использовать тег <template>. Чтобы он случайно не отобразился в старых браузерах, добавь ему display: none.

Спрашивай, если что-то непонятно.
977 2424175
>>423841

Не очень понятно, как у тебя устроен процесс обработки формы. (1) Ты отправляешь форму на сервер обычным POST, там она валидируется и выводится заново? (2) Ты используешь pjax? (3) Или же ты отправляешь AJAX-запрос из JS кода, он валидируется и возвращает список ошибок?

На скриншоте у тебя код шаблона нового вопроса, который вставляется в DOM при добавлении вопроса?

Если у тебя классическая стандартная отправка формы без AJAX, то тогда сервер проверяет данные и при ошибках выводит форму заново с ошибками (эта логика описана в моем уроке https://github.com/codedokode/pasta/blob/master/forms.md ). Но в Laravel почему-то сделано немного не так: там при ошибках сервер помещает их в сессию, делает редирект на страницу формы и форма выводится с добавлением ошибок из сессии.

Для проверки массивов ты используешь описанный тут синтаксис со звездочками: https://laravel.com/docs/9.x/validation#validating-nested-array-input (если я ничего не путаю). Чтобы вывести ошибки в таком случае, нужно разобраться, как их получить из переменной $errors, которая относится к классу MessageBag. Тут вроде описан синтаксис со звездочкой: https://laravel.com/docs/9.x/validation#working-with-error-messages . Но если тебе надо получить ошибку с определенным номером, я бы попробовал просто добавить номер, в стиле $errors->get('question.0.text'). Естественно, так как ты выводишь блоки в цикле, номер можно брать из переменной: $errors->get("question.$i.text").

Ты можешь также изучить код класса MessageBag и поискать подходящие методы в нем: https://laravel.com/api/9.x/Illuminate/Support/MessageBag.html . Ты также можешь попробовать сдампить объект $errors и посмотреть, какие ключи у ошибок в нем.

Что касается шаблона нового вопроса, то в данном сценарии него не надо добавлять ошибки, так как в новом, еще не отправленном на сервер вопросе не может быть ошибок.

---

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

---

Если у тебя отправка формы через AJAX, то по-видимому, надо делать так. JS код собирает данные формы в JSON и отправляет на сервер. На сервере они валидируются (используй синтаксис со звездочками по ссылке выше) и получается объект с ошибками. Он преобразуется в JSON и возвращается в качестве ответа на запрос. JS код убирает старые ошибки из DOM и добавляет полученные из JSON.

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

Также, для шаблона нового вопроса рекомендуется использовать тег <template>. Чтобы он случайно не отобразился в старых браузерах, добавь ему display: none.

Спрашивай, если что-то непонятно.
978 2424195
>>424175
Json как принять на сервере?
979 2424601
>>424195

https://laravel.com/docs/9.x/requests#retrieving-json-input-values

Нужно выставить правильный заголовок Content-Type при отправке запроса.

Получить весь JSON-массив можно, наверно, через $input = $request->input();
980 2424815
>>347129 (OP)
Так как php работает по умирающей модели, возник вопрос. Выходит, что никакие постоянные соединения невозможны? Хочется иметь постоянное соединение с клиентом.
981 2424826
>>424815
Наверное не правильно сформулировал вопрос. Если php всегда умирает, то постоянные соединения бессмысленны. Как сделать чтобы он не умирал? Накостылять event loop?
982 2424835
>>347129 (OP)
Где вообще почитать про умирающую модель выполнения php приложения и как это использовать? На английском не получается нагуглить, не знаю как сформулировать запрос, выдает только мнения о том, умер или умрет ли php.
16584992088670.png216 Кб, 600x570
983 2424837
Аноны, у меня к вам очень важный вопрос. Смогу ли я вкатиться в работу пыхарем за полгода, если буду учиться часов 10 в день?(больше не получится). Финансов осталось с трудом на полгода, в моей мухосрани не берут даже на днище-работу(а если и берут, то кидают), родители поддержать никак не смогут; так что у меня полгода, не больше.

Если да, то что учить, на что держать курс?
Я собираюсь зубрить базовый PHP + ООП + MVC(по курсам Дмитрия Трепачёва + книга Котерова + книга Лукьянова), SQL/MySql, Laravel(так же по курсам Трепачёва + книга Кириченко/Дубовика), Git, PDO.

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

Возможно ещё подтяну Composer и Docker, но я сильно сомневаюсь, что успею выучить ещё и эти две технологии.

Смогу ли я с вышеперечисленными знаниями отыскать хотя бы стажировку? Не в своей перди, офк. Ради этого я могу взять небольшой кредит, и переехать в Москву/СПб/Екатеринбург и так далее.
+Задействую вакансии на удалёнке, но я очень сильно сомневаюсь, что кому-либо нужны джуниоры/стажёры удалённо.

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

Картинка для привлечения внимания.
984 2424858
>>424837
За пол года до какого уровня, чтобы что знать и уметь? Нужно понимать, что нельзя просто заучить что-то и ты становишься программистом. Нужно не запомнить теорию, а понимать, и самое важно уметь что-то делать. Если нужно бысто обучиться основам, то PHP для этого подходит, но самый короткий путь это верстка с переходом во фронтенд.
986 2424877
>>424837

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


не сможешь

>если буду учиться часов 10 в день


это так не работает

>в моей мухосрани не берут даже на днище-работу


это что за мухосрань такая?

Найди себе работу, чтобы были деньги на еду, а в свободное время сиди и спокойно, без спешки изучай пыху или что-нибудь другое. В тот же 1С вкатиться проще, чем в веб.
987 2424886
>>424837

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


Не сможешь, выгорание никто не отменял.

>в моей мухосрани не берут даже на днище-работу(а если и берут, то кидают)


курьером, таксовать можно (если права есть), в ту же пятерочку/магнит, летом точно туда набирают студентоту, ну в любом случае ищи работу чтобы хотя бы жить на минималках
988 2424891
>>424837
Не знаю, анон. Учусь последние 4 месяца по 5+ часов в день. Работу еще не нашел, но чувствую, что осенью все получится.
989 2424893
>>424877

>не сможешь


>>424886

>Не сможешь



Это субъективное мнение. Один чувак вкатился в мобайл за 2 месяца. Как, спросите вы? Очень просто. Занимался по 16 часов в день.
990 2424908
>>424893

> Один чувак вкатился в мобайл за 2 месяца.


Это похоже на ошибку выжившего.
>>424891

>чувствую, что осенью все получится.


ну тогда расскажешь осенью о своих успехах
991 2424942
>>424908

>так ни можна


>ко-ко-ко


>врёти

992 2425075
>>424877

> В тот же 1С вкатиться проще, чем в веб.


Двачую, если такие жесткие ограничения по времени и деньгам, я бы туда шел, а не в пыху.
993 2426454
>>424837
К сожалению не сможешь.
994 2426827
>>424837

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


Тупой вопрос. Это ты нам скажи, сможешь ли ты за N часов научиться?

>>426454

>К сожалению не сможешь.


Тупой ответ.
995 2427445
>>424835

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

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

Тебе не надо читать ничего специально про PHP, тебе стоит разобраться в: сокетах Беркли (не вебсокетах), протоколе FastCGI (который использует PHP-FPM), как вообще работает веб-сервер.

Так что постоянные соединения возможны.
996 2427448
>>424837

Начинай тогда с верстки и JS, если не успеешь выучить PHP, то хотя бы верстальщиком попробуешь устроиться.
997 2427464
>>424837
Учи питон лучше, сразу дата аналитиком пойдешь
998 2427509
>>427464
Двачую, можно написать парсер для хх.ру и считать себя сеньор дата-саентистом и архитектором в добавок.
999 2427754
Приветули, анонасы, кто вкатывался в международные фриланс биржи? Сложно пробиться? Можно будет на фрили переметнуться хотя бы на 50-70% деняк от текущей зпшки? Сколько по времени займет?
1000 2427845
>>427445

>Умирает не сам процесс PHP, а PHP скрипт


Это же одно и то же. Запустил файл на выполнение - запустился процесс. Выполнился код из файла - процесс умер. Сам модуль php-fpm может и не умирает, он может вообще на Си написан. Только вот экземпляр виртуальной машины PHP умирает после выполнения кода. Если взять например node.js, то там не так. После выполнения кода из файла, виртуальная машина не завершается, а ждет. Поэтому можно спокойно создать вебсокет соединение и обрабатывать его.

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


Так для нужен бесконечный цикл. Иначе код выполнится и php умрет. Чтобы не быть голословным, дай ссылку где можно прочитать про все что ты написал.
1001 2428105
>>427845

> Это же одно и то же. Запустил файл на выполнение - запустился процесс.



Нет. Неправильно. Процесс php не умирает после выполнения скрипта, а переходит к выполнению следующего скрипта. Один процесс PHP может выполнить множество скриптов. Почитай, что такое "процесс" в операционной системе для понимания.

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

> Если взять например node.js, то там не так. После выполнения кода из файла, виртуальная машина не завершается, а ждет.



Неверно. Если я запускаю скрипт как node index.js, и в нем нет того самого бесконечного цикла, то процесс node завершается после выполнения скрипта. То есть нода работает точно так же, как и PHP в CLI-режиме. PHP может выполнить скрипт и завершиться, или он может открывать порты и асинхронно обрабатывать поступающие данные, не завершаясь. Как и нода.

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



Вот пример неумирающего сервера: https://sergeyzhuk.me/2017/06/22/reactphp-chat-server/

Что касается остального, то я думаю, что тебе надо читать про сокеты Беркли, что такое процессы в ОС, что такое системные вызовы, то есть общую теорию. Потом может быть изучить библиотеки вроде ReactPHP, почитать их код, или Amphp (он мне не нравится, синтаксис с yield уродливый, и там много глобального состояния, а я не люблю глобальные переменные и потому amphp я использовать не хочу). Ты хочешь прочесть мануал "как сделать неумирающий сервер на PHP" и пропустить изучение теории, но так не получится. Я тебе выше дал как раз такую статью, но ты из нее ничего не поймешь без знания теории.

> Так для нужен бесконечный цикл.



Так сделай бесконечный цикл, кто тебе запрещает?
1002 2428176
Нужно мнение,собеседуюсь на вакансию где надо работать с cms,насколько это зашкварно работать с cms ебучими?
1003 2428197
>>428176
в рашке зашквар, в святой омерике заебись
1004 2428216
>>428176
у меня на районе за такую хуйню обоссывают лицо
image.png216 Кб, 1920x1330
1005 2430717
поясните плз насколько заебно отредактировать шаблон или впихнуть свою верстку в вордпресс?

ну и как сложно все эти плагины для вукомерции подключать

там нужно кодить или просто конфиги прописать?
1006 2430920
Как-то тред заморозился в последнее время.
1007 2432269
Сап. Нужно реализовать считывание переноса строк. То есть, если я при записи текста внезапно перенес строку, чтобы это учитывал php, добавляя запись в бд именно такой текст, какой я написал, а не сплошной. Как это сделать?
1008 2432975
>>432269
Насколько я помню, переносы строк сохраняются в базу данных, т.к. являются спецсимволом.
Если мне нужно было отобразить текст с переносами, то я включал переносы css-правилом. Возможно, если загонять текст в тег <pre>, то переносы тоже сохранятся. Я не проверял.
1009 2433107
>>432975

В теге <pre> нет ничего магического и ты можешь включить принудительные переносы в любом теге с помощью правила white-space.
1010 2433196
1011 2433478
>>432269
Константа такая есть: PHP_EOL
1012 2433888
>>432269
Считывание откуда? Из терминала aka stdin?
Вот так:
<?php
$str = "";
while($line = fgets(STDIN)) {
$str .= $line;

}
echo $str;

?>;

Будет вечно считывать данные из терминала пока ему не прилетит EOF (CTRL+D в юниксе и CTRL+Z в шиндоусе)
1013 2434171
Блядь, слонята, помогите. Как в композере откатить пыху до 7.4? Сижу на арче. Я вроде уже прописал в жсоне php: 7.4, но когда я прописываю composer install, он выдаёт
Root composer.json requires php ^7.4 but your php version (8.1.7) does not satisfy that requirement.
1015 2435034
>>434171
Тебе не в композере надо пыху откатывать на на ОСи интерпритирующей пыху, тебе же русским языком написано: but your php version (8.1.7) но ваша версия 8.1.7. Либо в композере пропиши: ^8.1
1016 2435828
Есть какой-нибудь сервис с бесплатным тиром, через который можно было бы отправить емэйл? Я просто хочу сделать кнопку "забыл пароль" на своём говнопетпроекте. А гуглятся только сервисы по массовой рассылке писем, я не уверен, что это то, что мне нужно.
1017 2436621
>>435828
А, неважно, я понял, можно даже просто гугловской почтой пользоваться smtp.gmail.com А когда локально на компе приложение запускаешь, есть mailhog, чтобы не отправлять настоящие емэйлы.
1018 2437371
Ваш пхп больше не нужен, для серьезных вещей есть джава (ваш симфони с доктриной это и есть джава с гибернейтом), для быстрого прототипирования golang или node.js

Те, кто с этим спорят, просто отрицают очевидное и боятся потерять работу.

Вопросы?
1019 2437509
>>437371
Письку будешь?
1020 2437513
>>423005
>>423007
https://onecompiler.com/php/3yd93tntm
Как еще тогда без статики хранить промежуточное значение между вызовами функции? Глобальные переменные использовать еще хуже ведь по идее.
https://onecompiler.com/php/3yda5qxf7
Не могу найти ошибку во второй, самое печальное я даже не знаю где в дебаггере поставить точку, чтобы понять промежуточные значения. Не могу наверное на базовом уровне даже понять концепт, только подгонкой под ответ что-то получить.
1021 2437802
>>437509
Не, я же не пехапешник
1022 2439316
>>437513

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

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



Его просто не надо хранить. Для передачи значений нужно использовать аргументы функции и return для возврата.

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

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

- пусть сумма = 0
- обходим элементы массива по очереди:
- - если это число, то прибавляем его к сумме
- - если это массив, то вызываем себя рекурсивно, получаем сумму элементов в массиве, и прибавляем возвращенное значение к сумме
- возвращаем сумму

Как видишь, задача решается без глобальных переменных.
1023 2439329
>>437513

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

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

function countCategories(array $categs): int { ... }

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

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

Кондитерские изделия / Торты / Из бисквита

Здесь "Кондитерские изделия / Торты" - это родительские категории, а "Из бисквита" это текущая. Проще всего просто явно передавать в функцию вывода список родительских категорий, то есть функция должна иметь вид:

function printCategories(array $categs, array $parents = [])

Здесь $parents как раз и содержит ["кондитерские изделия", "Торты"].
1024 2439347
>>437513

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



Иногда вместо пошаговой отладки лучше работает вывод переменных с помощью echo или var_dump.

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

Есть набор программ, и у программ есть зависимости. То есть, чтобы поставить программу A, нужно сначала установить программы B и C. Зависимости описаны в массиве такого вида:

программа => массив зависимостей, например:

[
'config-parser' => ['yaml-parser', 'json-parser'],
'json-parser' => ['libjson'],
'framework' => ['config-parser', 'twig', 'doctrine'],
'doctrine' => ['pdo'],
'twig' => ['lexer']
]

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

К примеру, чтобы установить config-parser, нужно поставить yaml-parser и json-parser, и для json-parser требуется еще libjson. Не используй статические/глобальные переменные.

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

['+', 'x', 'y', 5] значит x + y + 5
['*', 'x', 2, 3] значит x * 2 * 3
['*', ['+', 'a', 'b'], 5] значит (a + b) * 5

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

2 + x + 5 => 7 + x
(2 + x + 1) * 2 * (x + y) * 5 => (3 + x) * 10 * (x + y)

Тут конечно можно голову сломать, но ты попробуй, а если что, попроси подсказку. Как и ранее, не используй глобальные/статические переменные.
1024 2439347
>>437513

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



Иногда вместо пошаговой отладки лучше работает вывод переменных с помощью echo или var_dump.

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

Есть набор программ, и у программ есть зависимости. То есть, чтобы поставить программу A, нужно сначала установить программы B и C. Зависимости описаны в массиве такого вида:

программа => массив зависимостей, например:

[
'config-parser' => ['yaml-parser', 'json-parser'],
'json-parser' => ['libjson'],
'framework' => ['config-parser', 'twig', 'doctrine'],
'doctrine' => ['pdo'],
'twig' => ['lexer']
]

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

К примеру, чтобы установить config-parser, нужно поставить yaml-parser и json-parser, и для json-parser требуется еще libjson. Не используй статические/глобальные переменные.

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

['+', 'x', 'y', 5] значит x + y + 5
['*', 'x', 2, 3] значит x * 2 * 3
['*', ['+', 'a', 'b'], 5] значит (a + b) * 5

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

2 + x + 5 => 7 + x
(2 + x + 1) * 2 * (x + y) * 5 => (3 + x) * 10 * (x + y)

Тут конечно можно голову сломать, но ты попробуй, а если что, попроси подсказку. Как и ранее, не используй глобальные/статические переменные.
1025 2439797
Поставил в магическим способом docker и symfony. Пока пофиг на докер, работает и ладно, а что делать с симфони? Там есть только папка контроллер и все. Как пилить модули. Как вообще должен выглядеть структура нормального проекта на симфони? На yii и laravel проще все как-то.
1026 2439813
>>439797
ты меня спрашиваешь?
1027 2439817
А ты знаешь? Я бы хотел посмотреть на структуру проекта на симфони
1028 2439820
>>439817
у православных американцев по спрашивай в реддите
эта доска мертва как и сам пхп
1029 2439829
Не взяли в германию потому что 30 минут в режиме онлайн вардмапил свой код в попытках решить это тестовое задание. Если интересно
https://pad.riseup.net/p/um6r06DgiSF1souTMcFq
1030 2439834
>>439820
Нашел на гитхабе пару проектов. Спасибо.
1031 2440189
>>439829
По ссылке нихуя нет полюбому лажа какая-нибудь в виде написать сортировку слиянием или что-то такое же тривиальное
1032 2440378
>>439829
Не работает ссылка. Рассказывай что за тестовое
image.png15 Кб, 935x272
1033 2440393
function examples(): \Generator
{
yield 'empty string' => ['', 1000, ''];
yield 'small string' => ['text', 1000, 'text'];
yield 'max length less than text length' => ['text', 3, 'tex'];
yield 'small string with dots' => ['text. text! text.', 1000, 'text. text! text.'];
yield 'trim text without sentences' => ['text, text (text text);', 15, 'text, text (tex'];
yield 'trim text by dot' => ['text text. text.', 12, 'text text.'];
yield 'trim with zero as max length' => ['text.text', 0, ''];
yield 'trim with negative max length' => ['text text. abc', -2, ''];
yield 'trim multibyte text' => ['Für über 30-Jährige wird für Erst- und Auffrischungsimpfungen Moderna verwendet, ausgenommen sind Schwangere und Stillende. Für die Zweitimpfungen wird BioNTech verwendet, wenn der Impfzyklus damit begonnen wurde.', 150, 'Für über 30-Jährige wird für Erst- und Auffrischungsimpfungen Moderna verwendet, ausgenommen sind Schwangere und Stillende.'];
yield 'trim with multiple dots' => ['Bislang (Stand 9.1.) wurden in München insgesamt 2.573.163 Impfungen durchgeführt (1.058.319 Erst- und 1.003.629 Zweitimpfungen sowie 511.215 Drittimpfungen). Impfungen durch (1.2) Betriebsärzt*innen wurden bislang nicht erfasst. Die Münchner Impfquote liegt damit, bezogen auf die Gesamtbevölkerung, bei den Erstimpfungen bei 71,1 %, bei den Zweitimpfungen bei 67,4 % und bei den Drittimpfungen („Boosterimpfung“) bei 34,4 %.', 200, 'Bislang (Stand 9.1.) wurden in München insgesamt 2.573.163 Impfungen durchgeführt (1.058.319 Erst- und 1.003.629 Zweitimpfungen sowie 511.215 Drittimpfungen).'];
yield 'trim text with length equals to max length' => ['text. text.', 11, 'text. text.'];
yield 'trim with sentence separator at max length position' => ['first sentence. second sentence. text!', 32, 'first sentence. second sentence.'];
yield 'trim by ...' => ['first sentence. second sentence... other text.', 40, 'first sentence. second sentence...'];
yield 'advanced: trim by question mark' => ['text. text? text', 15, 'text. text?'];
yield 'advanced: trim by exclamation mark' => ['text? text. text! text text. text.', 25, 'text? text. text!'];
yield 'advanced: trim by question exclamation mark' => ['text. text?! text text text', 15, 'text. text?!'];
yield 'advanced: trim by exclamation question mark' => ['text. text!? text text text', 15, 'text. text!?'];
}

echo "<pre>";

foreach (examples() as $topic => [$original, $length, $expected]) {

$result = truncate($original, $length) === $expected;
if ($result === false) {
echo "-" . $topic . '<font color="red"> - FAIL!</font>' . "\n";
} else {
echo "-" . $topic . '<font color="green"> - CHECK!</font>' . "\n";
}
}

echo "</pre>";
image.png15 Кб, 935x272
1033 2440393
function examples(): \Generator
{
yield 'empty string' => ['', 1000, ''];
yield 'small string' => ['text', 1000, 'text'];
yield 'max length less than text length' => ['text', 3, 'tex'];
yield 'small string with dots' => ['text. text! text.', 1000, 'text. text! text.'];
yield 'trim text without sentences' => ['text, text (text text);', 15, 'text, text (tex'];
yield 'trim text by dot' => ['text text. text.', 12, 'text text.'];
yield 'trim with zero as max length' => ['text.text', 0, ''];
yield 'trim with negative max length' => ['text text. abc', -2, ''];
yield 'trim multibyte text' => ['Für über 30-Jährige wird für Erst- und Auffrischungsimpfungen Moderna verwendet, ausgenommen sind Schwangere und Stillende. Für die Zweitimpfungen wird BioNTech verwendet, wenn der Impfzyklus damit begonnen wurde.', 150, 'Für über 30-Jährige wird für Erst- und Auffrischungsimpfungen Moderna verwendet, ausgenommen sind Schwangere und Stillende.'];
yield 'trim with multiple dots' => ['Bislang (Stand 9.1.) wurden in München insgesamt 2.573.163 Impfungen durchgeführt (1.058.319 Erst- und 1.003.629 Zweitimpfungen sowie 511.215 Drittimpfungen). Impfungen durch (1.2) Betriebsärzt*innen wurden bislang nicht erfasst. Die Münchner Impfquote liegt damit, bezogen auf die Gesamtbevölkerung, bei den Erstimpfungen bei 71,1 %, bei den Zweitimpfungen bei 67,4 % und bei den Drittimpfungen („Boosterimpfung“) bei 34,4 %.', 200, 'Bislang (Stand 9.1.) wurden in München insgesamt 2.573.163 Impfungen durchgeführt (1.058.319 Erst- und 1.003.629 Zweitimpfungen sowie 511.215 Drittimpfungen).'];
yield 'trim text with length equals to max length' => ['text. text.', 11, 'text. text.'];
yield 'trim with sentence separator at max length position' => ['first sentence. second sentence. text!', 32, 'first sentence. second sentence.'];
yield 'trim by ...' => ['first sentence. second sentence... other text.', 40, 'first sentence. second sentence...'];
yield 'advanced: trim by question mark' => ['text. text? text', 15, 'text. text?'];
yield 'advanced: trim by exclamation mark' => ['text? text. text! text text. text.', 25, 'text? text. text!'];
yield 'advanced: trim by question exclamation mark' => ['text. text?! text text text', 15, 'text. text?!'];
yield 'advanced: trim by exclamation question mark' => ['text. text!? text text text', 15, 'text. text!?'];
}

echo "<pre>";

foreach (examples() as $topic => [$original, $length, $expected]) {

$result = truncate($original, $length) === $expected;
if ($result === false) {
echo "-" . $topic . '<font color="red"> - FAIL!</font>' . "\n";
} else {
echo "-" . $topic . '<font color="green"> - CHECK!</font>' . "\n";
}
}

echo "</pre>";
1034 2440853
>>439797

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

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

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

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

И тд. Надеюсь, ты видишь логику. Заметь, что некоторые модули тут отвечают в основном за интерфейс или API, а некоторые за внутреннюю бизнес-логику. То есть, тебе надо подумать, как разбить твое приложение на компоненты, чтобы внутри компонента был код, который тесно связан друг с другом, сами компоненты слабо связаны между собой. И заметь, что некоторые модули содержат контроллеры/шаблоны, а некоторые нет. Нет такого требования, чтобы каждому модулю соответствовала какая-то страница на сайте.
1035 2440876
Аноны, переходите в новый тред >>2440871 (OP)

Этот тред закончился, если вас пропустили, напомните о себе в новом треде.
1036 2442056
>>440853
Благодарю. Можно еще вопрос кастельно модулей, раз у тебя есть опыт с ними. Как быть с классами которые связывают несколько классов из разных модулей? Например класс КлиентТелевизор связывающий классы Клиент из модуля клиентов с классом Телевизор из модуля телевизоров.
1037 2442717
>>439797
Ну такую же структуру как в ларавель сделай, в чём проблема? Ты хоть доку или книгу по симфе почитал?

>>442056
Через DI и autowiring. Всё в доке есть как создать сервис, в том числе с зависимостью другим сервисом, читай, пробуй.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 20 сентября 2022 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски