Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Как заменить много use'ов одним или правильная организация структуры. » 08.03.2020 14:39:44

Тут однозначного ответа/совета быть не может - у каждого свое понимание ООП (а кто-то вообще против него, хоть таких в PHP не много). Так что ниже сугубо мое личное мнение.

Ты столкнулся с ситуацией, когда излишняя иерархия вредит. Есть две иерархии: плоская (по сути, отстутствие иерархии) или полная (предельная группировка по пространствам имен, как в твоем желаемом примере с App\TelegramBot\Actions\Keyboards\Xyz...).

Когда-то, в PHP до версии 5.3 пространств имен (namespaces) не было. Во многих ЯП их нет до сих пор (Си, JavaScript, Lua и пр.). В этом случае проблема коллизий (совпадений имен, когда у тебя есть класс Foo и у библиотеки тоже есть класс Foo) решалась путем префиксов и суффиксов. Например:

MyTelegramBotKeyboardAction

Когда появились NS и народ кинулся в другую крайность, получилось так:

My\Telegram\Bot\Action\Keyboard

Интересно заметить, что первый вариант гораздо ближе к естественному написанию, чем второй ("my telegram bot's keyboard action" <=> "my telegram bot, (its) action (of/for) keyboard").

А еще интереснее, что многие вообще начинают совмещать оба подхода, и вот это мне совсем не понятно:

My\Telegram\Bot\Action\KeyboardAction

Ясно, что так проще (короче) писать use, но это уже совсем масло-масляное ("ActionKeyboardAction") - может тогда это промежуточное пространство имен вообще не нужно?

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

MyTelegramBot\KeyboardAction

То есть одно большое NS, где внутри все остальное, без под-NS. Такая структура позволяет избежать use практически целиком. Например, если у тебя есть класс App\TelegramBot\Commands\SomeCommand и ему надо вызвать метод у Core, то ты будешь писать так:

