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

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Вынести в метод и вызвать три раза? В чем, собсно, проблема?
    Ответ написан
    Комментировать
  • Есть ли стандартная реализация ACL (роли: админ, редактор, юзер) в Laravel?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Есть интерфейс для ACL, но имплементация - скудная. Зато есть другая имплементация, использующая БД и кэширование - bouncer.
    Ответ написан
    4 комментария
  • Как записать по-другому?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    https://rachidlaasri.com/php/laravel/macro/2018/04...

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

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Потому что нужно читать правильный раздел: https://laravel.com/docs/5.7/hashing

    Это то, что нужно использовать для паролей, к примеру. Одностороннее хэширования, которое не позволяет восстановить исходные данные никак и никому.
    Ответ написан
    Комментировать
  • Что-то странное с удалением из бд?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Ну и куда вы запрос отправляете? Я вижу, что это DELETE запрос, значит идти он должен, судя по вашим раутам, на /posts/123, где вместо 123 айди вашего поста. Если изначально предполагалось делать что-то другое, а не DELETE, то меняйте его..

    Ошибка легко гуглится, даже не знаю зачем я это расписываю.
    Ответ написан
    Комментировать
  • Как валидировать параметры роута, или как заменить нативный класс Request на свой собственный?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Вот сниппет с моего проекта. Собственно, я обычные реквесты не использую вообще, и вся валидация всегда в FormRequest'е, так что такое мне подходит. Валидировать как обычно - в rules, самыми обычными правилами, только названия параметров должны начинатся с { и заканчиватся на } - это на всякий случай, что бы нечайно не смешать разные параметры.

    use Illuminate\Foundation\Http\FormRequest;
    
    abstract class Request extends FormRequest
    {
        /**
         * Get data to be validated from the request.
         *
         * @return array
         */
        protected function validationData()
        {
            return $this->all() + $this->routeParameters();
        }
    
        /**
         * Get route parameters for this request and wrap them into {} each.
         *
         * @return array
         */
        protected function routeParameters()
        {
            return collect($this->route()->parameters)
                ->mapWithKeys(function ($item, $key) {
                    return ['{'.$key.'}' => $item];
                })
                ->toArray();
        }
    }
    Ответ написан
    Комментировать
  • Где в Laravel можно переопределить методы работы с отношениями (detach() и toggle())?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Сделать это можно, но делать этого не нужно. Хотите менять поле - создавайте свои обьекты реляций, и переопределяйте нужные вам методы сколько угодно. А дефолтные не трогайте.
    Ответ написан
  • Нужен совет по вебсокетам?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Берете socketcluster (если self-hosted) либо любое другое решение (если не self-hosted), поднимаете. Далее выкидываете все, что написал предыдущий прогер. Припиливаете вью, делаете вью компайл на стороне клиента. При заходе на страницу - подписываетесь на канал сокета (напрямую, либо с помощью либы-обложки Echo от laravel), потом загружаете ваши 50-500 записей, а после слушаете в этом канале эвенты ИЗМЕНЕНИЙ каждой отдельной записи. Они же не все 500 одновременно изменяются? Ну и при изменениях отправляете эти эвенты с помощью встроенных средств laravel.

    Это самая обычная схема работы сокетов. И тут вам не то что 10кб, а несколько десятков байт должно хватить на каждое сообщение. Конечно, их будет много, но сокеты на это и рассчитаны. Если не хотите платить (но прийдется платить за сервак и админить) - берете self hosted.
    Ответ написан
  • Как грамотно переназначить view для login в Laravel 5.7?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Читайте ответ Константин Б..

    А вообще, если вам нужны темы, то делайте свою имплементацию ВьюКомпоузера поверх существующей, что бы она автоматически включала в путь нужную вам тему. Само по себе переопределения методы для единоразовой смены вьюшки - отлично, но если вам во всем приложении нужны темы - это уже дичь.
    Ответ написан
    2 комментария
  • Как задать маршрут "/" в модуле Laravel?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Ну по моему все очевидно - в вашем ModuleLoader'е вы загружаете рауты напрямую из __DIR__.'/'.$module.'/Routes/routes.php' (лучше app_path(), ну да ладно), и, скорее всего, вы подключаете этот провайдер после дефолтного ларавеловского, который грузит routes/modules

    Либо используете одно (и группы внутри соответствующих модулей - более правильное решение), либо другое (ваш modules.php, но это бредовая имплементация, учитывая, что laravel позволяет делать большее (и вы уже это сделали))
    Ответ написан
    Комментировать
  • Как исправить ошибку POST запроса 405 Not Allowed, передаваемый через API?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Гляньте php artisan route:list. Если уверены, что на /notification есть POST метод, то смотрите в cors - он с какой-то там версии ларьки из коробки, и он тоже кидает эту ошибку. Помимо него в дефолтном наборе ларьки нету ничего, что могло бы приводить к такому результату. Так что если с cors все в порядке (попробуйте его оффнуть либо настроить), то делайте Find in path в /vendor (а лучше - во всем проекте) и ищите любые упоминания 405, MethodNotAllowed и METHOD_NOT_ALLOWED.
    Ответ написан
    6 комментариев
  • Как правильно менять дизайн в Laravel?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Все то что не в /vendor можете менять - это ваш проект, и делать с ним можете что хотите. Да, можно и нужно править login.blade.
    Ответ написан
    3 комментария
  • Какой запрос выбрать для скопа?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Второе - не совсем по теме Eloquent'а. Он про магию, и тут скоупы приходятся к месту. А если нужны будут еще условия? Ну, допустим остаите первым вызов этого метода, а если нужны будут еще условия в виде методов? Вот для чего были созданы скоупы, так что первый вариант - однозначно лучше.

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

    Далее: почему бы не сделать $user->products()->whereSlug($slug)? Учитывая контекст, смею предположить что именно такой запрос вам нужен не так уж и часто, а значит это - неплохое решение. Нужен будет эктив - ну добавляете скоуп в модель Product и имеете счастье, типа $user->products()->whereSlug($slug)->isActive(). Последние два метода относятся к конечной модели Product, а значит их дублировать не нужно, а вот релейшены в разных моделях (
    $user->products(), $page->products(), $something->products()
    ) - нужно, так что это правильный вариант.

    Тем более, Product не должен быть ответственен за методы юзера (как в вашем втором варианте), а если туда напихать еще несколько от разных моделей, со всякими $active = true - получится каша.

    TL;DR: Придерживайтесь того, что предлагает Eloquent, и будет вам счастье.
    Ответ написан
    22 комментария
  • Почему выводит ошибку Call to undefined method routeNotificationFor()?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Смотрите ответ Алексей Скляров . Нотификации в Laravel заточены под отправку юзерам, отправить их "глобально" нельзя, только если буквально отправить каждому юзеру отдельную нотификацию. В виду этого, модель User по дефолту юзает трейт Notifiable, который внутри и содержит метод routeNotificationFor, отвечающий за связыванние данных юзера (номер телефона, эмейл, релейшены в базе) и самих нотификаций.

    Да, первый аргумент - notifiable_id & notifiable_type. Собственно, по дефолту это всегда айди юзера и значение из морф мапа для модели юзера, либо неймспейс + название класса юзера.
    Ответ написан
    Комментировать
  • Где можно найти options для ControllerMakeCommand?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Как это нету? Все есть:
    /**
         * Get the console command options.
         *
         * @return array
         */
        protected function getOptions()
        {
            return [
                ['model', 'm', InputOption::VALUE_OPTIONAL, 'Generate a resource controller for the given model.'],
                ['resource', 'r', InputOption::VALUE_NONE, 'Generate a resource controller class.'],
                ['invokable', 'i', InputOption::VALUE_NONE, 'Generate a single method, invokable controller class.'],
                ['parent', 'p', InputOption::VALUE_OPTIONAL, 'Generate a nested resource controller class.'],
                ['api', null, InputOption::VALUE_NONE, 'Exclude the create and edit methods from the controller.'],
            ];
        }
    Ответ написан
    Комментировать
  • Как после удаления данных из таблицы, задать новые ID записям и обновить auto increment?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Нет, ничего обновлять не нужно. Если у вас появляются миллионы записей в день в одной таблице - используйте uuid.
    Ответ написан
    Комментировать
  • Как использовать БД WordPress для Laravel?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Если вы мигрируете с ВП на Eloquent/Doctrine, то переделайте базу под себя. Напишите пхп скрипты, в которых частями будете со старой базы создавать новую, пока все не получится как надо. Тогда можете смело удалять старую базу, и производить тоже самое с продакшеном.

    Если же нужно поддерживать и то и то, то тут только репозитории. Непонятно что там изменится в ВП в будущем, но в таком случае и сам Eloquent - не лучшее решение, уж лучше маппить доктрину. Если же нужно быстро и костыльно, то с вашим corcel'ом тоже выйдет.
    Ответ написан
  • Почему Node+Redis сервер не видит ивенты вызываемые Laravel (5.7)?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    1) проверьте, не закеширован ли конфиг. Сделайте php artisan config:clear
    2) "Ивенты почему-то обрабатываются только через слушателя" - потому что используете интерфейс ShouldBroadcast а не ShouldBroadcastNow. В вашем случае ивенты сначала попадают в очередь, а потом она их раскидывает.
    Ответ написан
    Комментировать
  • SPA vue&laravel?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Можете, но есть нюансы:
    - не всегда вам нужна именно веб версия, иногда нужны лишь данные. В таком случае использование куков - не очень приятное занатие, особенно если оно под это не заточено (а большинство вещей - не заточено) )
    - когда фронтер захочет тестить фронт под разными учетками, имея только соц. авторизацию, он сильно захочет какую-нить токенную авторизацию)
    - для сокет серверов, при правильной реализации, не нужен юзер, только его достоверный id. Не знаю как там oauth (passport), но jwt точно может это предоставить без лишнего оверхеда

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