我已经使用PhalconPHP 3.1.2创建了一个新项目。一切都很好,但我的IDE有问题。在PhpStorm中,我添加了phalcon-devtools 3.1.2中的ide/stubs/Phalcon作为外部库,以消除警告和错误。
但还有一个问题:在app/config/router.php (由devtools创建的标准目录结构)中,我得到了$router = $di->getRouter();行(也是由devtools创建的),并显示了警告:Method getRouter not found in Phalcon\Di\FactoryDefault。
实际上,此类中没有任何方法:https://github.com/phalcon/phalcon-devtools/blob/3.1.x/ide/stubs/Phalcon/di/FactoryDefault.php -> https://github.com/phalcon/phalcon-devtools/blob/3.1.x/ide/stubs/Phalcon/Di.php
现在我没有自动补全路由器的方法,这对我来说是个问题。我做错什么了吗?
发布于 2017-07-06 03:04:47
首先,我不熟悉Phalcon。这些是我根据PHP/PhpStorm的一般经验所做的评论。
所以..。如果您查看您提供最后一个链接(stubs for Di.php)中的PHPDoc,您会注意到其中包含$request = $di->getRequest();的代码示例。
如果你只是复制粘贴整个样本,你会得到同样的“找不到方法”的错误...因为getRquest()是通过神奇的__get()方法在运行时转换的。
这里可能的解决方案是为$di创建您自己的存根
Di的新类,例如类MyDi扩展了\Phalcon\Di
getRoute() / getRequest()等方法(可以是具有空体的实际方法,如Phalcon的存根文件中的。或通过@method PHPDoc标记)
$di时--键入它与您的类一起提示,例如/** @var \MyDi $di */ $di = new Di();
在上面的代码中,在运行时,$di将是Di的一个实例,但对于PhpStorm,在开发期间,它将是MyDi,因此所有类型提示都在适当的位置。
作为可能的替代方案--而不是通过$di->getRoute()使用魔法..尝试使用$di->getShared('route')或类似的工具。
如果您使用PhpStorm's Advanced Metadata functionality,它将允许根据参数值获取正确的类型。
发布于 2017-07-06 18:18:06
$di->getRouter()是神奇的方法,Phalcon\Di实现了__call方法,如果你使用getRouter(),它就会通过这种方式获得路由器服务。
如果需要,可以使用PHPStorm元数据和$di->get() https://www.google.pl/search?client=opera&q=phpstorm+metadata&sourceid=opera&ie=UTF-8&oe=UTF-8
https://stackoverflow.com/questions/44933776
复制相似问题