【发布时间】:2016-09-12 20:14:06
【问题描述】:
这曾经有效,但最近停止工作。我认为我的设置没有任何改变,但我已经倾注了几个小时来确定。我已经检查了整个谷歌和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
为什么还要使用常量? 为了简单起见,我省略了说明问题所不需要的细节。我想解决的主要问题是为什么这曾经有效但不再有效,和/或我怎样才能让它再次有效。
抱歉,帮不上忙。您真正想做什么? 这是我遗漏的细节。如果我们不能解决主要问题,也许我们可以找到一个好的解决方法。
我正在使用现有的代码库。大多数文件需要一个定义root_dir() 的config.php 文件来获取web/项目根目录。 PhpStorm 没有解决这些路径(可以理解),所以我创建了一个常量来代替它。无论如何,这更有意义。
在今天的战斗中,我发现你可以这样做:
/** @define "root_dir()" "/home/me/project/" */
// or
/** @define "ROOT_DIR" "/home/me/project/" */
如果您将它放在文件中的任何位置,那么 PhpStorm 能够解析该文件中的所有包含/要求。但是,它仅适用于该文件,即使您尝试在另一个文件中包含/要求它。您必须对每个文件执行此操作才能使其在任何地方都能正常工作。没有。嗯嗯。不,谢谢。我需要以 PhpStorm 将在整个项目中识别的方式引用项目/Web 根目录的绝对路径。
【问题讨论】:
-
另请注意:PhpStorm 最近更新了。
-
这是最新的 PhpStorm v2016.1.1 中的一个错误。他们最近正在研究常量和/或包括改进(possibly this one)。这一定是它的一些副作用(回归)。 可能这张票(不是 100% 肯定,因为我不使用包含/要求自己) - youtrack.jetbrains.com/issue/WI-31638