【问题标题】:Alias for a route with a fixed parameter value具有固定参数值的路由的别名
【发布时间】:2016-10-15 23:12:02
【问题描述】:

我有这条路线:

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

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

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

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

但我不断收到 missing required argument 方法 show() 的错误。

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

【问题讨论】:

  • 我最近发现了另一种设置路线的方法,无需烦人的“@”。 Route::get('my-model/{id}', [MyController::class, 'show'])->name('show'); 它为我的 IDE 提供了一个选项,可以从路由器文件中单击打开 MyController 类。

标签: php laravel laravel-5 laravel-routing


【解决方案1】:

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

示例如下:

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

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

【讨论】:

  • 这似乎从 Laravel 4.1 版本开始就存在了。我会尝试一下,如果它有效,我会切换到这个答案!谢谢。
【解决方案2】:

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

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

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

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

【讨论】:

  • 我唯一不喜欢这种方法的是我必须为每个别名设置一个方法。但它实际上回答了这个问题。谢谢。
【解决方案3】:

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

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

现在如果你想访问这个路由,你可以根据它的名字为它生成 url,如下所示:

route('Camilo.model.show', ['id' =>1]) ;

【讨论】:

  • 我认为这不是我想要的。这是简单的重定向到/MyModel/1 而不是别名。
【解决方案4】:
Route::get('MyModel/{id}', 'MyController@show');

不是

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

祝你好运!

【讨论】:

  • 感谢您的提示,但是在路径的开头是否有反斜杠有什么区别?
  • 如果对您有帮助,请接受您的问题的答案;不同的是,第一条路线是:localhost/yourproject/public/MyModel/5 第二条路线是:localhost/yourproject/public//MyModel/5 这就是为什么您的控制器无法处理您的 id 变量。
猜你喜欢
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多