【问题标题】:Laravel: Getting Route Parameters in Route::group() ClosureLaravel:在 Route::group() 闭包中获取路由参数
【发布时间】:2015-07-22 02:51:49
【问题描述】:

我有一个在 Laravel 4.2 上运行的应用程序,我正在尝试实现一个有点复杂的路由机制。我有一个路由组使用:

Route::group(['domain' => '{wildcard}.example.com'], $closure);

我需要能够检查组闭包中的 $wildcard 参数 -- 意思是在请求被传递到控制器之前(我需要定义 Route::get()Route::post()取决于子域)。

我想做的一个例子如下:

Route::group(['domain' => '{wildcard}.example.com', function ($wildcard) {
        if ( $wildcard == 'subdomain1' ) {
            Route::get('route1', 'Subdomain1Controller@getRoute1');
            Route::get('route2', 'Subdomain1Controller@getRoute2');
        } else if ( $wildcard == 'subdomain2' ) {
            Route::get('route1', 'Subdomain2Controller@getRoute1');
            Route::get('route2', 'Subdomain2Controller@getRoute2');
        }
    }
);

当然,以上行不通。传入Route::group() 闭包的唯一参数是Router 的实例,而不是数组中定义的参数。但是,必须有一种方法可以访问这些参数——我知道我以前做过,只是不记得怎么做了(而且在网上的任何地方都找不到解决方案)。

我知道我总是可以使用 PHP 的低级方法来检索 URL,explode() 它,并以这种方式检查子域。但是我在使用 Laravel 的方法之前已经这样做了,如果可能的话,我更愿意这样做(以保持事情的干净和一致)

还有其他人知道解决方案吗?提前致谢!

【问题讨论】:

  • 你不能那样做。路由组在分派请求之前运行。
  • 我很确定我过去做过,除非我快疯了。实际上,我清楚地记得做它,我只是不记得是怎么做的。无论哪种方式,我决定不担心它,只是使用parse_url() 破解了一个解决方法。谢谢!

标签: php laravel laravel-4


【解决方案1】:

使用Route::input()函数:

 Route::group(['domain' => '{wildcard}.example.com', function ($wildcard) use ($wildcard) {
        if ( Route::input('wildcard') === 'subdomain1' ) {
            Route::get('route1', 'Subdomain1Controller@getRoute1');
            Route::get('route2', 'Subdomain1Controller@getRoute2');
        } else {
            Route::get('route1', 'Subdomain2Controller@getRoute1');
            Route::get('route2', 'Subdomain2Controller@getRoute2');
        }
    }
);

请参阅“访问路由参数值”in the docs

【讨论】:

  • 我认为这几乎是正确的,但我收到了错误Call to a member function parameter() on null。看起来Route::current() 没有设置。我现在正在调试它
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2014-10-26
  • 2021-08-07
  • 2015-01-14
  • 2014-05-29
  • 2020-06-25
  • 2018-07-28
  • 2021-06-30
相关资源
最近更新 更多