PhalconPHP-getRouter在\Phalcon\Di中

PhalconPHP-getRouter在\Phalcon\Di中,php,phpstorm,phalcon,Php,Phpstorm,Phalcon,我已经使用PhalconPHP 3.1.2创建了一个新项目。一切正常,但我对IDE有问题。在PhpStorm中,我从Phalcon开发工具3.1.2中添加了ide/stubs/Phalcon,作为外部库来处理警告和错误 但仍然有一个问题:在app/config/router.php(devtools创建的标准目录结构)中,我得到了一行$router=$di->getRouter()(也是由devtools创建的)带有警告:方法getRouter未在Phalcon\Di\FactoryDefaul

我已经使用PhalconPHP 3.1.2创建了一个新项目。一切正常,但我对IDE有问题。在PhpStorm中,我从Phalcon开发工具3.1.2中添加了
ide/stubs/Phalcon
,作为外部库来处理警告和错误

但仍然有一个问题:在
app/config/router.php
(devtools创建的标准目录结构)中,我得到了一行
$router=$di->getRouter()(也是由devtools创建的)带有警告:
方法getRouter未在Phalcon\Di\FactoryDefault中找到

这个类中确实没有方法:->

现在我没有自动完成路由器的方法,这是我的问题。我做错什么了吗?

首先,我对法尔康不熟悉。以下是我根据PHP/PhpStorm的一般经验所作的评论

所以。。如果您查看最后一个链接()中的PHPDoc,您会注意到那里的代码示例有
$request=$di->getRequest()

如果你只是复制粘贴整个样本,你会得到相同的“找不到方法”错误。。。as
getRquest()
在运行时通过magic
\uu get()
方法进行转换

这里可能的解决方案是为
$di
创建自己的存根:

  • 创建将扩展原始
    Di
    的新类,例如

    class MyDi extends \Phalcon\Di
    
  • 在那里添加所有那些
    getRoute()
    /
    getRequest()
    etc方法(可能是像Phalcon的存根文件中那样具有空主体的真实方法..或者通过
    @method
    PHPDoc标记)

  • 将这样的文件放在项目中的任何地方——它将仅由IDE使用

  • 当您使用
    $di
    --在类中键入提示,例如

    /** @var \MyDi $di */
    $di = new Di();
    
    在上面运行时的代码中,
    $di
    将是
    di
    的一个实例,但对于开发期间的PhpStorm,它将是
    MyDi
    ,因此所有类型提示都已就位


  • 作为可能的替代方案--而不是通过
    $di->getRoute()使用magic。。尝试
    $di->getShared('route')
    或类似方法

    如果您使用它,将允许根据参数值获取正确的类型。

    $di->getRouter()
    是一种神奇的方法,
    Phalcon\di
    实现了
    \u call
    方法,如果您使用
    getRouter()
    ,它将以这种方式获得路由器服务

    如果需要,可以使用PHPStorm元数据并使用
    $di->get()