【问题标题】:laravel route group closure always executinglaravel 路由组关闭总是执行
【发布时间】:2017-02-06 17:59:44
【问题描述】:

我对 Laravel 路由组有疑问。Laravel 总是在 Route::group 方法中执行关闭。考虑以下两条路线:

这是在 routes/web.php 中声明的

Route::group(['prefix' => 'posts'],function(){
  echo 'posts page';
});


Route::get('home'),function(){
  echo 'home page';
});

当我打开www.example.com/home 时,Route::group 中的闭包会执行。

所以我得到了这个输出:

posts page home page

从逻辑上讲,我应该只得到 home page 作为输出

【问题讨论】:

  • 可能是在中间件或内核(等)中声明的?或者可能是 RouteServiceProvider
  • 这是在 routes/web.php 中声明的
  • 你从来没有在你的问题中这么说
  • 好的,我添加了.....

标签: php laravel


【解决方案1】:

这是预期的行为。

Route::group 是一组Route::get/post 的帮助器/包装器。

应该执行每个Route::get/post(不是回调,只是初始化)以创建路由列表。

另外,Route::group 不支持参数作为 get/post:

// Does not work!
Route::group(['prefix' =>'user/{id}'], function ($id) {
    Route::get('view', function() {});
    Route::post('update', function() {});
});

// Works
Route::group(['prefix' => 'user/{id}'], function () {
    Route::get('view', function($id) {});
    Route::post('update', function($id) {});
});

首先,routes/web.php直接解析请求。它构建所有可用路线的列表。

这意味着应该执行每个 Route::get/post(甚至在组内)并添加规则/变量。

Route::group 是一个助手,它只是在内部 get/post 调用中添加额外的参数。

其次,当路由列表准备好时,内核会找到一个合适的回调/闭包并执行它。

换句话说,Route::group 将其第一个参数添加到每个 Route::get/post 内部。

【讨论】:

  • 是的,但是当定义的路由和当前的 url 不匹配时,为什么会执行闭包?这些路线也是错误的。 Route::group 第一个参数必须是数组
  • 谢谢,我更新了组语法。 Group 的回调与 Route::get/post 不同。他们有不同的目标。
  • 逻辑上当第一个参数为假时,第二个参数不应该执行。
  • 不,laravel 构建完整的路线列表。如果组的回调不会被执行 - 你永远不会知道内部路由。您不应该认为该组的回调等于路由的回调。它们看起来相似,但目标不同。
  • 谢谢。明白了;)
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 2021-02-20
  • 2015-09-03
  • 2021-07-24
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多