Ошибка laravel при явной привязке модели к группе маршрутов

Я написал эту группу маршрутов

Route::group(['prefix' => 'admin/{store}',  'middleware' => ['auth', 'SetStoreId'], 'namespace' => 'Admin'], function (App\Models\Store $store) {

Route::get('/', 'DashboardController@index');

Route::resources([
    '/vocabulary' => 'VocabularyController',
    '/term' => 'TermController',
]);

});

и получил доступ к этому URL

http://localhost/SyriaShop/public/admin/1/vocabulary

тогда я получаю это сообщение об ошибке

Type error: Argument 1 passed to Illuminate\Routing\Router::{closure}() must be an instance of App\Models\Store, instance of Illuminate\Routing\Router given, called in E:\wamp\www\SyriaShop\vendor\laravel\framework\src\Illuminate\Routing\Router.php on line 390

хотя когда я использую этот конфиг (без привязки модели)

Route::group(['prefix' => 'admin/{storeId}',  'middleware' => ['auth', 'SetStoreId'], 'namespace' => 'Admin'], function ($storeId)

все работает хорошо!

закрытие группы маршрутов требует экземпляра маршрутизатора, а не всего, что вы определяете. маршруты в этой группе в настоящее время будут принимать параметр в своих определениях методов.

lagbox 29.05.2018 09:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
389
2

Ответы 2

Такая неявная привязка модели будет работать, если первичным ключом вашей таблицы является «id», поскольку ваш код выглядит хорошо, я думаю, что, скорее всего, ваша таблица не имеет столбца «id» в качестве первичного ключа.

Если это так, вы можете переопределить его, используя следующую функцию в вашей модели:

public function getRouteKeyName()
{
    return 'slug';
}

Надеюсь, это так!

Я создал модель магазина с помощью команды make: model, а таблица store имеет столбец id в качестве первичного ключа.

Wisamx 29.05.2018 09:46

Закрытие, переданное Route::group, вызывается с переданным ему экземпляром маршрутизатора (вы не контролируете это, поскольку вы не вызываете).

Действия для этих маршрутов в этой группе будут принимать этот параметр маршрута, store, в своих определениях.

Если вы не хотите, чтобы все эти методы контроллера принимали этот параметр маршрута, вы можете удалить этот параметр из маршрута. (В этом недавно созданном промежуточном программном обеспечении было бы хорошее место)

$request->route()->forgetParameter('store');

Это должно устранить необходимость того, чтобы эти методы контроллера принимали этот параметр маршрута, и вы уже имеете дело с этим параметром маршрута в своем промежуточном программном обеспечении.

Я добавил явную привязку Route :: model ('store', Store :: class); в RouteServiceProvider и изменил промежуточное ПО SetStoreId на URL :: defaults (['store' => $ request-> store-> id]); и вроде работает. Спасибо

Wisamx 29.05.2018 10:21

Другие вопросы по теме