404 页面不适用于 laravel 5.4 中的某些路由
404 page not working for some routes in laravel 5.4
我有这样的路线:
web.php
Route::get('post/{slug}', [
'as' => 'post.single',
'uses' => 'PageController@getSingle',
]);
PageController.php
public function getSingle($slug)
{
//some db stuff and returning an array to view
return view('single', array('var1' => $var, 'var2' => $var2));
}
A post 有一个存储在数据库中的 slug。
如果 post 存在 slug,例如:first-post
然后路线 mysite.com/post/first-post
按预期工作。
但是如果 post 不存在,例如:second-post
然后路线 mysite.com/post/second-post
给我一个错误:
**ErrorException**
Trying to get property of non-object
我希望它显示 404 错误页面(404 页面已配置)
mysite.com/hellohello
给出了 404 页面,所以它按预期工作。
有什么建议我应该怎么做?
我认为你应该像这样更新你的函数:
而且您不能在 return 视图
中关闭括号
public function getSingle($slug)
{
//some db stuff and returning an array to view
return view('single', array('var' => $var));
}
OP 更改问题内容后更新:
public function getSingle($slug)
{
//some db stuff and returning an array to view
$var = SOMEDBRESULT1;
$var2 = SOMEDBRESULT2;
return view('single', array('var1' => $var, 'var2' => $var2));
}
您可以了解如何使用 laravel 5.4 从数据库 get first record。
Eloquent 有一个简洁的 firstOrFail
方法,它可以 returns 它找到的第一个实体,或者如果 none 抛出一个 ModelNotFoundException laravel转换为 404 页面。
public function getSingle($slug)
{
$var = YourModel::where('slug', $slug)->firstOrFail();
return view('single', compact('var'));
}
我有这样的路线:
web.php
Route::get('post/{slug}', [
'as' => 'post.single',
'uses' => 'PageController@getSingle',
]);
PageController.php
public function getSingle($slug)
{
//some db stuff and returning an array to view
return view('single', array('var1' => $var, 'var2' => $var2));
}
A post 有一个存储在数据库中的 slug。
如果 post 存在 slug,例如:first-post
然后路线 mysite.com/post/first-post
按预期工作。
但是如果 post 不存在,例如:second-post
然后路线 mysite.com/post/second-post
给我一个错误:
**ErrorException**
Trying to get property of non-object
我希望它显示 404 错误页面(404 页面已配置)
mysite.com/hellohello
给出了 404 页面,所以它按预期工作。
有什么建议我应该怎么做?
我认为你应该像这样更新你的函数: 而且您不能在 return 视图
中关闭括号public function getSingle($slug)
{
//some db stuff and returning an array to view
return view('single', array('var' => $var));
}
OP 更改问题内容后更新:
public function getSingle($slug)
{
//some db stuff and returning an array to view
$var = SOMEDBRESULT1;
$var2 = SOMEDBRESULT2;
return view('single', array('var1' => $var, 'var2' => $var2));
}
您可以了解如何使用 laravel 5.4 从数据库 get first record。
Eloquent 有一个简洁的 firstOrFail
方法,它可以 returns 它找到的第一个实体,或者如果 none 抛出一个 ModelNotFoundException laravel转换为 404 页面。
public function getSingle($slug)
{
$var = YourModel::where('slug', $slug)->firstOrFail();
return view('single', compact('var'));
}