Laravel清洁链接没有空格或大写

时间:2016-07-06 02:48:50

标签: laravel url

我认为这很简单。我有一个像'../area/England'和'../area/United%20States'的网址,我想分别成为'../area/england'和'../area/united-states'。

这些区域以“英格兰”和“美国”的形式存储在我的数据库中。我以为我可以将它们存储为我想要的值,这对于url('england'和'united-states')有好处,但是当我在页面上显示它们时我将不得不将它们转换回原始值(例如'欢迎来到美国!')。所以这个选项并不好,因为我还是要进行转换。

所以我的问题是, 1.进行此类网址操作的最佳做​​法是什么? 和 2.我在哪里放我的代码? (strtolower和str_replace)

由于

1 个答案:

答案 0 :(得分:2)

查看"自定义分辨率逻辑" https://laravel.com/docs/5.2/routing#route-model-binding

的部分

在你的路线中:

Route::get('/area/{country}',function(Country $country){})

然后在你的RouteServiceProvider::boot方法中,你可以写一个这样的语句:

$router->bind('country', function ($value) {
  return Country::where('name', strtoupper(str_replace("-"," ",$value))->first();
});

但是,将URL slug转换为国家/地区名称可能并不总是这样。如果您不能编写可靠地将slug转换为国家/地区名称的函数,那么您应该创建一个名为slug的新数据库列,然后使用:

$router->bind('country', function ($value) {
  return Country::where('slug', $value)->first();
}); 

我猜你也可以拉出整个国家/地区列表并进行排序,执行str_replacestrtolower直到找到匹配项,每次都会暂停国家/地区的搜索结果。但效率较低,我会做一个slug专栏。