php - 使Laravel 8 Slug变量不区分大小写

标签 php laravel error-handling routes controller

我具有动态URL结构,具有以下页面表,其中页面URL设置为页面类型。
我有Apache服务器,其中URL区分大小写。我想强制将路由变量转换为小写,以防用户键入大写URL或抛出404错误。
当前,如果以大写形式键入URL,则会显示查看[About]找不到。找不到 View /目录时,如何强制将路由变量转换为小写或引发失败错误?
View not found
页表

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文件夹中有aboutcontactevent_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/

相关文章:

php - 如何优化跨 2 个 MySQL 表的值搜索?

javascript - 当更改另一个选择框的值时,如何在一个选择框中填充值

python - 如何在Python中使用“尝试和异常”引发打印消息错误?

java - 什么是 “2”命令,同时将System.out和System.err Java消息都重定向到文件时

mongodb - 卡夫卡接收器连接器中无效JSON的错误处理

php - 使用Php注册时如何防止用户名重复?

php - 如何在 Codeigniter 中加入表以进行搜索查询

php - 从 URL 中提取站点标题

php - 验证或删除 laravel 中的额外字段

mysql - Eloquent - 如果外键有行,则防止删除数据 - Laravel