具有固定参数值的路由的别名

Alias for a route with a fixed parameter value

我有这条路线:

Route::get('/MyModel/{id}', 'MyController@show');

方法 show() 接受一个名为 id 的参数,我想为 /MyModel/1 设置一个别名,以便可以从 /MyCustomURL.

访问它

我已经尝试了一些组合,例如:

Route::get('/MyCustomURL', ['uses' => 'MyController@show', 'id' => 1]);

但我不断收到方法 show() 缺少必需参数 错误。

在 Laravel 中是否有一种干净的方法来实现这一点?

在同一个控制器中(在你的情况下 MyController?)你应该创建一个新方法:

public function showAliased()
{
   return $this->show(1);
}

现在您可以像这样定义别名路由:

Route::get('/MyCustomURL', 'MyController@showAliased');

像这样定义你的路线: 您可以使用 "as" 为您的路线指定您需要的任何名称。

Route::get('/MyModel/{id}' , [
        'as'=>'Camilo.model.show',
        'uses' => 'MyController@show' ,
    ]) ;

现在如果你想访问这个路由,你可以为它生成url,基于它的名字,像这样:

route('Camilo.model.show', ['id' =>1]) ;
Route::get('MyModel/{id}', 'MyController@show');

不是

Route::get('/MyModel/{id}', 'MyController@show');

祝你好运!

在 Laravel 5.4(或更早)中,您可以在路由文件中使用 defaults 函数。

示例如下:

Route::get('/alias', 'MyController@show')->defaults('id', 1);

在这种情况下,您不需要在控制器中添加其他方法。