Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何实现;其中slug();在拉威尔5号?_Php_Laravel - Fatal编程技术网

Php 如何实现;其中slug();在拉威尔5号?

Php 如何实现;其中slug();在拉威尔5号?,php,laravel,Php,Laravel,我想绘制这类路线的地图: /images/united-states/san-francisco 在我的routes.php文件中,我写道: Route::get('/images/{country_slug}/{city_slug}', 'ImageController@listByCountryAndCity'); 在我的控制器中: public function listByCountryAndCity($country, $city) { return Image::wher

我想绘制这类路线的地图:

/images/united-states/san-francisco
在我的
routes.php
文件中,我写道:

Route::get('/images/{country_slug}/{city_slug}', 'ImageController@listByCountryAndCity');
在我的控制器中:

public function listByCountryAndCity($country, $city)
{
    return Image::where('country', $country)->where('city', $city)->paginate();
}
public function show($id, $slug)
{
    return Post::find($id);
}
在进行比较之前,我如何对国家进行评价


我不想添加任何其他名为国家城市

的表,您可以使用内置的laravel函数
stru slug($string)


但请注意,此功能不会检查是否已取出段塞。它只是将字符串转换为slug。

您可以使用内置的laravel函数
str\u slug($string)


但请注意,此功能不会检查是否已取出段塞。它只是将您的字符串转换为slug。

您不能,至少不能以任何可靠的方式进行转换。

因为标题可以包含不符合URL安全的特殊字符,并且如果要使用(例如)来生成slug,这些特殊字符将被删除,因此您将无法为查询条件重建标题,因为将缺少字符

因此,唯一的解决方案是在数据库中有一个
slug
列,这是一个很好的解决方案。如果您认为为slug添加一个额外的列是多余的,它不是。虽然title和URL slug是相似的(在本例中是相互依赖的),但它们是两个独立的实体,您将它们视为独立实体是合乎逻辑的


拥有一个
slug
列可以提供您所需的确切功能,还可以为条目设置任何自定义slug,而不仅仅是标题生成的slug。

您不能,至少不能以任何可靠的方式。

因为标题可以包含不符合URL安全的特殊字符,并且如果要使用(例如)来生成slug,这些特殊字符将被删除,因此您将无法为查询条件重建标题,因为将缺少字符

因此,唯一的解决方案是在数据库中有一个
slug
列,这是一个很好的解决方案。如果您认为为slug添加一个额外的列是多余的,它不是。虽然title和URL slug是相似的(在本例中是相互依赖的),但它们是两个独立的实体,您将它们视为独立实体是合乎逻辑的


拥有一个
slug
列可以提供您所需的确切功能,还可以为条目设置任何自定义slug,而不仅仅是根据标题生成的slug。

在像您这样的情况下,我将执行如下操作:

Route::get('/post/{id}-{slug}', 'PostController@show');
在控制器中:

public function listByCountryAndCity($country, $city)
{
    return Image::where('country', $country)->where('city', $city)->paginate();
}
public function show($id, $slug)
{
    return Post::find($id);
}
所以slug只是用于搜索引擎优化,而您只使用
$id

或者,您可以创建一个范围:

public function scopeFindBySlug($query, $title)
{
    $query->where('slug', '=', str_slug($title));
}

Post::findBySlug($title)->first();

在你这样的情况下,我会这样做:

Route::get('/post/{id}-{slug}', 'PostController@show');
在控制器中:

public function listByCountryAndCity($country, $city)
{
    return Image::where('country', $country)->where('city', $city)->paginate();
}
public function show($id, $slug)
{
    return Post::find($id);
}
所以slug只是用于搜索引擎优化,而您只使用
$id

或者,您可以创建一个范围:

public function scopeFindBySlug($query, $title)
{
    $query->where('slug', '=', str_slug($title));
}

Post::findBySlug($title)->first();


是的,我知道这个函数。。但是,如何将它与雄辩的
结合起来呢?正如@Bogdan所说,这是不可靠的。救救那只鼻涕虫,一点也不坏。否则,您必须执行一些非常糟糕的繁重查询(循环浏览记录并对字段进行快速比较)。是的,我知道这个函数。。但是,如何将它与雄辩的
结合起来呢?正如@Bogdan所说,这是不可靠的。救救那只鼻涕虫,一点也不坏。否则,您必须执行一些非常糟糕的繁重查询(遍历记录并对字段进行快速比较)。哦,等一下,是否要取消拖拽?用普通的标题找到唱片?那太棒了。。但它不会每次都起作用。可靠的方法是将标题插入,然后比较2个SULG(如密码哈希)。@David Yeah,但你不能这样做,除非你从表中获取所有条目,迭代它们,然后将插入的标题与请求插入进行比较,这不是一个性能明智的选项。哦,等一下,你想取消插入吗?用普通的标题找到唱片?那太棒了。。但它不会每次都起作用。可靠的方法是将标题插入,然后比较2个SULG(如密码哈希)。@David Yeah,但你不能这样做,除非你从表中获取所有条目,迭代它们,然后将插入的标题与请求插入进行比较,这不是一个性能方面的选项。事实上情况不同。。。我要绘制的路线类似于
/images/united/united/1458
。在我的图像表中有一个名为
place
的字段,在本例中是
United
。我不想添加另一个名为Country的表。那么,为什么你问题中的例子不同,它是一个单独的案例,还是只是一般的?2.URL路径后面的int值
1458
是什么?对不起,我的答案仍然有效。如果您有一套严格的命名规则,例如:存储在数据库中的国家和城市名称只包含字母、数字或空格(因为其他任何内容都将被删除),所有单词都大写,没有破折号(这可能是不可能的)并且没有超过一个连续空格字符的地方(因为多个空格将合并为一个破折号),那么您可以使用
stru slug
生成URL路径并能够可靠地解码slug,否则,您需要单独存储段塞。我的意见是,进行必要的数据库结构更改要比实施限制性的段塞编码和解码方式容易得多,这可能会在将来由于不可预见的边缘情况而中断。谢谢。我最终得到了这个解决方案。。我添加了另外两个表格:城市和国家。事实上情况不同。。。我要绘制的路线类似于
/images/united/united/1458
。在我的图像表中,我有一个名为
place
的字段,它位于这个ca中