【问题标题】:How can I add autocompletion for Flight PHP microframework in PHPStorm如何在 PHPStorm 中为 Flight PHP 微框架添加自动完成功能
【发布时间】:2014-12-24 21:52:52
【问题描述】:

我已经开始使用Flight microframework,但所有方法都隐藏在底层(未在Flight class 中声明)。

如何配置 PHPStorm 或者我应该编写新的规则集?

更新:使用框架实例不起作用

我尝试使用框架实例,但没有成功——我在建议列表中有内部方法:

更新:在 Flight 框架中实现自动完成

【问题讨论】:

  • 您是否检查了自述文件中的最后一部分——这应该是最简单的方法:github.com/mikecao/flight#framework-instance。否则,您将不得不以某种方式重新声明 Flight 类并在其中包含所有方法(例如,具有所有必需方法的假类 .. 但具有空主体 - IDE 将使用它来完成代码)
  • 感谢您指出这一点,但这种方法也不起作用。
  • 如果这不起作用(我只根据他们的文档提出了我最初的建议,没有查看代码)......那么唯一的选择是创建一个假的 Flight 类并声明那里都需要方法。

标签: autocomplete phpstorm flightphp


【解决方案1】:

首先:我建议在他们的Issue Tracker 上提交新问题,要求提供某种帮助文件(如下所示).. 或以任何其他方式实现它(例如通过 PHPDoc' @method for Flight 类 -- 不需要帮助程序,也不需要更改实际代码 -- 只是 PHPDoc),这样 IDE(例如 PhpStorm 或 Netbeans)就不会抱怨不存在的方法,你会有一些来自 IDE 的代码完成帮助。

魔法很好……但当整个界面都基于这种魔法时就不行了。


关于实际问题,您可以自己解决。

您将不得不花费一些时间(半小时甚至更少)并创建一些假的Flight并将其放在您的 IDE 中的任何位置——它将仅用于代码完成. 是的,IDE 可能会警告您有关重复的类.. 但可以关闭检查。

这个想法是创建一个类并声明所有必需的方法,如果它是一个普通类,它们应该这样做。首先(将在自述文件中解决first code example 的问题):

<?php
class Flight
{
    /**
     * Routes a URL to a callback function.
     *
     * @param string $pattern URL pattern to match
     * @param callback $callback Callback function
     * @param boolean $pass_route Pass the matching route object to the callback
     */
    public static function route($pattern, $callback, $pass_route = false) {}

    /**
     * Starts the framework.
     */
    public static function start() {}
}

这是现在的样子:

如您所见,Flight 被低估了——IDE 说这个项目中有不止一个类具有这样的名称。告诉 PhpStorm 不要报告此类情况:


通过@method PHPDoc 标签向原始类添加方法:

/**
 * Bla-bla -- class description
 *
 * @method static void route(string $pattern, callback $callback, bool $pass_route = false) Routes a URL to a callback function
 * @method static void start() Starts the framework
 */
class Flight
{
...
}

【讨论】:

  • 我应该在哪里添加二等舱?通过包含路径或添加到项目中(我正在使用作曲家)?也许我应该向项目提交拉取请求?
  • 也许我可以在主类中添加一些 PHPDoc(或替代方法)以进行自动完成?之后,我将向项目提交 PR,我项目中的其他开发人员将享受解决方案的简单性。
  • 1) 项目中的任何地方——无关紧要;如果在项目之外,那么是的——通过Settings | PHP | Include paths 引用该文件夹 2) 是的,你可以使用原始的Flight 类来做到这一点——使用@method 标签——查看更新
  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
相关资源
最近更新 更多