PhpStorm 不会解析包含使用常量

PhpStorm won't resolve includes using constants

这曾经有效,但最近停止了。我不认为我的设置有任何改变,但我现在已经在它们上面倒了几个小时以确保。我已经检查了所有 google 等等。在声称“这是在这里回答......”之前,请注意细节。谢谢。 :)


假设和要求

假设我们有两个文件:

假设我们的项目根目录是/home/me/project.

我们想从 index.php 中包含 file.php。我们希望 PhpStorm 能够解析文件路径并允许我们做漂亮的 IDE 事情,比如“Go To Declaration”。

有效方法

    require 'folder/file.php';

    require '/home/me/project/folder/file.php';

    $root = '/home/me/project/';
    require $root.'folder/file.php';

什么不再有效

    define('ROOT_DIR', "/home/me/project/");
    require ROOT_DIR.'folder/file.php';

PhpStorm 确实 在我鼠标悬停时识别 ROOT_DIR 的值,但它突出显示 home 并表示类似:Path '"/home/me...folder/file.php' not found

为什么还要使用常量? 为简单起见,我省略了说明问题不必要的细节。我想解决的主要问题是为什么它曾经有效但现在不再有效,and/or 我怎样才能让它再次起作用。


抱歉,帮不上忙。你真的想做什么? 这是我遗漏的细节。如果我们不能解决主要问题,也许我们可以找到一个好的解决方法。

我正在使用现有的代码库。大多数文件需要定义 root_dir()config.php 文件来获取 web/project 根目录。 PhpStorm 没有解析这些路径(可以理解),所以我创建了一个常量来代替它。无论如何,这更有意义。

在今天的战斗中,我发现你可以这样做:

    /** @define "root_dir()" "/home/me/project/" */
    // or
    /** @define "ROOT_DIR" "/home/me/project/" */

如果您将它放在文件中的任何位置,那么 PhpStorm 能够解析该文件中的所有 includes/requires。但是,它只在那个文件中有效,即使你试图在另一个文件中 include/require 它。您必须对每个文件执行此操作才能使其在任何地方工作。没有。嗯嗯。不,谢谢。我需要以 PhpStorm 将在整个项目中识别的方式引用 project/web 根目录的绝对路径。

@LazyOne 在评论中回答了这个问题。这是最新版本中的错误,正在此处进行跟踪:https://youtrack.jetbrains.com/issue/WI-31754

在修复此问题之前,我已经创建了此解决方法:

使用Keyboard Maestro, I created a hotkey that will paste the @define comment at the top of the file and return the cursor to its original position. Download the macro here。导入并编辑文本。

编辑:您实际上可能需要在常规文本编辑器中编辑文件。可能需要更改其中一个文件路径才能在您的系统上运行。

注意:我在 PHPStorm 中使用 Mac Eclipse 键盘布局的修改版本。我不确定这是否重要。

另外请注意,您的许多 "changed files" 只会将此映射放在文件的顶部,而此映射对您的队友来说可能不正确。我只是将这些更改从我的提交中排除。