在laravel我有这条路线:
Route::get('/', 'HomeController@index')->name('home');
Route::get('/showContent/{content}', 'HomeController@showContent');
首先是show主页,secode是show single post,现在我正在尝试将它们组合成一条路线:
Route::get('/{content?}', 'HomeController@index')->name('home');
如果content
不为空,则Web应用程序必须显示单个帖子,否则显示主页与此控制器一样
public function index($slug)
{
if ($slug != null) {
$this->showContent($slug);
} else {
return view('layouts.frontend.content');
}
}
但我得到了index
函数的错误,我该如何解决?
答案 0 :(得分:3)
您需要在方法签名中将$slug
的默认值设置为null
,如下所示:
public function index($slug = null)
{
if ($slug != null) {
$this->showContent($slug);
} else {
return view('layouts.frontend.content');
}
}
这允许参数在控制器端是可选的,因为Laadvel路由器在访问根/
时将调用控制器操作方法而没有任何参数。
您应该记住,将路由定义为
/{parameter?}
本质上是一个全部捕获,意味着任何URL 与另一个路由定义不匹配或者不是磁盘上的物理文件与此路线匹配(例如/ foo,/ bar等),因此在选择此方法时请考虑到这一点,因为您始终会为不匹配的URL执行showContent()
部分。
答案 1 :(得分:2)
您可以在功能参数
中指定null
作为默认值
public function index($slug=null)
{
if (!$slug) {
return view('layouts.frontend.content');
}
$this->showContent($slug);
}