ошибка laravel при явной привязке модели к группе маршрутов - PullRequest
0 голосов
/ 29 мая 2018

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

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)

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

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

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

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

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

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

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

0 голосов
/ 29 мая 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...