在 PhpStorm 中使用 Symfony 项目时如何配置 "Directories"

How to configure "Directories" when using a Symfony project in PhpStorm

我使用 PhpStorm 处理 Symfony 项目。

File > Settings > Project … > Directories 配置中,我将 vendor/ 目录定义为 Resource root为了自动完成并作为排除文件夹,因为我想在我的项目代码中执行搜索时忽略供应商。

但我的问题是供应商仍然显示在搜索结果中。

这是我当前的配置:

这是我试图避免的:显示 vendor/ 的结果:

这里是 PHP 配置:

我可以通过选择 Scope = Custom 来限制搜索,但有时我忘记更改它。我正在寻找一些可以在我的不同 Symfony2/3 项目中使用的设置。

我应该如何标记 vendor/ 目录以允许 PhpStorm 将其用作资源根目录并在执行搜索时忽略它?

Symfony2 项目的默认目录结构的正确配置是什么?以下是使用 composer create-project symfony/framework-standard-edition symfony-2.8 "~2.8":

安装 Symfony 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 行为。

vendor 文件夹不是资源根目录。资源根目录是一个文件夹,网络服务器将从中提供图像和脚本等资源。

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

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

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

  • 您应该将您的 public_html 目录标记为资源根目录,或者您拥有的任何内容将成为 public
  • 来源 - 您的 app/ 目录
  • 如果您不想 vendors/ 在搜索中,那也是我排除的,您按供应商和顶部的 "Excluded" 按钮。您还想排除 tmp/app/cache/ 目录
  • 如您所知,您可以定义范围并在那里进行搜索。

当您排除目录时,它也有助于提高性能,因为 PhpStorm 不会索引和监视那里的文件,这是您无论如何都不想要的。

Symfony2的目录结构比较灵活,我用的是自己的。这是文档中的 Symfony 2.8 directory 结构。

我排除的文件夹是:

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

在使用了 的建议后,这里是我对 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]

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


default configuration for Symfony3目录略有不同:

.idea               [excluded]
src/                [source]
tests/              [test source folders]
var/
  ├ cache           [excluded]
  └ logs            [excluded]
vendor/             [excluded]
web/                [resources root]

更新:在使用 composer update 更新我的依赖项后,PhpStorm 在 vendor/ 目录中执行搜索,即使这些目录被 忽略 。解决方案是从 Include path 中删除所有 vendor/* 目录,只保留 vendor/ 目录,如第一个屏幕截图所示。

我将不得不测试将所有 vendor/* 目录标记为 忽略 是否可行,并避免在每次使用 composer update 后重复此操作.

另一个比手动排除 vendor 然后在 php 设置中再次包含它更容易的选项是在 composer 中告诉 PhpStorm 关于 composer.jsoncomposer.phar设置如 .

所示