我最近从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是否可以列出容器对象的属性和方法,如下所示:
谢谢!
答案 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中的内容,并获取something
,someOtherThing
和someString
等。对于我们的项目,我们更改为$container
中的一堆值
我们需要访问的项目Dependency.php。