PhpStorm无法解析使用常量

时间:2016-05-16 22:11:47

标签: php phpstorm

这曾经有效,但最近停止了工作。我认为我的设置没有任何改变,但我现在已经倾倒了几个小时以确保。我已经检查了所有谷歌和SO也。在声明“这是在这里得到解答”之前请注意细节谢谢。 :)

假设和要求

假设我们有两个文件:

  • <project_root>/index.php
  • <project_root>/folder/file.php

假设我们的项目根目录为/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

为什么还要使用常量? 为了简单起见,我遗漏了解释问题所不需要的细节。我想要解决的主要问题是为什么它曾经工作但不再工作,和/或我怎样才能让它再次运作。

抱歉,无法帮助。你 想要做什么? 这是我遗漏的细节。如果我们无法解决主要问题,也许我们可以找到一个好的工作。

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

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

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

如果你把它放在文件的任何地方,那么PhpStorm就能解析该文件中的所有包含/要求。但是,它只适用于该文件,即使您尝试在另一个文件中包含/要求它。你必须对每个文件执行此操作以使其在任何地方都能正常工作。不。新加坡国立大学医院,嗯。不,谢谢。我需要以PhpStorm在整个项目中识别的方式引用项目/ Web根目录的绝对路径。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在修补之前,我已创建了这项工作:

使用Keyboard Maestro,我创建了一个热键,将@define注释粘贴到文件顶部,并将光标返回到原始位置。 Download the macro here。导入并编辑文本。

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

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

另外,请注意,许多“已更改的文件”只会在文件顶部显示此映射,并且此映射可能对您的队友不正确。我只是将这些更改从我的提交中排除。