繁体   English   中英

laravel - 如何在不影响现有路由的情况下在所有 url 中添加前缀

[英]laravel - how to add prefix in all url without affecting route existing

我有这样的网址mysite.com/company ,我想为网址添加前缀以成为mysite.com/home/company

我试图添加一个路由组,但这需要我更新所有现有的路由。

我可以在所有 url 中添加前缀而不影响现有路由吗?

我使用了 Laravel 5.6

我创建了一个沙箱,以便您可以查看和使用用于此答案的代码。

我知道沙箱使用不同的 Laravel 版本(版本 7),但是查看 5.6 版的文档,路由似乎与版本 7 的路由没有太大区别。

您可以做的是将已经存在的路由包装在一个匿名函数中并将其分配给一个变量,然后您可以使用此变量并将其作为参数与prefix一起传递给group路由函数,例如

$routes = function() {
    Route::get('company', function () {
        return 'companies';
    });

    Route::get('company/{company}', function ($company) {
        return "company $company";
    });

    Route::delete('company/{company}', function ($company) {
        return "deleting company $company...";
    });

    Route::get('company/{company}/staff', function ($company) {
        return "staff list for company $company...";
    });
};

Route::prefix('/')->group($routes);
Route::prefix('/home')->group($routes);

运行php artisan route:list ,将返回以下内容:

+--------+----------+------------------------------+------+---------+------------+
| Domain | Method   | URI                          | Name | Action  | Middleware |
+--------+----------+------------------------------+------+---------+------------+
|        | GET|HEAD | api/user                     |      | Closure | api        |
|        |          |                              |      |         | auth:api   |
|        | GET|HEAD | company                      |      | Closure | web        |
|        | GET|HEAD | company/{company}            |      | Closure | web        |
|        | DELETE   | company/{company}            |      | Closure | web        |
|        | GET|HEAD | company/{company}/staff      |      | Closure | web        |
|        | GET|HEAD | home/company                 |      | Closure | web        |
|        | GET|HEAD | home/company/{company}       |      | Closure | web        |
|        | DELETE   | home/company/{company}       |      | Closure | web        |
|        | GET|HEAD | home/company/{company}/staff |      | Closure | web        |
+--------+----------+------------------------------+------+---------+------------+

您可以在上面看到路由现在可以通过/home/访问,例如http://example.com/companyhttp://example.com/home/company无需复制路由。

如果以后需要添加更多前缀,只需添加一个新的Route::prefix("<prefix>")->group($routes); 到路由文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM