我具有动态URL结构,具有以下页面表,其中页面URL设置为页面类型。
我有Apache服务器,其中URL区分大小写。我想强制将路由变量转换为小写,以防用户键入大写URL或抛出404错误。
当前,如果以大写形式键入URL,则会显示查看[About]找不到。找不到 View /目录时,如何强制将路由变量转换为小写或引发失败错误?
页表
id | name | type | slug
1 | About | about | about
2 | Contact | contact | contact-us
3 | Events & Blog | event_blog | events-blog
web.php Route::get('/{page}', 'Controller@page')->name('view_page')->where(['page' => Str::lower('[\w\d\-]+(.*)')]);
Controller public function page($page)
{
$page = Page::where('slug' => $page)->firstOrFail();
return view($page, compact('page'));
}
我在resources文件夹中有about
,contact
,event_blog
目录,它对于小写URL正常工作,对于大写URL显示错误。
最佳答案
您不是通过模型或数据库来解决这个错误,而是因为view($page, compact('page'));
文件不存在,所以您对这行****.blade.php
的错误进行了geet。
您可以将其更改为:
return view(strtolower($page), compact('page'));
另外,您可以使用whereRaw()
子句检查数据库中区分大小写的字符:Page::whereRaw('BINARY slug=?', $page)->firstOrFail();
要么,Page::where(DB::raw('BINARY slug'), $page)->firstOrFail();
关于php - 使Laravel 8 Slug变量不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64925624/