我正在制作具有CMS且存储在数据库中的页面的laravel应用。数据库中的页面记录具有ID,标题,内容和URL段。
我想要它,以便如果有人访问url slug,那么它将加载一个页面以显示该页面的内容。因此,我认为我需要重写404处理程序,以便说用户在404之前进入mysite.com/about,它会检查数据库以查看是否有记录存储为url。如果存在,它将加载页面以显示内容,否则将显示404。通过以下解决方案,我完成了90%的工作:
我已将App \ Exceptions \ handler.php中的render方法修改为以下内容:
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
$page = Page::where('url', '=', Request::segment(1))->first();
if(!is_null($page)) {
return response(view('page', [ 'page' => $page ]));
}
}
return parent::render($request, $e);
}
这可行,但是存在一个问题,我所有的菜单也都存储在数据库中,并且我有一个FrontendController,可以从数据库中获取所有菜单并加载到视图中。我所有的控制器都扩展了FrontendController,以便在每次页面加载时都完成此操作,而不必重复任何代码。那么有没有办法我可以通过控制器路由所有404,从而可以扩展FrontendController?还是只需要重复前端控制器在异常处理程序文件中执行的所有逻辑?
解决了!感谢Styphon给我这个主意,我将以下路线定义为我的最后一条路线:
Route::get('/{url}', 'FrontendController@page');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句