Ответы пользователя по тегу Laravel
  • Как брать теги только принадлежащие той модели?

    neuotq
    @neuotq
    Прокрастинация
    Так а в чём проблема, всё есть в документации, полиморф отношения:
    https://laravel.com/docs/8.x/eloquent-relationship...
    Ответ написан
  • Как в cors laravel сделать возможнность доступа к api c одного или нескольких ip адресов?

    neuotq
    @neuotq
    Прокрастинация
    Мне кажется легче всего через свой Middleware
    Создаешь новый, там каким-то образом указываешь (берешь из базы или из настроек, просто хардкод) список белых ip, в методе handle передаётся $request оттуда можно брать ip адрес. Если будет не в твоём белом списке, просто кидать исключение, делать редирект или как-то ещё прерывать дальнейшее выполнение.
    Ответ написан
    Комментировать
  • Как получить правильно значение связанной таблицы в laravel?

    neuotq
    @neuotq
    Прокрастинация
    А почему имя класса с маленькой буквы? addresses::class, ?
    Ну да ладно.
    Ок, вы задали метод который указывает связь, назвали его address, код как я понимаю такой:
    public function address()
        {
     /* select в целом хорошо, чтобы меньше данных брать и гонять туда сюда, но если нужно больше, то можно убрать. Без id не будет работать тк не сможешь установить связь       */
     return $this->hasOne(addresses::class,'id','address')->select('address','id');
       }

    Далее можно добавить вычисляемый атрибут, назовём его например
    public function getAddressString()
        {
           //optional - чтобы вернуть null если  address вернёт null и не упасть в ошибку
       return optional($this->address)->address;
        }

    Ну и далее, в коде можешь использовать $organization->address_string; который если сможет вернёт строку адреса.
    Подробнее тут.
    Ответ написан
    Комментировать
  • Почему не запускается laravel 7 локально?

    neuotq
    @neuotq
    Прокрастинация
    У вас что-то с версией php, нужно чтобы была >= 7.2.5.
    Проверьте и в консоле php -v и в вашей сборке XAMPP с помощью phpinfo()
    Версия в консоли важна, так как от неё зависит исполнение команд, артизана и установки в целом.
    Ну а на а сервере, что очевидно, чтобы вообще приложение работало.
    Ответ написан
    Комментировать
  • Laravel 7.1 и Mongodb 4.2 как использовать?

    neuotq
    @neuotq
    Прокрастинация
    Всё хотят и работа активно ведётся, делают новую версию(без обратной совместимости).
    Поэтому ждать релиза и пока продакшн проекты не обновлять.
    А так, есть dev ветка, можно поучаствовать в тестах и экспериментах. Laravel 7 уже поддерживается.
    Вот можно и следить за реализацией фич.
    Ответ написан
    3 комментария
  • Как вывести "новую" переменную?

    neuotq
    @neuotq
    Прокрастинация
    Есть простой вариант, легче вам будет сделать так:
    в моделе User
    /**
     *  Получаем читаемую дату.
     *
     * @return string
     */
    public function getHumanDateAttribute()
    {
      //Таймзону лучше брать из настроек приложение, а не хардкод
      $timezone = config('app.timezone');
       return  Carbon::parse($this->created_at, $timezone)->isoFormat('Do MMMM YYYY');
    }


    Ну и потом в коде или в шаблонах вызываешь
    $user->human_date;
    Если делаешь сериализацию в json и нужно чтобы этот атрибут был и там, то в моделе добавляешь:
    /**
         * The accessors to append to the model's array form.
         *
         * @var array
         */
        protected $appends = ['human_date'];
    Ответ написан
  • Стоит ли использовать Laravel Airlock или можно не парится и использовать Passport?

    neuotq
    @neuotq
    Прокрастинация
    Если для вашхи задач Passport подходит, всё хорошо, оставайтесь на нём. Это правило касается любых решений и технологий. Более того, сам Passport не устарел, это официальный OAuth2 пакет от команды.
    Airlock же проще, использует другой подход для аутентификации, более легковесный, но закрывающй большинство задач стоящих перед "как нам проверить что за зверь стучится в API/от SPA".
    Вообще это тема отдельной статьи и они даже есть в инете, но грубо говоря Passport > Airlock , потому как из Airlock убрали все сложности Oauth
    Ответ написан
    Комментировать
  • Как подгрузить разные формы в Blade Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Blade в любом случае это рендринг на стороне сервера.
    Любые динамические действия это JavaScript(за редким исключением).
    Значит далее вы уже решаете каким путём идёте.
    Можно идти популярным ныне путём создания компонентов и постройки интерфейса на реактивных фронтэнед фреймворках. При это не значит что нужно переписывать весь код, весь сайт делать SPA и тд. И react и vue, да и angular (и тд) вполне можно использовать и в более меньших масштабах, для небольших интерактивных компонентов. Laravel умеет со многими дружить практически из коробоки, в сети полно инструкций на этот счёт. И этот путь я вам советую.
    Второй вариант, более классический. Это решение на jquery (хотя можно и чистым js). Здесь вы можете делать например Ajax запросы к серверу, и там генерировать, в том же blade, часть select, а потом динамически подгружать.
    Кстати в Blade сейчас тоже появились компоненты (Laravel 7) советую почитать, возможно будет полезно.
    PS кстати на счёт первого подхода, вместе с Laravel 7, недавно вышел Livewire , специально разработанный под Laravel фулстек фреймворк для создание динамических сайтов, советую глянуть. Позволит быстро строить разные штуки, и порог входа ниже и проще React и Vue. В нём больше ориентация на AlpineJS. И в любом случае, после изучения, будет легче потом и Vue и React и изучать если что.
    Ответ написан
    Комментировать
  • Выходит ошибка, не могу понять в чем дело?

    neuotq
    @neuotq
    Прокрастинация
    Если User::find(1) возвратить null, а значит пользователя с id 1 нет, то дальнейшая цепочка не будет работать, так как "волшебство" не получится из-за отсутвия объекта класса User.
    Лучше всё таки юзера заранее найти и сохранить в переменную(так же это позволит не делать доп запросы к базе, если будете использовать сущность еще раз).
    $user = User::find(1);
    А далее уже вы можете испоьзовать првоерки существования, перед выовом метода, например:
    $moderator = isset($user) ? $user->moderator : null;
    Ответ написан
    Комментировать
  • Как в laravel реализовать логику получения статуса заказа при изменении записи в бд?

    neuotq
    @neuotq
    Прокрастинация
    Я возможно чего-то не понял, но вопрос странный, особенно для того кто просто, хотя бы заглянул в документацию.
    В Laravel есть события, их можно создавать, слушать и тп.
    Более того, там даже пример кода для событий по статусам заказа (доставка, и отправка уведомления о доставке) :-)
    Ответ написан
    Комментировать
  • Как удалить файл в laravel?

    neuotq
    @neuotq
    Прокрастинация
    Чтение документации и изучение хорошей пратики всё таки немного облегчает жизнь.
    Итак.
    Хранить в БД url, как делаете вы, обычно не выгодно и неинтересно. Это нужно в исключительных случаях одно разового мини проекта, когда вы точно знаете настроки меняться не будут и файлы редактироваться не будут. Либо, в специализированных БД для кеширования результата генерации url.
    В иных случаях хранить в БД нужно имя файла. Имя файла в идеале разбить конечно, но в подавляющем числе случаев достаточно будет два поля: имя с путём + имя диска. Это закроет большинство кейсов для будущего масштабирования. Но если уж совсем лень, то имя диска тоже можно опустить, хотя я советую добавить это поле.
    Далее, ваш код:
    $path = Storage::putFile('public/img', $request->file('img'));
    $url = Storage::url($path);
    $post->img = $url;

    Меняем на более простой (хотя аналог можно и из вашего конечно сделать, убрав строчку с $url и сохраняя в модель $path)
    // file('img') - это имя файла(инпута формы например) из запроса
    // store('img') - это имя подпапки для
    // 'public' - Диск из настроек (см filesystems.php)
    $path = $request->file('img')->store('img', 'public');
    $post->img = $path;

    Теперь и удалать легко. не забываем что с файлами мы работаем(по умолчанию), относительно папки /storage/app/(слеш в начале я поставил чтобы показать что путь от корня папки с проектом)
    Поэтому, когда вы передаёте в метод удаления сгенерированный заранее url. он ничего не найдёт и не удалит.
    Но теперь мы храним как раз относительный путь файла.
    Storage::delete($post->img);
    Теперь сработает, не забываем очистить поле, после удаления, если вы при этом не удаляете сам пост.

    Далее, сам url получаем так
    $url = asset($post->img);
    Ну, или если вы делаете сразу в blade шаблонах
    <img src="{{asset($post->img)}}">
    Ну и конечно я всякие проверки и тп опустил для простоты
    Ответ написан
    Комментировать
  • Как грамотно реализовать мультиязычность React и Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Главный спорный вопрос который вам стоит решить: где хранить статичный первод (надписи, что не меняются или меняются редко, например название кнопки - Отправить/Submit, те все то, что мы обычно не храним в БД и редко меняем).
    Варианта два:
    1. Использовать только реакт для этого, тогда берете пакет react-localization, там достаточно простые и понятные принципы, сложностей нет.
    Преимущества: фронт полностью отдельно живёт и не зависит от бэкенда, нет дополнительных прослоек, нет привязки к определенному бэекенду и тп

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

    Лично я всё же склоняюсь к первому варианту, так как люблю писать максимально (желательно полностью) назависимые фронтенд приложения.

    Теперь вторая часть вопроса. Уже касаемо динамических переводов (это контент, комментарии, и тп, условно говоря всё что мы храним в бд, или храними информацию о них в бд).
    Здесь я советую положится на Laravel, берёте пакет от spatie laravel-translatable, он позволяет быстро строить удобные интерфейсы редактирования/чтения переводов в БД, пишете простое API и ри инициализации react приложения получаете данные нужные вам локализации, либо даже отправляете все сразу (они хранятся в json поле mysql/ваше БД, даже доп преобразований особо не потребуется).
    Но вариант с отправкой только нужной мне нравится больше, смена локали событие редкое, а вот экономия на размере переданных данных будет существенная.

    Ну, а далее уже вешаешь всякие кеширования тп, чтобы всё летало и готово.
    Ответ написан
    3 комментария
  • Laravel - при запуске миграций выдает ошибку - Unknown database 'laravel'?

    neuotq
    @neuotq
    Прокрастинация
    Скорее всего настройки просто скешировались.
    Выполните в консоле следующую команду
    php artisan config:clear
    Ответ написан
    Комментировать
  • Как настроить slug в Laravel?

    neuotq
    @neuotq
    Прокрастинация
    Самый простой способ это:
    public function page($slug) {
    $page = Page::where('slug', $slug)->firstOrFail();
    
    return view('template.pages', [
      'pages' => $page
     ]);
    }
    Ответ написан
    3 комментария
  • После перехода на https я получаю ошибку. Почему так происходит?

    neuotq
    @neuotq
    Прокрастинация
    1. Проверить .env файл APP_URL= установи с https:// , хотя обычно это не влияет, но потенциально может использоваться где-либо и в зависимости от настроек http сервера выдавать ошибку.
    2. Очищаем кеш настроек:
    php artisan config:clear
    php artisan config:cache
    3. Очищаем общий кеш
    php artisan cache:clear
    Ответ написан
  • Нужен ли репозиторий для Eloquent??

    neuotq
    @neuotq
    Прокрастинация
    Чет вы сумбурно написали и смешали разные вещи.
    В ларавел есть отдельно удобные инструменты/обертки для работы с базой данных, и отдельная вещь это Eloquent ORM по строенная по принципам (анти или нет) патерна ActiveRecord.
    Так вот, значит обертки над базой данных ты используешь и реализуешь/используешь удобный тебе подход/патерн к организации моделей. В целом, я советую уходить от Eloquent если проект будет развиваться в перспективе и/или если его будут вести несколько человек, так как начинается брожения моделей-свойств и и методов Eloquent по проекту, что в конце концов приводит к усложнению отладки, развития изменения/добавления редактирования свойств и тд и тп. Конечно если проект простенький, без супер логики и ты знаешь что дальше будет все просто, то можно не парится.
    Ну и советую изучить и прочитать этот коммент на тостере напрямую на эту тему:
    https://toster.ru/answer?answer_id=1127442#answers...
    Ответ написан
  • Почему передаётся пустой объект после изменения адреса роута?

    neuotq
    @neuotq
    Прокрастинация
    Все просто, ресурсный контроллеры создают роуты с переда автоматически на основе базового имени роута, таким образом у вас теперь:
    Route::resource('/blog', 'NewsController'); и таким образом ваш ресурсный контроллер ожидает переменную одну, а получает другую. Вообще у тебя должны быть написано Route::resource('blogs', 'NewsController'); и таким образом в параметры уйдет переменная blog с объектом. Но так как метод у тебя уже написан $news (да не удачно, как же единственное число, хех. Впрочем сам я такое попадался).
    Так, короче говоря в web :
    Route::resource('blog', 'NewsController')->parameters([
        'blog' => 'news'
    ]);

    Ну и в параметрах методов контроллера замени везде "$id" на "News $news", хотя в целом у тебя уже не ресурсный контроллер, например метод store. Так что возможно тебе лучше расписать все в ручную. В целом изначально ресурсные контроллеры подходя либо под api логику работы, когда ты имеешь дело с Моделью/Сущностью как с ресурсом и тебе нужны стандартные методы, либо многие используют в своих CRUD логиках, но опят таки только если логика без дополнительных усложнений и переплетений как у тебя. Де факто у тебя не ресурсный контроллер и я настоятельно рекомендую расписать его в ручную.
    PS еще для отладки роутов отлично подходит команда php artisan route:list будет видны все роуты которые ларавел генерирует, с соответствующими параметрами переменными.
    Ответ написан
    1 комментарий
  • Как из ларавел выкидывать логи например на почту, телеграмм?

    neuotq
    @neuotq
    Прокрастинация
    На самом деле все просто, если почитать документацию, можно узнать про клевый класс App\Exceptions\Handler , который обрабатывает исключения, тебе нужен его метод report, который ты можешь переопределить и написать свою логику.
    Вот даже легко гуглится пример с отправкой имейла (человек даже свой пакет сделал https://github.com/squareboat/sneaker ).
    Короче говоря сюда, и вперед творить волшебство:
    5b7bb11abd163261551026.png
    Ответ написан
  • Можно ли при миграции передать функцию БД?

    neuotq
    @neuotq
    Прокрастинация
    Так не выйдет.
    У вас варианты либо используя события модели (creating) и писать всю логику в php, либо реализовать это в триггере в PostgreSQL который будет срабатывать при создании новой записи.
    Ответ написан