首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhalconPHP - getRouter in \Phalcon\Di

PhalconPHP - getRouter in \Phalcon\Di
EN

Stack Overflow用户
提问于 2017-07-06 02:43:27
回答 2查看 513关注 0票数 0

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

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

EN

回答 2

Stack Overflow用户

发布于 2017-07-06 03:04:47

首先,我不熟悉Phalcon。这些是我根据PHP/PhpStorm的一般经验所做的评论。

所以..。如果您查看您提供最后一个链接(stubs for Di.php)中的PHPDoc,您会注意到其中包含$request = $di->getRequest();的代码示例。

如果你只是复制粘贴整个样本,你会得到同样的“找不到方法”的错误...因为getRquest()是通过神奇的__get()方法在运行时转换的。

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

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

类MyDi扩展了\Phalcon\Di

  • Add中的所有那些getRoute() / getRequest()等方法(可以是具有空体的实际方法,如Phalcon的存根文件中的。或通过@method PHPDoc标记)

  • 将此文件放在项目中的任何位置--它将仅供集成开发环境使用。

  • 当您使用$di时--键入它与您的类一起提示,例如

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

在上面的代码中,在运行时,$di将是Di的一个实例,但对于PhpStorm,在开发期间,它将是MyDi,因此所有类型提示都在适当的位置。

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-07-06 18:18:06

$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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44933776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档