我写了这个路线组
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',
]);
});
并访问此网址
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)
一切顺利!
答案 0 :(得分:1)
传递给Route::group
的闭包会被传递给它的路由器实例调用(你不能控制它,因为你不是调用者)。
此组中这些路线的操作将在其定义中使用此路线参数store
。
如果您不希望所有这些控制器方法都需要使用此路由参数,则可以从路径中删除此参数。 (在最近创建的中间件将是一个好地方)
$request->route()->forgetParameter('store');
这应该不需要这些控制器方法来获取此路由参数,并且您已经在中间件中处理此路由参数。
答案 1 :(得分:0)
如果您的表的主键是' id'那种隐式模型绑定将起作用,因为您的代码看起来很好我认为很可能您的表没有列&# 39; ID'作为主键。
如果是这种情况,您可以使用模型上的以下功能覆盖它:
public function getRouteKeyName()
{
return 'slug';
}
希望是这样的!