【问题标题】:How to configure "Directories" when using a Symfony project in PhpStorm在 PhpStorm 中使用 Symfony 项目时如何配置“目录”
【发布时间】:2017-04-10 23:41:30
【问题描述】:

我使用 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 的行为。

【问题讨论】:

  • 赏金信息写错了,应该是不同的目录

标签: php phpstorm symfony


【解决方案1】:

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

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

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

【讨论】:

  • 点击[F4]触发什么的上下文是什么?它对我没有任何作用。您能否复制我的问题中显示的树并添加相关的标记?它可能对其他用户有用。
  • 如果没有显示另一个模态对话框,任何编辑器上下文都将起作用。但是,不同的用户可能有不同的键绑定,因此指定键盘快捷键可能没有多大用处,因此我将其删除。我不会将您的 ascii 图复制到我的答案中,因为我认为这不会带来任何清晰性;文字足够清晰。
  • 为了获得最佳性能和配置,请使用 Symfony 插件,github.com/Haehnchen/idea-php-symfony2-plugin
  • not having the vendor folder in excludedhaving it in excluded and having it in "Languages & Frameworks > PHP include path" 之间有什么区别。词研究有结果吗?
  • 在我的情况下,我在排除文件夹 snag.gy/EXhMUt.jpg 中有 vendor/ 并且 vendor/twig/twig 在 Languages > PHP > Include path snag.gy/WRlZi0.jpg 但我仍然没有 Twig_* 类的自动完成snag.gy/zKYf4k.jpg 。到底出了什么问题?
【解决方案2】:

在使用了Quolonel Questions's answer 的建议后,这里是我对 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/ 目录中执行搜索,即使这些目录被忽略。解决方案是从包含路径中删除所有vendor/*目录并只保留vendor/目录,如第一个屏幕截图所示。

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

【讨论】:

    【解决方案3】:

    另一个比手动排除 vendor 然后在 php 设置中再次包含它更容易的选项是在作曲家设置中告诉 PhpStorm composer.jsoncomposer.phar,如 this question 所示。

    【讨论】:

    • 虽然它仍然自动将所有供应商路径添加为我们想要的包含路径,但作曲家插件在使用远程解释器时会发出警告。
    【解决方案4】:

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

    • 您应该将您的 public_html 目录标记为资源根目录,或者您拥有的任何要公开的目录
    • 来源 - 你的app/ 目录
    • 如果您不想在搜索中使用vendors/,这也是我排除的,您可以按供应商和顶部的“排除”按钮。您还想排除 tmp/app/cache/ 目录
    • 如您所知,您可以在此处定义范围和搜索。

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

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

    我排除的文件夹是:

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

    【讨论】:

    • 有一个优秀的 phpStorm Symfony 插件,它提供了很多好处。
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2016-08-22
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多