{id}与{tag}之间的Laravel路由差异

{id}与{tag}之间的Laravel路由差异,laravel,Laravel,我是拉雷维尔的新手,请原谅我的问题很愚蠢。我在他们用过的地方看过医生 获取请求 Route::get("tags/{id}","TagsController@show"); Route::put("tags/{tag}","TagsController@update"); 请求出售 Route::get("tags/{id}","TagsController@show"); Route::put("tags/{tag}","TagsController@update"); 这两者的区别和

我是拉雷维尔的新手,请原谅我的问题很愚蠢。我在他们用过的地方看过医生

获取请求

Route::get("tags/{id}","TagsController@show");
Route::put("tags/{tag}","TagsController@update");
请求出售

Route::get("tags/{id}","TagsController@show");
Route::put("tags/{tag}","TagsController@update");

这两者的区别和好处是什么?我明白了第一条路,在铺设路线上的混乱。

正常道路

Route::get(“tags/{id},”TagsController@show");
函数($id)
{
$tag=tag::find($id);
dd($tag);//tag
}

带有路由模型绑定

Route::put(“tags/{tag},”TagsController@update");
函数(Tag$Tag)//标记模型绑定
{
dd($tag);//标记
}

参考链接

正常方式

Route::get(“tags/{id},”TagsController@show");
函数($id)
{
$tag=tag::find($id);
dd($tag);//tag
}

带有路由模型绑定

Route::put(“tags/{tag},”TagsController@update");
函数(Tag$Tag)//标记模型绑定
{
dd($tag);//标记
}
参考链接检查以下内容:

使用id,Laravel将从route获取id,它将是标签的id,它是整数

function show($id) {
    $tag = Tag::find($id);
}
使用标记,Laravel会自动解析路由或控制器操作中定义的雄辩模型,其类型提示变量名称与路由段名称匹配。 在URL中,标记参数是整数,但在控制器操作中,
$tag
将是一个模型对象:

功能动作(标签$Tag){
$tag->name;
}
因此,您不需要在控制器操作中雄辩地获得
$tag
。您只需指定它来自model
Tag$Tag
它将自动执行此操作。

请查看以下内容:

使用id,Laravel将从route获取id,它将是标签的id,它是整数

function show($id) {
    $tag = Tag::find($id);
}
使用标记,Laravel会自动解析路由或控制器操作中定义的雄辩模型,其类型提示变量名称与路由段名称匹配。 在URL中,标记参数是整数,但在控制器操作中,
$tag
将是一个模型对象:

功能动作(标签$Tag){
$tag->name;
}
因此,您不需要在控制器操作中雄辩地获得
$tag
。您只需指定它来自model
Tag$Tag

它会自动完成。

这只是一个惯例。你想怎么说都行。通常,{id}指的是表中的id。标记或类似的slug是字符串值。标签可以是视频类别的“娱乐”,而“我的西班牙之旅”则是描述视频的一个鼻涕虫

你必须选择你喜欢的词。该值将用于在数据库中查找在视图中显示正确请求所需的记录。同样,您可以使用
video/view/{id}/{slug}
或其任意组合


只要确保你的URL不会太长。因为搜索引擎不会在搜索结果中很好地显示你的网站。在明确的(数据库)和逻辑(访问者)之间找到平衡

这只是一个惯例。你想怎么说都行。通常,{id}指的是表中的id。标记或类似的slug是字符串值。标签可以是视频类别的“娱乐”,而“我的西班牙之旅”则是描述视频的一个鼻涕虫

你必须选择你喜欢的词。该值将用于在数据库中查找在视图中显示正确请求所需的记录。同样,您可以使用
video/view/{id}/{slug}
或其任意组合


只要确保你的URL不会太长。因为搜索引擎不会在搜索结果中很好地显示你的网站。在明确的(数据库)和逻辑(访问者)之间找到平衡

没有真正的区别,因为它只是一个参数名,但如果路由中有多个参数,即嵌套的资源控制器,则需要某种方法来区分参数:

Route::get('articles/{article}/comments/{comment}','ArticleCommentController@show');
显然,您不能对article和comment参数都使用
{id}
。因此,最好使用模型的“slug”版本作为参数名称,即使路线中只有一个参数名称:

Route::get('articles/{article}','ArticleController@show');
您也可以使用。如果为参数名称向控制器操作添加类型提示,Laravel将尝试在URL中查找具有主键的给定类的实例

给定第二个代码示例中的路线,如果您有一个控制器,看起来像这样

类ArticleController扩展控制器
{
公共功能展示(文章$文章)
{
//
}
}
…您请求了/articles/123,然后Laravel将尝试查找主键为123的
Article
实例

路由模型绑定非常好,因为它删除了控制器中大量的
find
/
findOrFail
方法调用。在大多数情况下,您可以将控制器操作简化为一行程序:

类ArticleController扩展控制器
{
公共功能展示(文章$文章)
{
返回视图('article.show',compact('article');
}
}

没有真正的区别,因为它只是一个参数名,但如果路由中有多个参数,即嵌套的资源控制器,则需要某种方法来区分参数:

Route::get('articles/{article}/comments/{comment}','ArticleCommentController@show');
显然,您不能对article和comment参数都使用
{id}
。因此,最好使用模型的“slug”版本作为参数名称,即使路线中只有一个参数名称:

Route::get('art