使用.jumbotron{
background-color: lightyellow;
}
ul{
background-color: lightgrey;
}
ul.nav-pills li.active a{
border-top: 3px solid;
border-radius: 2px;
}
ul.nav-pills li:hover a{
border-top: 3px solid light blue;
}
ul.nav-pills li a{
background-color: #eee;
margin-right: 0;
}
ul.nav-pills li a{
background-color: lightyellow;
margin-right: 0;
}
定义资源时,定义了以下路由:Route::resource('recipe', 'RecipeController');
,一旦定义了所有资源,就会出现以下情况:
/photo/{photo}/edit
/recipes/{recipes}/edit
/allergens/{allergens}/edit
因为我的所有记录都使用/ingredients/{ingredients}/edit
作为主键(MongoDB),所以我想改为id
,如下所示:
{id}
/recipes/{id}/edit
/allergens/{id}/edit
我在/ingredients/{id}/edit
课程中挖了但是我没有看到如何指定这个。
当我使用Router
创建表单时,我会收到Form::model($record)
之类的操作,因为/recipes/{recipes}
是recipes
的属性。
如何将键参数的名称定义为$record
而不是id
,recipes
,allergens
?
答案 0 :(得分:3)
要更改Route::resource
的参数名称,您需要自定义ResourceRegistrar
实施。
以下是您如何以最短的方式实现这一目标:
// AppServiceProvider (or anywhere you like)
public function register()
{
$this->app->bind('Illuminate\Routing\ResourceRegistrar', function ($app) {
// *php7* anonymous class for brevity,
// feel free to create ordinary `ResourceRegistrar` class instead
return new class($app['router']) extends \Illuminate\Routing\ResourceRegistrar
{
public function register($name, $controller, array $options = [])
{
if (str_contains($name, '/')) {
return parent::register($name, $controller, $options);
}
// ---------------------------------
// this is the part that we override
$base = array_get($options, 'param', $this->getResourceWildcard(last(explode('.', $name))));
// ---------------------------------
$defaults = $this->resourceDefaults;
foreach ($this->getResourceMethods($defaults, $options) as $m) {
$this->{'addResource'.ucfirst($m)}($name, $base, $controller, $options);
}
}
};
});
}
现在您的路线将如下所示:
Route::resource('users', 'UsersController', ['param' => 'some_param'])
/users/{some_param}
// default as fallback
Route::resource('users', 'UsersController')
/users/{users}
请注意,这种方式不适用于嵌套资源,因此它们会混合使用默认行为和自定义行为,如下所示:
Route::resource('users.posts', 'SomeController', ['param' => 'id'])
/users/{users}/posts/{id}
答案 1 :(得分:0)
您可以将您的ID传递给您不需要将参数{recipes}更改为{id}的路线,因为参数只是一个占位符。
所以
public function edit($recipes){
// code goes hr
}
与此相同
public function edit($id){
// code goes hr
}
此路线/recipes/{recipes}/edit
答案 2 :(得分:0)
我知道这是4岁的问题,但对于任何使用谷歌搜索的人而言;您可以传递第三个参数来覆盖键命名:
Route::resource('ingredients', 'IngredientController', ['parameters' => ['ingredients' => 'id']]);
或
Route::resource('ingredients', 'IngredientController')->parameters(['ingredients' => 'id']);