【问题标题】:PhalconPHP - getRouter in \Phalcon\DiPhalconPHP - \Phalcon\Di 中的 getRouter
【发布时间】:2017-07-05 18:43:27
【问题描述】:

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

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

【问题讨论】:

    标签: php phpstorm phalcon


    【解决方案1】:

    首先——我不熟悉 Phalcon。这些是我基于一般 PHP/PhpStorm 经验的 cmets。

    所以 .. 如果您查看您提供的最后一个链接 (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,因此所有类型提示都已到位。


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

    如果您使用PhpStorm's Advanced Metadata functionality,它将允许根据参数值获取正确的类型。

    【讨论】:

      【解决方案2】:

      $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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多