PHPStorm和Slim 3.X DIC

时间:2016-04-10 17:01:50

标签: php phpstorm slim

我最近从Slim 2.X搬到了Slim 3.X,我发现了一个可能有点愚蠢的问题,但在某些方面让我很烦。
新的Slim 3.X,作为旧的2.X版本之间的差异,它在Pimple上使用依赖注入容器(DIC)构建实现了一个新的容器系统。

正如我一直在阅读的那样,我觉得这是一个非常好的增强功能,因为它可以让你以很多不同的方式管理你的PHP应用程序。
当我开始玩它所拥有的新东西时,我发现了令人困惑的东西,也许是我所缺少的东西。

我使用PHPStorm;我喜欢这个IDE的其中一个原因是它的代码完成以及编写代码和理解类的工具(我实际上是一个学生,所以这对我很有帮助)。
当我编写一个Slim路径时,如果我想访问存储在容器中的视图对象,我必须使用$this->view变量来引用它。问题是,通常情况下,当我提到对象时,PHPStorm会列出对象内部的方法和属性,但$this对象不会发生这种情况。

我想,在路线内,Slim将所有路线功能和所有容器对象存储到$this分配器中。

$container = $app->getContainer();
$container['view'] = new \Slim\Views\PhpRenderer('protected/views/');

$app->get('/products', function(Request $request, Response $response) {
    $response = $this->view->render($response, 'products.php');
    return $response;
})->setName('products');

当我访问我的/products路线时,它会成功呈现我的产品模板并显示预期显示的内容,因此没有任何问题。
问题在于我希望PHPStorm知道路由中的$this变量,它存储了在调用路由之前先前设置的所有容器。

我考虑过/* @var *//* @global */或类似的事情,但在搜索了一会儿并尝试了不同的事情后,我找不到任何可行的方法。

总之,我想说的是PHPStorm是否可以列出容器对象的属性和方法,如下所示: PHPStorm auto-completion feature for objects

但路由中包含$this对象: Missing auto-completion feature in this object

谢谢!

1 个答案:

答案 0 :(得分:1)

我试图为Eclipse找到类似的内容,有人建议您使用Slim \ App的PHPDOCS修改属性。由于我不想自己更改Slim文件,因此我尝试制作一个扩展Slim \ App的空类,并使用PHPDOCS为其添加属性:

/**
 * OurApp
 *
 * Extends Slim\App with properties so we have code completion for a bunch of stuff!
 *
 * @property-read SomeClass $something
 * @property-read SomeotherClass $someOtherThing
 * @property-read string $someString
 * @property-read \Slim\Views\PhpRenderer $renderer
 */
class OurApp extends \Slim\App {}
$app = new OurApp($settings);

那很好。这样,您可以开始输入$app->,并完成标准Slim \ App中的内容,并获取somethingsomeOtherThingsomeString等。对于我们的项目,我们更改为$container中的一堆值 我们需要访问的项目Dependency.php。

相关问题