Задать вопрос
Ответы пользователя по тегу Laravel
  • Сидер не видит фабрику, хотя она есть. В чём может быть проблема?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Я просто не понимаю откуда берётся Providers в пути автозагрузки
    модель расположена в нестандартном месте
    App\Providers\Models
    от этой модели вызывается метод factory который относится к трейту HasFactory, там вызывается куда передается неймспейс твоей модели и подставляется к шаблону для неймспейса фабрики

    Соответственно есть 2 пути решения:
    1) перенести модель по пути App\Models (переносишь файл, обновляешь неймспейс)
    2) объяснить laravel где искать класс:

    В GameFactory
    class GameFactory extends Factory
    {
        protected $model = \App\Providers\Models\Game::class;
    ...


    В app/Providers/AppServiceProvider.php
    public function boot(): void {
         // ...  
        Factory::guessFactoryNamesUsing(function(string $modelName) {
             return 'Database\\Factories\\' . class_basename($modelName) . 'Factory';
        });
    }
    Ответ написан
    2 комментария
  • Как использовать и регистрировать мидлвар в ларавель 11?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    https://spatie.be/docs/laravel-permission/v6/basic...

    app.php
    ->withMiddleware(function (Middleware $middleware) {
            $middleware->alias([
                'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
            ]);
        })
    Ответ написан
    2 комментария
  • Как разместить laravel в подпапке?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    мне кажется тебе нужно не на уровне nginx это делать, а на уровне роутов ларавель. в ларавель есть роуты api, для этих маршрутов все идет черед префикс /api. нужно по аналогии реализовать /laravel (ну а все остальные варианты доступа убрать)

    Например вот такой провайдер (ну или можно в стандартном провайдере, но я бы там закоментил просто стандартный вариант, а кастом в новый провайдер унес)
    <?php
    
    namespace App\Providers;
    
    use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
    use Illuminate\Support\Facades\Route;
    
    class MyRouteServiceProvider extends ServiceProvider
    {
        /**
         * The path to your application's "home" route.
         *
         * Typically, users are redirected here after authentication.
         *
         * @var string
         */
        public const HOME = '/laravel/home';
    
        public function boot(): void
        {
            $this->routes(function () {
                Route::middleware('laravel')
                    ->prefix('laravel')
                    ->group(base_path('routes/laravel.php'));
            });
        }
    }


    и подключить его в config/app.php
    'providers' => ServiceProvider::defaultProviders()->merge([
            /*
             * Application Service Providers...
             */
    
            App\Providers\MyRouteServiceProvider::class,
        ])->toArray(),
    Ответ написан
    2 комментария
  • Как решить проблемы c регистрацией посредников (Middleware) в Laravel 11 версии?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Я развернул новый проект лары и скопировал туда твой код, все работает

    1. Проверь что путь файла CheckAdminMiddleware.php соответствует неймспейсу
    App\Http\Middleware

    2. Попробуй сбросить кэш
    php artisan cache:clear
    composer dump-autoload

    3. Если запускаешь проект в докере то убедись что изменения с локали ушли в контейнер

    UPD
    Не сразу обратил внимание что у меня не 11 лара, установилась Laravel 10

    В ларавель 11 больше нет App\Http\Kernel::class (ну наверное его можно притащить туда и какими-то костылями заставить работать, но речь не об этом)

    Все конфигурации теперь в bootstrap/app.php
    Добавь в bootstrap/app.php
    ->withMiddleware(function (Middleware $middleware) {
    ...
            $middleware->alias([
                'admin' => App\Http\Middleware\CheckAdminMiddleware::class
            ]);
        })


    https://laravel.com/docs/11.x/releases#structure
    Ответ написан
    5 комментариев
  • Почему маршруты определенные в пользовательском сервис-провайдере в Laraval недоступны?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    <?php
    
    namespace App\Modules\Orders;
    
    use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
    
    class OrdersServiceProvider extends ServiceProvider
    {
        public function boot(): void
        {
           $this->routes(function () {
                Route::prefix('api/orders')
                    ->group(base_path('routes/api/orders.php'));
            });
        }
    }


    Также, рекомендую сравнить неймспейс в провайдере и в конфиге где его подключаешь, и путь к новому файлу с роутами, что в папке routes действительно есть подпапка апи и в ней файл
    Ответ написан
    Комментировать
  • Laravel Request - как работает?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Потому что у тебя в request1 и в request2 лежит индекс одного и того же объекта https://www.php.net/manual/ru/language.oop5.refere...
    Ответ написан
    24 комментария
  • Как исправить ошибку Missing required parameter?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет!

    Вместо index.blade.php лучше бы ты предоставил как указан маршрут в web.php (f.e.) и не весь файл, а только один этот маршрут. Точно так же и с контроллером, все остальные методы кроме update можно было бы убрать.

    В ошибке сказано
    URI: admin_panel/services/{service} Missing parameter: service


    Я вижу несколько возможных причин:
    1
    action="{{ route('services.update', $services['id']) }}"
    указан не на той форме, которая отправляется (надо проверить html форму прежде чем нажать сабмит, если это так то надо привести отправляемую форму в порядок)
    2 в
    action="{{ route('services.update', $services['id']) }}"
    не всегда был
    $services['id']
    , а после добавления его в шаблон на фронте страница не обновлялась или закеширована (надо проверить html формы прежде чем нажать сабмит, если это так, то надо обновить страницу и проверить html формы еще раз, если в поле action все еще не подставлен айдишник, то надо выполнить php artisan view:clear на сервере и обновить страницу на фронте, если не помогает, то надо проверить, что измененный шаблон подкинут на сервер, а не лежит чисто локально
    3 таблица services не имеет primary key на id (надо выполнить миграцию, которая это добавит), можешь дополнить вопрос миграцией для создания таблицы services
    4 $services['id'] имеет значение null (надо дебажить и смотреть почему туда попадает такое значение, скорее всего оно будет таким потому что нужно поменять на $services->id но это не точно)
    Ответ написан
    5 комментариев
  • В чем ошибка в коде?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет, ознакомься с документацией

    https://laravel.com/docs/11.x/routing#dependency-i...

    И попробуй внести правки в свой код в соответствии с докой

    use Illuminate\Http\Request;
    
    Route::post('/contact/submit', function (Request $request) {
        return $request->all();
    })->name('contact-form');
    Ответ написан
    1 комментарий
  • Laravel всегда возвращает ответ 200?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет) Добавь

    use Illuminate\Http\Exceptions\HttpResponseException;
    use Illuminate\Contracts\Validation\Validator;


    и
    protected function failedValidation(Validator $validator)
        {
            throw new HttpResponseException(response()->json(
                [
                    'errors' => $validator->errors(),
                    'status' => true
                ],
                400
            ));
        }


    в StoreRequest
    Ответ написан
    8 комментариев