class SomeCommand {
  function foo() {
    \App\TelegramBot\Core::bar();

Или так:

use App\TelegramBot\Core;

class SomeCommand {
  function foo() {
    Core::bar();

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

А вот если у тебя и Command, и Core в одном NS - то никаких проблем:

class SomeCommand {
  function foo() {
    Core::bar();

Получаешь лучшее из двух миров - use не надо (ибо классы в одном NS), в то же время ссылаешься на класс, как будто бы use был.

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

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

Я думаю, тебе стоит почитать про ООП в PHP подробнее, потому что у тебя путаница: use не вызывает автозагрузчик и вообще никак не относится к нему. Автозагрузчик сам по себе. Когда ты пишешь use, ты просто создаешь псевдоним для отдельно взятого класса в рамках этого файла: вместо \Some\Class::foo ты можешь написать один раз use Some\Class и далее везде просто Class::foo.

В доке по PHP все очень хорошо расписано:

#2 Re: Общий раздел » Существуют ли пакеты для laravel для создания графиков на php без js? » 02.03.2020 15:50:35

Раньше до laravel использовал библиотеки pchart

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

#3 Re: Вакансии » Для любителей нестандартных задач - Переделать калькулятор » 18.02.2020 22:29:55

И что в итоге, кого-то оставят ни с чем.

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

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

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

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

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

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

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

Я не говорил, что надо оценивать по скорости работы. Человек может работать медленно, но регулярно держать связь. Если используется таск-менеджер - там видно обновления, если GitHub или другой подобный сервис - там коммиты, если их нет, но он "вникает" - значит, на почту приходят вопросы, отчеты раз в день/неделю/месяц, никаких тебе "завтраков" и так далее. Даже когда "дольше пишешь" - у тебя хоть десяток строчек в день есть. Не должно быть такого, что человек на неделю куда-то пропал. Да даже на два дня не должно быть. Не появился на горизонте, когда обещал - жди день и все, считай что исчез (ибо дальше с ним будет почти наверняка хуже). Конечно, есть исключения, но когда человек тебе совсем не знаком - лучше "перебздеть", шанс попасть в такое исключение весьма мал.

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

#4 Re: Вакансии » Для любителей нестандартных задач - Переделать калькулятор » 18.02.2020 16:26:56

А потом просто пропал и не отвечает ?! Три недели потеряно.

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

#5 Re: Laravel 5.x » выключить\включить сайт » 16.02.2020 19:57:26

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

Я поэтому про allow_request и написал. auth.php может проверять файл на наличие, какую-то строку в БД и пр.

я решил проблему так- создал обычную пхп страницу которая умеет выполнять команду php artisan down\up

Позволять выполнять shell-команды из PHP - плохая идея с точки зрения безопасности.

#6 Re: Laravel 6 » Подскажите с sqlite » 16.02.2020 19:56:28

Я то думал сначала надо sqlite3 раскоментить. Но так не работало.

sqlite3 - это для функций типа sqlite_open(). pdo_sqlite - это драйвер для функций PDO, а PDO работает сразу со многими БД. Laravel использует PDO, как и все современные проекты.

В соседней папке другой проект на ларе созданный изначально на убунтУ работает. А клонированный с 500 падает.

Смотри логи сервера и логи Laravel.

#7 Re: Laravel 5.x » выключить\включить сайт » 16.02.2020 12:50:34

Вообще, желательно, чтобы веб-сервер выдавал плашку "обслуживание", а не само приложение. С сервером нет шансов, что какие-то запросы "протекут" (потому что для них middleware не работает или еще что-нибудь подобное). В случае с nginx это делается добавлением набора allow/deny в блок server или location:

allow 1.2.3.4;
allow 5.6.7.8;
deny all;

Но есть и более интересный способ, про который мало знают. В nginx есть опция auth_request - с ней вопрос об аутентификации можно решать в контексте приложения! Когда приходит внешний запрос, nginx опрашивает этот URL и если в ответе код 401 или 403 - пользователю дается "отлуп" (который можно показать в виде красивой кастомной страницы об ошибке путем error_page). В отличии от ручного прописывания allow/deny, здесь не нужно править конфиг сервера, перезапускать его, вообще лезть в консоль, да и гибкость куда большая.

Выглядит это примерно так (подробности в документации):

server {
  ...

  error_page 403 /403.html;

  location / {
    auth_request /auth.php;
    include fastcgi.conf;
  }

  location = /auth.php {
    include fastcgi.conf;
  }
}

#8 Re: Laravel 6 » Подскажите с sqlite » 16.02.2020 12:36:07

Сделай скрипт вида <?php phpinfo(); открой его в браузере, посмотри, есть ли там среди опций pdo_sqlite. Если его нет, то, значит, в php.ini он не включен (или сервер не был перезапущен после включения). Включается просто - добавь такую строку (путь не нужен):

extension=pdo_sqlite

Она уже там где-то есть, только закомментированная (с ; в начале).

Если pdo_sqlite нет в системе, то PHP при запуске должен ругаться. Но ты говоришь, что из консоли работает - значит, он есть. Учти еще, что обычно в системе несколько php.ini - один для CLI, другой для Apache, третий для php-fpm и т.д. Если ты включаешь расширение в /etc/php/*/cli/php.ini, то в Apache оно не включится - меняй соответствующий конфиг.

#9 Re: Laravel 5.x » Убрать слеш в конце URL у папки » 11.02.2020 23:29:15

Это стандартное поведение, наверное, всех веб-серверов. Если по адресу есть директория, а URL не оканчивается на слэш - до PHP/Laravel такой запрос даже не доходит - редирект возвращает сам веб-сервер. А в чем проблема? Ты хочешь, чтобы по адресу .../blog отдавалась одна страница, а по адресу .../blob/ - другая?

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

#10 Re: Прочее » Как оценивать работу по фикс-прайсу? » 04.02.2020 12:34:34

Надо понимать две вещи:

  • "обычное приложение/лендинг/подставить_нужное" с шансом 146% окажется "необычным" (с точки зрения фрилансера)

  • даже если есть ТЗ, почти наверняка в процессе выяснится, что оно не полное, что "ой, ну тут надо мелочь еще сделать"

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

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

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

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

  • если ТЗ адекватное и у тебя есть достаточный опыт (5-10-... штук) разработки именного такого типа сайтов - то прикидываешь, во сколько (по часам) тебе раньше обходилась разработка, какие были косяки и трудности

  • умножаешь полученное число часов на свою ставку и еще на 3

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

Как вариант, ТЗ можно составить самому (или помочь заказчику сделать это) - но, надо понимать, что это тоже не бесплатно (грамотное ТЗ это может быть вообще половиной проекта, условно). Обычно это может случаться с крупными заказчиками (300к+), которые тебе дают, допустим, 10% от грубой стоимости, ты с ними выясняешь ТЗ и в нем фиксируете вместе весь функционал. В итоге ты уверен, что "дыр" в ТЗ нет, а у заказчика появляется точный бюджет.

#11 Re: Прочее » Обновление сайта » 14.01.2020 12:24:50

Почему я не могу свою же тему не отредактировать не удалить?

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

Если запостил что-то личное - нажми "Пожаловаться", я удалю.

#12 Re: Вакансии » Для любителей нестандартных задач - Переделать калькулятор » 14.01.2020 12:21:38

Я так и не понял где тут на форуме ПМ  личные сообщения падают мне в почтовый ящик с обратным адресом robot@laravel.ru и на этом всё

Когда жмешь на "Сообщение" - ты отправляешь письмо на почту. Обратный адрес письма (Reply-To) выставляется в твой, так что ответ на письмо приходит к тебе. robot@laravel.ru - это отправитель, но ему ответ не отправляется.

#13 Re: Laravel 6 » Laravel запросы к базе данных » 03.01.2020 13:56:37

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

VIEW это механизм, встроенный в СУБД. Соответственно, он более безопасный и быстрый (в общем случае, т.к. MySQL не может оптимизировать сложные запросы к VIEW). Но из этого следует и то, что если хочется переносимости между разными СУБД - VIEW лучше не использовать. С простым WHERE куда больше шансов, что он заработает в PostgresSQL или в SQLite.

Вообще, в среднем проекте нет причин использовать VIEW. Обычно "проще" значит "лучше".

#14 Re: Laravel 5.x » Курсы валют » 03.01.2020 13:41:39

а вы ему суете int

Да что вы говорите?

% php -r "echo gettype((0.1+0.7)*10);"
double

Так что кто не знает php - идут лесом.

Если что, это была цитата из официальной документации PHP.

#15 Re: Laravel 6 » Утекает память при парсинге html документа » 28.12.2019 19:45:46

Крайняк, если не решу проблему, то на питоне все сделаю

На PHP вполне нормально реализуются долгоживущие парсеры. У самого PHP утечек нет, у меня бывали и бывают процессы, которые стартуют с ОС и работают, пока не перезагрузишь. Это именно проблема (или "нецелевое использование" - как угодно) Laravel. В твоем случае достаточно переписать пару мест на "более голый" PHP (степень "голости" зависит от тебя). Python - это слишком радикальное решение, ИМХО.

В конце концов, "whereIn()->pluck()" это тот же PDO + array_column(), 2-3 строчки максимум.

#16 Re: Laravel 6 » Утекает память при парсинге html документа » 26.12.2019 11:29:01

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

Значит что-то держит память, ссылки не дохлые.

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

Видимо, здесь и утекает. В Laravel ногу сломишь, пока поймешь, где, что и кто не очистил (я еще в L3 находил утечки, даже Тейлору писал, а L3 был на порядок проще того, что сейчас), поэтому попробуй переписать этот кусок в виде сырого запроса, благо он у тебя простой. Если это не поможет - тогда попробуй и вовсе его закомментировать и заменить на чтение данных из файла (просто для тестов) через json_decode(file_get_contents()) или require() (если данные в виде PHP-кода - var_export()). Если действительно утечка здесь, то после замены память будет в норме, сколько бы итераций не прошло.

Эти все файлы за 0 лет работы скопились.

Много файлов за 0 лет работы скопилось? roll

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

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

#17 Re: Laravel 6 » Утекает память при парсинге html документа » 25.12.2019 21:32:36

Не могу понять почему чистильщик не очищает память?

А какой лимит по памяти у процесса (memory_limit)? Может ему и не нужно, т.к. памяти еще хватает.

Попробуй gc_collect_cycles(); - это вызовет GC принудительно.

Точнее сказать нельзя, потому что не известно, что там в getMissed().

$this->convert(memory_get_usage(true)));

Учти, что:

real_usage
Set this to TRUE to get total memory allocated from system, including unused pages. If not set or FALSE only the used memory is reported.

Так что статистика может быть нерепрезентативна. Сравни с memory_get_usage(false).

#18 Re: Laravel 6 » Создание таблиц БД с помощью кода » 21.12.2019 15:41:38

На MSSQL есть специальные временные таблицы.

В MySQL тоже есть временные таблицы (как явно создаваемые через CREATE TEMPORARY TABLE, так и не явно создаваемые для сложных/больших запросов). Другое дело, что временная таблица это все равно таблица со всеми вытекающими (сравнительно медленная; DDL, поэтому нельзя внутри транзакции; требует права доступа помимо базовых SELECT/INSERT/UPDATE/DELETE; и т.д.) и обычно намекает на проблемы в проектировании. К тому же если вы сами создаете временную таблицу, вам придется руками поддерживать ее актуальность, когда изменяется таблица, на основе которой она создана.

Кстати, посмотрите в сторону CREATE VIEW. Возможно, в вашем случае как раз требуется именно это.

#19 Re: Вакансии » Требуется создание с нуля самописного сайта » 04.12.2019 17:49:06

1) Скорость загрузки не более 0,1 сек

4) Ежедневные отчёты . в день минимум 3 Pusha

Сайт должен быть полностью самописным , разработан безупречно

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

Скорость загрузки, действительно, не всегда зависит от разработчика. Может это интеграция с сервисом в далеком забугорье, может очень хитрый фильтр на миллионе записей. Без четкого описания среды ("фильтров 2, такого-то типа, записей не более 100, до БД пинг 1 мс") такие требования выглядят, как микроменеджмент.

Push'ы - тут еще интереснее, это из разряда "требовалось не менее 100 000 строк кода, мы добили разницу цитатами из Пушкина". Редко бывает задача, которую разбить на несколько коммитов ну никак нельзя. Иногда бывает, что целый день (а то и несколько) копаешь-копаешь в поисках непонятного бага, а кода - нет. Потом один коммит с исправлением на одной строчке, за которым десятки часов поисков. И за это вы будете штрафовать? Или будете требовать отчетов?

А "самописный" - это даже не технический термин, формально я написал вызов Eloquent - и это уже мой, "самописный", код, так что вовсе не ясно, что подразумевается под этим словом.

В общем, я посоветовал бы найти отличного спеца и оставить всю техническую часть на его совести, тем более вы, видимо, не видите разницы между push и commit, то есть у вас нет хорошего технического background'а, и если будете пытаться таким спецом рулить (всякие там "митапы" и "созвоны") - он или уйдет, или будет "сидеть на з/п", в итоге у вас в любом случае проект не выгодит.

#20 Re: Веб-разработка » Запись строчек в файл с расширением .xls » 15.11.2019 15:29:29

У вас смешалось все в кучу.

Во-первых, вы пишете данные в формате .csv (comma-separated values), а не .xls или .xlsx (это именно родные Excel-форматы, не CSV). Поэтому давайте имени файла расширение .csv.

Во-вторых, Excel (по крайней мере старые версии точно, старее 2015 или около того) читает CSV только в кодировке ОС, т.е. на русской Windows это CP1251 (как вы правильно заметили). Но! У CP1251 не может быть префикса BOM (EF BB BF) - это признак файла в кодировке UTF-8. Нельзя один файл кодировать одновременно как UTF-8 и CP1251. BOM в вашем случае нужно убрать, оставить только mb_convert_encoding().

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

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

Все правильно, пишут как раз про .xls/.xlsx, которые закрытые бинарные форматы от MS.

$text = '';
foreach ($arrayData as $key => $value) {
    $text .= "\"$value\";\"$key\"\r\n";   // <<<
}
$files = fopen($_SERVER['DOCUMENT_ROOT']."/file_text.csv","w+b");   // <<<
//fwrite($files, "\xEF\xBB\xBF");  // <<<
$text = mb_convert_encoding($text,"windows-1251");
fwrite($files, $text);
fclose ($files);

#21 Re: Вакансии » Laravel-разработчик » 16.07.2019 12:24:12

Anatolii
Просьба не создавать дубликаты тем, а поднимать существующие.

#22 Re: Прочее » Why I don’t want to use Laravel anymore » 24.06.2019 19:25:27

Я на Laravel не писал уже много лет, так что о нем конкретно говорить не могу, но вообще, когда читаю статьи про фреймворки, ощущение, что народ 90% рабочего времени пишет модели, формы и классы (или печатает со скоростью 10 знаков в минуту), и поэтому кодогенераторы и магические dependency injection (и другие injection, вроде свойств в Eloquent) приносят такое невероятное облегчение и хайп. Особенно меня вымораживают кодо-комментарии (@dataSource и пр.) — ладно там в юнит-тестах, но в основном коде, это ж маразм, основывать логику на комментариях!

В моей работе как-то все наоборот. Да, есть модели (сильное название — класс со свойствами), но вообще не вижу никаких проблем от руки написать такой класс на каждую таблицу (даже если их 20-30 штук). Это делается даже «не приходя в сознание». И не ломаешь голову, откуда пришло то или иное свойство. Явное лучше скрытого. С методами аналогично — руки не отсохнут написать, что первый аргумент это User $user. На такие рутинные операции тратится может 5% времени. Остальные 95% — никакой фреймворк не облегчит, потому что это собственно и есть бизнес-логика, где требуется продумывание и планирование и только потом код.

А вот шаблонизаторы, если они легкие и прозрачные, сильно облегчают жизнь — писать HTML на голом PHP не продуктивно. ORM — если очень-очень легкая, то имеет место быть для всяких User::find(123), однако обязательно должен быть и прямой доступ к SQL (в виде подготовленных запросов), иначе придется переписывать пятиэтажные (JOIN) запросы с WHERE, HAVING, ORDER BY и LIMIT из человекочитаемого SQL в человеконечитаемые вызовы методов. ORM такие запросы эффективно сгенерировать вряд ли сможет, да и будешь уверен, что после очередного обновления и изменения внутренней логики ORM твой запрос не стал в 10 раз медленнее, потому что она его поняла как-то не так. Отлаживать удобнее, опять же.

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

Вместо фреймворков, ИМХО, лучше тянуть (качественные) пакеты, потому что они не навязывают способ работы и воспринимаются как черный ящик — вызывай вот это вот так-то для получения такого-то результата и больше ни о чем не думай. Их можно воспринимать как стандартные функции PHP. Ирония в том, что пакеты как раз стараются писать без привязки к фреймворкам…

#23 Re: Laravel 5.x » Как решить "ErrorException in VarCloner.php line 298"? » 01.06.2019 21:43:30

Как решить эту ошибку используя php 7.1 ?

Разобраться, почему в переменной не тот формат данных, который нужен. Скорее всего там, как и написано, не число, а временное представление типа "2019-06-01T...". Можно попробовать их посмотреть через отладчик, а не через dd(), или через var_dump(). Еще можно отключить error_reporting() для E_WARNING и/или E_NOTICE, но это очень плохой путь - разве что для отладки.

#24 Re: Laravel 5.x » php artisan make:auth без id » 01.06.2019 21:37:41

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

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

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

Делать ПК на "обычных" данных хорошо разве что в pivot-таблицах, где поле с автоинкрементом совершенно излишне.

#25 Re: Веб-разработка » Преобразование списков страниц туда и обратно » 16.04.2019 16:47:19

Первое: перечисление типа 5,6,7,10,15,16,17,21,29 преобразовать в 5-7,10,15-17,21,29

<?php
$s = '5,6,7,10,15,16,17,21,29';
$a = [];
$prev = $start = null;
foreach (json_decode("[$s,0]") as $n) {
  if ($n - 1 !== $prev) {
    $start === null or $a[] = $start === $prev ? $start : "$start-$prev";
    $start = $n;
  }
  $prev = $n;
}
echo join(',', $a);

Второе: перечисление типа 5-7,10,15-17,21,29 преобразовать в 5,6,7,10,15,16,17,21,29

<?php
$s = '5-7,10,15-17,21,29';
$a = [];
foreach (explode(',', $s) as $pair) {
  list($start, $end) = explode('-', $pair) + ['', ''];
  $end === '' and $end = $start;
  while ($start <= $end) { $a[] = $start++; }
}
echo join(',', $a);

Подвал раздела