繁体   English   中英

PhalconPHP-\\ Phalcon \\ Di中的getRouter

[英]PhalconPHP - getRouter in \Phalcon\Di

我使用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/FactoryDe​​fault.php- > https://github.com/多尔康/多尔康-devtools /斑点/ 3.1.X / IDE /存根/多尔康/ Di.php

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

首先-我对Phalcon不熟悉。 这些是基于一般PHP / PhpStorm经验得出的意见。

所以..如果您在给出的最后一个链接中查看该PHPDoc( Di.php的存根 ),您会注意到那里的代码示例具有$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的高级元数据功能 ,它将允许根据参数值获取正确的类型。

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM