我使用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
现在我没有自动完成路由器的方法,这对我来说是个问题。我做错了吗?
答案 0 :(得分:0)
首先 - 我对Phalcon并不熟悉。这些是基于一般PHP / PhpStorm经验的评论。
所以..如果你看一下你给出的最后一个链接(stubs for Di.php)中的PHPDoc,你会注意到那里有$request = $di->getRequest();
的代码示例。
如果您只是复制粘贴整个示例,则会得到相同的“找不到方法”错误...因为getRquest()
在运行时通过魔术__get()
方法进行转换。
此处可能的解决方案是为您的$di
:
创建将扩展原始Di
的新类,例如
class MyDi extends \Phalcon\Di
在那里添加所有getRoute()
/ getRequest()
等方法(可能是Phalcon的存根文件中的空体的真实方法..或通过@method
PHPDoc标记)
将此类文件放在项目的任何位置 - 它仅供IDE使用。
当您使用$di
时,请将其与您的班级一起输入,例如:
/** @var \MyDi $di */
$di = new Di();
在上面的代码中,运行时$di
将是Di
的实例,但对于PhpStorm在开发期间它将是MyDi
所以所有类型提示都已到位。
作为可能的选择 - 而不是通过$di->getRoute()
使用魔法..尝试$di->getShared('route')
或类似。
如果您使用PhpStorm's Advanced Metadata functionality,则可以根据参数值获得正确的类型。
答案 1 :(得分:0)
$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