Laravel的自定义URL结构

时间:2019-05-04 11:46:31

标签: laravel

我想为Laravel应用程序创建一个自定义URL结构。

现在我有一个这样的结构:

  1. mydomain.com/ 产品 /产品名称- ProductController
  2. mydomain.com/ 文章 /文章名称- ArticleController
  3. mydomain.com/ 用户 /用户名- UserController

我想这样改变它:

  1. mydomain.com/product-name- ProductController
  2. mydomain.com/article-name- ArticleController
  3. mydomain.com/用户名- UserController

我在公共数据库表中已经有子弹。检测我应该为“产品名称”使用哪个控制器不是问题。

我想知道,这种情况下的最佳做法是什么。我在哪里可以将连接“产品名”到产品控制器的逻辑放在哪里?

我应该使用中间件还是有其他方法可以使用?

1 个答案:

答案 0 :(得分:0)

您想要的内容,可以像在您的web.php中指定

Route::get('user-{name}', 'UserController@show')->name('users.show');

和在UserController中

function show(Request $request, User $name){
    return $name;
}

应该可以正常工作,但是其他端点,例如索引,删除,编辑等呢?

我的感觉会是

Route::delete('user-{name}', 'UserController@delete')->name('users.delete');

但是index()呢?甚至在这种情况下,name也必须是唯一的,否则会产生异常的结果。

也许您可以说得更清楚些,我可以据此编辑答案,但是

我相信,您应该遵循Laravel的路由模型绑定概念,而不要进行过多的自定义。根据路由模型绑定的概念

在您的模型中

public function getRouteKeyName()
{
    return 'name';
}

现在,如果您想对其进行更多自定义,则可以使用

RouteServiceProvider.php boot()方法

public function boot()
{
    parent::boot();
    Route::bind('flat_member', function ($value) {
        return 'user-' . $value;
    });
}