PhpStorm 不会解析包含使用常量
PhpStorm won't resolve includes using constants
这曾经有效,但最近停止了。我不认为我的设置有任何改变,但我现在已经在它们上面倒了几个小时以确保。我已经检查了所有 google 等等。在声称“这是在这里回答......”之前,请注意细节。谢谢。 :)
假设和要求
假设我们有两个文件:
<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
为什么还要使用常量?
为简单起见,我省略了说明问题不必要的细节。我想解决的主要问题是为什么它曾经有效但现在不再有效,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" 只会将此映射放在文件的顶部,而此映射对您的队友来说可能不正确。我只是将这些更改从我的提交中排除。
这曾经有效,但最近停止了。我不认为我的设置有任何改变,但我现在已经在它们上面倒了几个小时以确保。我已经检查了所有 google 等等。在声称“这是在这里回答......”之前,请注意细节。谢谢。 :)
假设和要求
假设我们有两个文件:
<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
为什么还要使用常量? 为简单起见,我省略了说明问题不必要的细节。我想解决的主要问题是为什么它曾经有效但现在不再有效,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" 只会将此映射放在文件的顶部,而此映射对您的队友来说可能不正确。我只是将这些更改从我的提交中排除。