在使用PhpStorm中的Symfony项目时如何配置“Directories”

56
我使用PhpStorm来开发Symfony项目。
在“文件>设置>项目…>目录”配置中,我将vendor/目录定义为“资源根目录”,以便自动补全,并将其作为“排除的文件夹”来忽略供应商在我的项目代码搜索中的结果。
但是我的问题是,供应商仍然显示在搜索结果中。
这是我的当前配置:

enter image description here

这是我想要避免的情况:显示来自vendor/的结果:

enter image description here

这是 PHP 的配置:

enter image description here

我可以通过选择Scope = Custom来限制搜索范围,但有时我会忘记更改它。我正在寻找一些设置,可以在我的不同Symfony2/3项目中使用。
为了允许PhpStorm将vendor/目录作为资源根目录并在执行搜索时忽略它,应该如何标记它?
对于Symfony2项目的默认目录结构,正确的配置是什么?以下是Symfony 2.8安装后的默认目录:composer create-project symfony/framework-standard-edition symfony-2.8 "~2.8"
app/
   config
   cache
   logs
   Resources
src/
   AppBundle/
vendor/
web/

这是我目前标记目录的方法:
.idea               [excluded]
app/
  ├ config
  ├ cache           [excluded]
  ├ logs            [excluded]
  └ Resources
src/                [source]
  └ AppBundle/
    └ Tests/        [test source folders]
vendor/             [excluded]
web/

注意:我安装了PhpStorm的Symfony插件,我不知道这是否会改变IDE的行为。

我在奖励信息中犯了一个错误,应该是“不同的目录”。 - A.L
4个回答

62

vendor文件夹不是资源根目录。资源根目录是指Web服务器将从中提供资源,例如图片和脚本的文件夹。

在您的情况下,唯一应标记为资源根目录的文件夹可能是web文件夹,但具有讽刺意味的是,这几乎是您未选择为资源根目录的唯一文件夹。将web标记为资源根目录意味着绝对URLs/css/foo.css/images/foo.jpg可以成为Web服务器提供的有效资源;您可能希望删除所有其他文件夹作为资源根目录。

排除vendor文件夹是正确的,因为它不是您的第一方项目代码的一部分。为了使第三方代码的代码完成工作,必须将vendor文件夹添加为外部库。这可以通过导航到选项中的Languages & Frameworks > PHP,并将vendor文件夹指定为包含路径来完成。


点击 [F4] 触发了什么上下文?对我来说没有任何反应。您能否在回答中复制问题中显示的树形结构并添加相关的 标记?这可能对其他用户有用。 - A.L
如果没有其他模态对话框显示,任何编辑器上下文都可以工作。然而,不同的用户可能有不同的键绑定,所以指定键盘快捷键可能并不那么有用,因此我将删除它。我不会将您的ASCII图表复制到我的答案中,因为我认为这不会带来任何清晰度;文本已经足够清晰了。 - Quolonel Questions
2
“not having the vendor folder in excluded”和“将其排除并将其放在“语言和框架> PHP包含路径”中”的区别是什么?这会对单词研究产生影响吗? - Kwadz
当您使用类似gulp的工具来连接所有JS文件和css/scss时,情况并非如此。 - RichieHH
看起来没用。一旦将供应商文件夹添加到“语言和框架> PHP包含路径”中,被排除的供应商文件夹就会再次被包含,并参与搜索。 - Ross
显示剩余4条评论

27

使用 Quolonel Questions 的回答 中的建议后,这是我的 Symfony2 配置摘要(查看本回答末尾的 Symfony3):

为了实现自动完成,请在 包含路径 中使用 vendor/ 目录:

输入图像说明

为避免在项目中搜索时出现无关结果,必须忽略以下目录:

.idea               [excluded]
app/
  ├ cache           [excluded]
  └ logs            [excluded]
vendor/             [excluded]

输入图片描述

这是我的完整配置:

.idea               [excluded]
app/
  ├ cache           [excluded]
  └ logs            [excluded]
src/                [source]
  └ AppBundle/
    └ */Tests/      [test source folders]
vendor/             [excluded]
web/                [resources root]

测试源文件夹 是可选的,如果定义了它们,它们将显示在工具栏中:

在此输入图像描述


使用 Symfony3 的默认配置,这些目录略有不同:

.idea               [excluded]
src/                [source]
tests/              [test source folders]
var/
  ├ cache           [excluded]
  └ logs            [excluded]
vendor/             [excluded]
web/                [resources root]
更新:在使用composer update更新我的依赖项后,PhpStorm 在搜索时会查找vendor/目录,即使这些目录已被忽略。解决方法是从包含路径中删除所有的vendor/*目录,只保留vendor/目录,如第一个截图所示。
我将测试是否将所有vendor/*目录标记为已忽略可以起作用并避免每次使用composer update后重复此操作。

3

另一个比手动排除vendor文件夹并在php设置中再次包含它更容易的选择是,在composer设置中告诉PhpStorm关于composer.jsoncomposer.phar,如此问题所示。


虽然它仍会自动添加所有供应商路径作为包含路径,就像我们在这里想要的那样,但是当使用远程解释器时,composer插件会发出警告。 - Emile Bergeron

-1

我使用PhpStorm 10作为Symfony2的主要IDE。您不需要安装任何Symfony插件,因为PhpStorm默认支持Symfony2。

  • 您应该将public_html目录标记为资源根目录,或者您要公开的任何内容
  • 源代码-您的app/目录
  • 如果您不想在搜索中包含vendors/,那么我也会排除它,您可以按vendor并在顶部单击“排除”按钮。您还需要排除tmp/app/cache/目录
  • 正如您已经知道的那样,您可以在那里定义范围和搜索。

当您排除目录时,它还有助于性能,因为PhpStorm不会对那里的文件进行索引和监视,这是您不想要的。

至于Symfony2的目录结构,它非常灵活,我使用自己的。这里是来自文档的Symfony 2.8 directory结构。

对我来说,被排除的文件夹是:

  • app/DoctrineMigrations
  • app/cache
  • app/logs/
  • tmp/

以上是程序相关的路径。

2
有一个出色的Symfony插件适用于phpStorm,提供了许多好处。 - Acyra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接