Задать вопрос
Ответы пользователя по тегу Laravel
  • Как правильно интегрировать админку в 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, либо авторизированная сущность, и тогда нужно связывать юзера и сущность через один-к-одному, в случае если доктор и пациент кардинально различаются по свойствам, а не просто имеют разные права. А пользователь просто способ авторизации/идентификации.
    Ответ написан
    Комментировать
  • Как лучше хранить данные при пошаговой регистрации?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Всем привет. Хочу сделать пошаговую регистрацию на сайте. Как бы это сделать правильнее?
    Нет рецепта для общего случая. Всегда есть нюансы, если вы делаете что-то чуть в сторону от классики.

    1. После каждого шага сохранять в БД? Много запросов бессмысленных
    Ого, много это сколько? И почему бессмысленных? Вы же осмысленные данные туда пишете?

    У кого, какое мнение? Где какие подводные камни/нюансы?
    Мнение: С таким описанием нихрена не посоветуешь. По конкретным шагам можно что-то обсуждать.
    В целом же: Если первый шаг позволяет ввести все данные необходимые для входа в аккаунт, то писать надо в бд, ну и соответственно выслать письмо с подтверждением. В бд можно писать так же стадию прохождения. Если остальные пункты не являются критическими для функционала, можно предлагать при следующем логине дозаполнить данные, основываясь на записанном номере стадии. Ну или просот сразу перекидывать на нужную фазу, если она является необходимой.
    Ответ написан
    Комментировать
  • Где лучше хранить переводы в мультиязычном сайте?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Для лары есть пакеты с переводами уже готовые, если их функционал подходит, не вижу смысла строить свой велосипед.
    Если же нужно очень кастомное решение с администрированием на уровне админки, то бд будет более качественным решением, так как работа с поиском и сортировкой это больше про РБД, нежели про файлы.
    Ответ написан
    Комментировать
  • Как правильно сформировать такой запрос?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Проще всего рут комментарию давать парент_ид равный своему ид, тогда все становится элементарным - ордер по парент_ид, креатед_эт. При выводе просто проверять если парент = ид. А все коментарии которые ответы на ответы все равно писать как ответ на рут коментарий, так как они будут тупо по дате строиться, и разницы в принципе нет. Разве что вы хотите чтобы ветвление было бесконечным, тогда проще ввести рут_ид.
    Ответ написан
    Комментировать
  • Как сгрупировать запрос в Laravel?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Что-то типа:
    $a = Model::orderBy("id", 'desc')->limit(3);
    $b = Model::latest()->union($a)->get();
    Ответ написан
    Комментировать