Задать вопрос
Ответы пользователя по тегу Laravel
  • Почему в среде разработки Laravel работает медленно?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Извините, но
    поныл
    народ здесь как будто вообще никогда ни разработкой ни дебагом не занимался. Один сразу предлагает перейти на симфони (кроме того что это затратно по времени и требует скорее всего изучить еще один фреймворк, так и пользы будет ровно НОЛЬ, так как очевидно что проблема не в движке, а в реализации), причем налицо чистый незамутненный сомнением неаргументированный фанатизм, платят ему что ли за установку каждой симфонии?.. Другие тыкаются в ОС, как будто это волшебный пендель, на котором все сразу полетит... В общем случае докер действительно будет работать быстрее на линухе, но оспанели ОС вообще по барабану, отсюда вывод что проблема не в ОС.

    Первое - определить проблему. Как базовый вариант - ларавель дебагбар + телескоп. Смотреть что и как по времени отрабатывает, смотреть какие куски тормозят, делать точечные замеры исполнения. Обратить внимание на количество и качество запросов, вполне возможно что где-то натыкано левых или кривых запросов, еще и настаканных по 200 штук...
    Второе - 80% что тормозит не код, а бд, но тут это чисто статистическое предположение, так как что там у вас в базе никто не знает. Проверьте запросы, долговыполняющиеся прогнать руками через експлэйн, проверить наличие нужных индексов и отсутствие ненужных.
    Если критических косяков нет, то даже весьма средняя машинка потянет некрупный проект с небольшой базой.
    Ответ написан
    Комментировать
  • Можно ли как то внедрить Laravel постепенно, например установить как основной каркас и в него уже встроить CMS?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    разработчики все время советуют перейти на новые технологии а если точнее на Laravel и с MySQL на PostgreSQL чтоб сайт не только стал современным но и работал шустрее.
    Переход с самописа на лару - хороший шаг, переход на постгрес нужен только если нужны конкретные задачи, решаемые постгресом лучше чем мускулем. Например, если у вас есть большой массив json данных, хранимых в соответствующих полях и требующий каких-либо выборок на основании этих полей, то есть по сути - если у вас база хранит ненормализованные сортируемые данные. В остальном выгода от перехода с мускуля на постгрес будет не видна без микроскопа.

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

    Обычно заявы по типу "мускуль гуано, надо менять на постгрес" без конкретных аргументов признак поклонников карго культа, а не профи. Так что я бы послушал аргументы для начала, а то потом окажется что там индексы только первичные на таблицах, про explain никто никогда не слышал, а выборки идут по тысяче в циклах, но виновата, конечно же, тормознутая бд.
    Ответ написан
    3 комментария
  • Как в Ларавель Orchid выгрузить пользователей определенной роли?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Если роли реализованы через spatie, то
    $admins = User::role('admin')->get();, собсно емнип оркид в себе ролей не несет.
    Ответ написан
    Комментировать
  • Как сделать пакетную обработку в laravel?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Ребят вы знаете, в чем проблема, и куда копать....
    Нет конечно... Берете код, бьете на блоки, расставляете метки времени, отчет по затраченному времени пишете в лог. Проблемные места смотрите и решаете можете ли уменьшить время исполнения. Вангую что самые тормоза у вас будут на выборке из бд или на запросах к апи. В случае бд - вывести запрос и сделать explain. По результату уже можно будет что-то советовать. В случае тормозов с апи - тут уже ничего в плане оптимизации сильно не придумаешь, но в любом случае задачи лучше будет скинуть в очередь и уже оттуда они будут выполняться, пока не закончится список. Кроме того, выборка по одной записи из бд в цикле - классическая ошибка, нужно объединить все запросы в один через join или in(), а дальше работать с полученным массивом.
    Ответ написан
  • Как правильно интегрировать админку в Laravel?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    собираюсь сделать админ панель для интернет магазина.
    Зависит. Что вы там писали и какая у вас логика. Как универсальное решение может подойти Вояджер, он немного простоватый, но для несложной логики подойдет. В случае более-менее сложных связей писать бэк скорее всего придется самому. Как фронт популярным решением будет что-то типа LTE Admin.
    Ответ написан
    Комментировать
  • Почему у меня при миграции возникла ошибка в laravel 10?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Ошибка однозначно в кривом апгрейде лары до 10 версии. Самое простое что можно сделать - поднять новый проект на десятке, руками перенести код из контроллеров, моделей, миграций, сервисов...
    Ответ написан
  • Как полностью сбросить кеш статики в laravel?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Кеш именно статики, после обновление картинок уловно в public/assets в формате PNG, они упорно не отображаются даже при прямой запросе изображения в строке браузера.
    Кэш "статики" это чисто в вашем браузере. На другой машине все ваши картинки будут отображаться нормально при первом заходе, но так же перестанут подгружаться измененные при последующих заходах. Никакие "кэши ларавела" конечно же за это не отвечают.

    Как решения прописывать каждый раз новые пути и название картинок - но не оч удобно при разработки визуала.
    Можете использовать версию, что-то типа <img src="logo.png?<?=VER?>">, естественно надо будет менять эту константу при изменении картинок, хотя это и некоторого рода костыли. Правильным решением будет переход на сборку фронтенда сборщиками, но так тоже будет работать.
    Ответ написан
    Комментировать
  • Ошибки на странице после деплоя проекта на Laravel?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    {{isset($item->quantity) ? $item->quantity : '0'}}

    Единственное что могу предполагать это не совместимость версии и правил валидации кода PHP.

    APP_ENV=production 
    APP_DEBUG=false

    Плюс на локальной машине скорее всего отключен вывод варнингов.
    Ответ написан
    5 комментариев
  • Почему Laravel 8 перестал выводить ошибки?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Перестали выводится ошибки , только 500-я , в логах такие записи
    Скорее всего в .енв вы поменяли окружение с дев на прод. Соответственно ошибки только логируются.

    PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 266240 bytes) in /var/www/lobochkin28/data/www/lobochkin.ru/laravel-blog/vendor/laravel/framework... on line 215, referer: laravel-blog.lobochkin.ru/admin/category
    Скорее всего где-то у вас бесконечный цикл, или бооольшой массив. Смотрите что у вас там происходит.
    Ответ написан
  • Почему шаблон Blade выдает ошибку Undefined variable $decryptedPassword?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    -@if($decryptedPassword)
    +@isset($decryptedPassword)
    Ответ написан
    Комментировать
  • Почему на сайте laravel с протоколом https не отображаются картинки?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Первое что нужно сделать - почистить кэши.
    Далее, проверить существует ли папка / симлинк на сервере, смотрите в сторону is_dir(), is_link()...
    После этого уже что-то думать.
    Ответ написан
    6 комментариев
  • Что не так в моем методе утаения товаров из корзины?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Начнем с того что роуты так не пишутся. А хелпер роута работает не так как у вас предполагается.
    //router 
    ...
    Route::post('/add/{productId}', [CartController::class, 'addToCart'])->name('add.product.toCart');
    Route::delete('/remove/{productId}', [CartController::class, 'remove'])->name('product.remove');
    ...
    
    //Controller
    public function remove($productId)
    {
    /* это вообще в мидлваре должно происходить, тут ему делать нечего, впишите роут в ауч группу...
        if (!Auth::check()) {
            return redirect()->route('login');
        }
    */
        $cart = Session::get('cart');
        if (array_key_exists($productId, $cart)) {
            unset($cart[$productId]);
            Session::put('cart', $cart);
        }
        return redirect()->route('cart.index');
    }
    ...
    //HTML
    <form action="{{ route('product.remove', ['productId'=>$productId]) }}" method="post">
    // читать как работает хелпер route, посмотреть какой урл он выдает у вас сейчас, плакать, править...


    на первом просто редиректит,
    Во первых - редирект куда? Во вторых, стоит заглянуть в сгенерированный хтмл и посмотреть какой там реальный урл формы. Так же при отправке посмотреть нетворк и посмотреть что и куда реально отправляется и с какими данными.
    Ответ написан
  • Как в laravel создать связь модель к таблице?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    У одного Product может быть несколько Photo. Какую связь создать в модели к таблице?
    Вроде из определения должно быть очевидно. У продакта хэз мэни фото, у фото можно (но не обязательно) белонгс ту продакт.
    Ответ написан
    7 комментариев
  • Как отдать view как картинку в Laravel?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Если важно именно качественный рендер, то вроде кроме как хеадлесс хорм -> pdf -> image преобразований ничего не придумано.
    Ответ написан
  • Почему браузер вместо того, чтобы скачать файл PDF, патается его отобразить?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    cajka-d, 1)
    Вывода перед заголовками тоже нет, если такое есть, то laravel сразу бы ошибку выдал.
    Это варнинг, а не ошибка, так что вполне может игнорироваться, в зависимости от настроек.

    2) Вроде в ларе респонс должен указывать заголовки отдельно:
    return response($content, 200)
                ->withHeaders([
                    'Content-Type' => $type,
                    'X-Header-One' => 'Header Value',
                    'X-Header-Two' => 'Header Value',
                ]);


    3) Попробуйте завести вручную:
    В контроллере вместо return $pdf->download($filename); сделайте руками вывод заголовков и ечо содержимого пдф, затем ексит. Если сработает - значит респонс дополнительно обрабатывается после ретурна из контроллера...
    Ответ написан
    Комментировать
  • Для чего Laravel-разработчики стремятся создать избыточные API ресурсы?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Ведь если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray(), не?
    Во первых - в 90% случаев модель не достается "голой", а тянет с собой связанные объекты, например роли или аватарки или еще что-то. Они явно лишние в выдаче.
    Во вторых - не все поля одинаково полезны, скорее всего часть полей не должны попадать в выдачу, например хеш пароля или ключ авторизации...
    Ответ написан
    Комментировать
  • Как добавить добавить токен для авторизованного пользователя?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    В вашем случае есть несколько способов, различных по реализации.
    1) Самый простой - не использовать токен в заголовке, а переслать его как пост параметр, соответственно линк будет по сути формой (точнее ее кнопкой субмит). На сервере соответственно проверяете токен вручную из пост запроса, обратно отдаете собсно поток файла, предварив его соответствующими заголовками, что-то типа
    header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=somefile.ext");
        header("Content-Transfer-Encoding: binary");
        header("Content-Type: binary/octet-stream");
        readfile($filePath);

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

    3) Так же через фетч отдаем заголовки, на сервере формируем временный разовый линк с каким-нибудь хитрым хэшем, обратно возвращаем этот линк, далее в колбэке делаем window.location = хитрый_линк, и с сервера с заголовками из первого варианта отдаем файл, - вуаля, получаем диалог сохранения. Беда как и в первом случае с отсутствием заголовков во втором запросе с хитрым линком, то есть те же яйца, вид сбоку... Единственно что тут можно прописать урл скачивания как публичный, и быть уверенным что линк точно получен авторизованным пользователем.
    Ответ написан
  • Почему в response ответ выводит 500 (Internal Server Error)?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    storage/logs/laravel.log
    Ответ написан
    Комментировать
  • Как сохранить другую сущность при авторизации?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Подскажите пожалуйста как сохранить модель Doctors как авторизованного пользователя?

    1) Модели не называются во множественном числе. Модель Doctor привязывается к таблице doctors. И "я получаю модель Users," - то же самое, модель User.
    2) Доктор или пациент это не пользователь, это либо роль, и тогда надо делать RBAC, либо авторизированная сущность, и тогда нужно связывать юзера и сущность через один-к-одному, в случае если доктор и пациент кардинально различаются по свойствам, а не просто имеют разные права. А пользователь просто способ авторизации/идентификации.
    Ответ написан
    Комментировать