PhalconPHP - 位于\ Phalcon \ Di的getRouter

时间:2017-07-05 18:43:27

标签: php phpstorm phalcon

我使用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

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

2 个答案:

答案 0 :(得分:0)

首先 - 我对Phalcon并不熟悉。这些是基于一般PHP / PhpStorm经验的评论。

所以..如果你看一下你给出的最后一个链接(stubs for Di.php)中的PHPDoc,你会注意到那里有$request = $di->getRequest();的代码示例。

如果您只是复制粘贴整个示例,则会得到相同的“找不到方法”错误...因为getRquest()在运行时通过魔术__get()方法进行转换。

此处可能的解决方案是为您的$di

创建自己的存根
  1. 创建将扩展原始Di的新类,例如

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

  3. 将此类文件放在项目的任何位置 - 它仅供IDE使用。

  4. 当您使用$di时,请将其与您的班级一起输入,例如:

    /** @var \MyDi $di */
    $di = new Di();
    

    在上面的代码中,运行时$di将是Di的实例,但对于PhpStorm在开发期间它将是MyDi所以所有类型提示都已到位。

    < / LI>

    作为可能的选择 - 而不是通过$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