【问题标题】:How to config Laravel Router some route rule work on different path?如何配置 Laravel Router 一些路由规则在不同的路径上工作?
【发布时间】:2015-10-20 23:56:35
【问题描述】:

我在A.com 上部署了我的 Laravel 5 项目,我也想把它放在B.com/a 下。出于某种原因,/a 路径我应该在路由器中处理它。

所以在路由器中我写: Route::get('post','PostController@index'); Route::get('a/post','PostController@index'); 这不是一个好办法,因为有冗余,尤其是还有很多其他的路由规则。

在文档中,只有{xx}? 来处理可选参数,但在我的项目中,它不是参数,而是静态字符串。

有没有更好的方法来合并两条线?

【问题讨论】:

标签: laravel laravel-routing


【解决方案1】:

我会在 foreach 循环中使用路由前缀。这样一来,您就可以快速轻松地管理路线上的前缀,同时将它们全部保存在一个地方。

foreach([null, 'a'] as $prefix) {
    Route::group(['prefix' => $prefix], function () {
        // Your routes here
    });
}

没有前缀的路由将优先,因为在这种情况下它们的路由将首先生成。如有必要,您可以轻松地交换数组。

如果您真的想在单个路由定义中执行此操作,您可以使用正则表达式来匹配路由。

Route::get('{route}', function () {
    dd('Browsing ' . app('request')->path());

})->where('route', '(a/)?post');

但它显然不是很干净/可读,所以可能不推荐。

【讨论】:

  • 谢谢,我使用 foreach 来包装所有规则。这样做似乎没有优雅的方式。
【解决方案2】:

你可以这样做:

RealRoutes.php:

Route::get('post','PostController@index');
// ... include all of your other routes here

routes.php:

include('RealRoutes.php');
Route::group(['prefix' => 'a/'], function () {
    include('RealRoutes.php');
});

使用 lambda 函数或类似函数可能有更好的方法来解决此问题,但上述方法应该可以作为一种快速解决方案。

【讨论】:

  • 我有一些不同的路线组,所以使用@Ben Swinburne 的答案。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-05-20
  • 2022-11-18
  • 2022-01-02
  • 2017-08-14
  • 2020-08-17
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
相关资源
最近更新 更多