PhpStorm Code Inspector:"找不到方法"在Laravel 5.3的路线文件中

时间:2016-10-12 13:29:44

标签: php laravel phpstorm

我的PhpStorm 2016.1.2的 Code Inspector (安装了Laravel插件)说明了以下代码。

代码路由/ api.php

<?php

$this->app['router']->group(
    ['namespace' => 'Foo\Access\Controllers'],
    function() {
        $this->app['router']->post('auth/login', ['uses' => 'AuthController@login']);
    }
);

错误

  • 方法&#39;组&#39;未在(第3行)
  • 中找到
  • 方法&#39;发布&#39;未在(第6行)
  • 中找到

问题

我如何告诉PhpStorm $this-app['router']引用Illuminate\Routing\Router

2 个答案:

答案 0 :(得分:1)

api.php路由文件包含在RouteServiceProvider.php(在app / Providers上)的mapApiRoutes方法上(参见source code)。你会看到类似的代码:

protected function mapApiRoutes()
{
    Route::group([
        'middleware' => 'api',
        'namespace' => $this->namespace,
        'prefix' => 'api',
    ], function ($router) {
        require base_path('routes/api.php');
    });
}

这意味着您可以在$router上使用名为$this->app['router']的变量而不是api.php。仅此一点,IDE不足以实现变量$router的类型,但您可以使用PHPdoc。类似的东西:

<?php

/**
 * @var \Illuminate\Routing\Router $router
 */
$router->group(
    ['namespace' => 'Foo\Access\Controllers'],
    function() use ($router) {
        $router->post('auth/login', ['uses' => 'AuthController@login']);
    }
);

现在,这有一个缺点,因为->group内的路由是在闭包中定义的,您需要通过$router发送use ($router)变量。

答案 1 :(得分:1)

解决方案非常简单。我更改了对象的数组访问权限。

<?php

    $this->app->router->group(
    ['namespace' => 'Foo\Access\Controllers'],
    function() {
        $this->app->router->post('auth/login', ['uses' => 'AuthController@login']);
    }
);