大数跨境

Symfony 和 PHP 的 Claude Code:真正有效的设置

Symfony 和 PHP 的 Claude Code:真正有效的设置 索引目录
2026-02-28
5
导读:关注「索引目录」公众号,获取更多干货。Claude Code是一款命令行工具,它允许你直接在终端中使用人工智能来编写、编辑和审查项目中的代码。

关注「索引目录」公众号,获取更多干货。

Claude Code是一款命令行工具,它允许你直接在终端中使用人工智能来编写、编辑和审查项目中的代码。我长期以来每天都使用它来开发 PHP 应用程序(Symfony 和 EasyAdmin),效果令人印象深刻。但要达到这样的效果,需要一些尝试和摸索。在本文中,我将分享促成这一切的设置、插件和工作流程。

要使用 Claude Code,您需要有效的Claude AI 订阅。我使用的是 Max 订阅(每月 100 美元),但 Pro 订阅(每月 17 美元)也可以。

用法

首先,按照 Claude 文档中的说明安装 Claude Code 并使用您的帐户登录。现在,您可以通过claude在项目目录中运行以下命令在终端中使用 Claude Code:

$ cd my-symfony-project/
$ claude

很多人都那样用,但我更喜欢在我的 IDE 里使用 Claude Code。它仍然是一个比较粗糙的基于命令行界面的应用程序,但它会直接显示在你的代码旁边,Claude Code 输出中的所有可点击文件路径都能让你快速跳转到相关的代码。

我的 IDE 是 PhpStorm,所以我使用的是 Anthropic 为 JetBrains IDE 开发的官方Claude Code 插件(Visual Studio Code 也有官方插件)。你可以在 PhpStorm 内置的插件市场找到它:



我一直都在使用 Claude Code,所以我把它放在右侧边栏打开,这样我就可以根据需要轻松地专注于代码或人工智能:



您需要了解的一点是,Claude Code 提供不同的模型。有些模型更智能,但正因如此,它们的运行速度也更慢,成本也更高(会更快地耗尽您的 Claude Code 配额)。您可以通过/model在 Claude Code 命令行界面 (CLI) 中运行命令来选择模型及其运行级别。

CLAUDE.md / AGENTS.md

这是本文最重要的观点。想象一下,你让我实现一个 Symfony 功能,但你却不告诉我任何关于项目规范的信息。我能做好吗?嗯,也许我用了你不喜欢的Yoda 条件语句,也许我用了自动装配,而你更喜欢显式的服务注册,等等。如果你不解释你喜欢什么样的代码,就别指望能得到好的代码。人工智能也是如此。

这个AGENTS.md文件(文件名与此完全相同,并存储在项目根目录下)描述了编写应用程序代码时的“注意事项”。在继续之前:Claude 首先会查找名为 `.claude.com` 的文件CLAUDE.md,所有 Claude 文档都会提到这个文件名。但是,名为 `.claude.com` 的文件AGENTS.md也能起到完全相同的作用,并且还有一个额外的好处:它CLAUDE.md仅适用于 Claude,但AGENTS.md适用于所有人工智能(Claude、Codex、Gemini、GitHub Copilot 等)。我建议您始终使用 `.claude.com` 文件AGENTS.md

Claude 提供了一个/init命令,可以在没有配置文件的项目中创建第一个配置文件AGENTS.md。有人说这个命令创建的AGENTS.md文件质量不好。无论你是否喜欢最终结果,你都需要不断调整这个文件。Claude Code 创建者本人也提到,他和他的团队会AGENTS.md持续更新项目中的配置文件。这是获得良好结果的关键。糟糕的配置文件无法生成优秀的代码AGENTS.md

你应该避免使用过于模糊或过于具体的指令。重点在于使用简单易懂且可操作的指令。使用“这样做”“不要这样做”之类的简单语言,不要使用晦涩难懂的信息(例如“不要试图避免不做foo和bar”)。

// WRONG: too vague
* Don't make mistakes
* Check everything well

// WRONG: too specific
* On UserMessageHandler, don't return early
* Use public constants on `app:foo-bar` command

// CORRECT: general and actionable instructions
* Use Yoda conditions: `if (null === $value)`
* Use strict comparisons only (`===`, `!==`)
* Name variables and methods in `camelCase`

除了讲解如何编写优秀的代码之外,AGENTS.md你还必须解释人工智能如何验证它编写的代码是否优秀。请提及你使用的工具以及如何运行它们(例如 PHPUnit、PHP-CS-Fixer、PHPStan、自定义 Makefile 任务等)。

对于 Symfony 项目,以下是一些有用的说明AGENTS.md示例:

* Use constructor promotion for dependency injection
* Use PHP attributes for routing, mapping, and configuration (never YAML/XML)
* Use Messenger handlers for async operations instead of putting logic in controllers
* [...]
* Run `php bin/console lint:container` to verify the dependency injection container compiles
* Run `php vendor/bin/phpstan analyse` to check for type errors
* Run `php vendor/bin/phpunit` to execute the test suite

如果您需要灵感,可以查看我们在 EasyAdmin 项目中使用的 AGENTS.md 文件。我们使用该文件取得了非常好的效果,但它可能并不适用于您的项目。因此,请不要完全照搬,只需从中汲取灵感,借鉴您喜欢的想法即可。

计划,计划,计划

这是本文的第二个重要观点。Claude Code 有两种主要的工作模式:计划模式工作模式。如果您不了解这一点,Claude Code 将始终处于工作模式,导致您在处理复杂任务时只能获得平庸的结果。因此,请将 Claude Code 切换到计划模式,并为您的错误修复或新功能制定计划。

在 Claude Code CLI(独立运行或嵌入到您的 IDE 中)中,按[Shift]+键[TAB]可在各种模式之间循环切换:


GIF



看到“.”就停下来⏸ plan mode on。现在,描述你想实现的功能,或者提供你正在尝试修复的错误信息。Claude 会开始思考,并可能会问你一些问题来澄清一些事情。我建议选择当前(截至今天Opus 4.6)功能最强大的模型,并将其High effort级别设置为“”。好的计划能够生成优秀的代码,所以你真的需要使用尽可能最好的模型来制定计划。

当克劳德·科德完成计划后,它会将其呈现给您。请您审阅,如果您有任何疑问或意见,请告诉克劳德。它会修改计划并再次呈现给您。请您继续提出问题并进行完善,直到您满意为止。

制定一个好的计划

怎样的提示才能生成好的方案呢?对我来说,最好的方法是既不要太模糊,也不要太具体。如果你的提示过于详细,甚至解释了如何解决问题,那么你就是在限制 Claude Code 执行你的指令,而不是让它自己提出解决方案。重要的是,尽可能地提及需要检查的关键文件或目录。这能极大地帮助 Claude Code,并使其快速生成有效的方案。

例如,在 EasyAdmin 4.26 中添加分组操作时,我的提示信息大致如下:“我们希望在后端添加一个分组操作的新功能。这主要适用于页面级别的全局操作,但也应该适用于每个实体的操作下拉菜单。分组操作应该有两种类型:(1)纯操作下拉菜单,点击按钮即可查看可用操作;(2)拆分按钮类型,提供一个可点击的主操作和一个包含其他操作的下拉菜单。请使用@templates /components/Button.html.twig 组件来实现此新功能(需要对其进行更新),并基于 Bootstrap 拆分按钮组件进行设计。”

我没有具体说明应该查找哪些类(例如 `<class> ActionFactory`),因为在这种情况下,AI 很容易就能找到它们。如果您处理的是复杂任务,并且知道解决方案应该专注于某些特定的类,请在提示中明确指出这些类。为此,请@在相对目录/文件路径前添加 `<class>` 字符(例如 `<class>` @tests/@src/Controller/UserController.php`<class>` 等)。在本例中,我提到了一个现有的 Twig 组件,因为我确信它适用于新功能。

简而言之,要制定一个好的计划:不要含糊其辞,不要事事亲力亲为,如果你知道重要的线索(例如要使用或查看的文件/目录),一定要包含这些线索。

对于非常复杂的任务(比如数万行代码),你可能需要花费超过 30 分钟的时间来做规划。别担心,好的计划是编写优秀代码的关键。你不是在浪费时间,而是在节省时间。

如果规划会议时间过长,您可以暂停并在稍后继续。使用命令/resume可以继续之前的 Claude Code 会议。如果您丢失了某个计划,请不要担心。所有计划都保存在指定位置~/.claude/plans/,因此您可以快速找到您创建的任何计划。

语境

当您最终对方案满意后,Claude Code 会显示几个可执行的操作。我建议您选择第一个(“是,清除上下文并自动接受编辑”)。清除上下文后,Claude Code 将开始自主执行方案。它会自动创建和编辑文件、运行测试并修复问题。如果您选择了“自动接受编辑”选项,它不会在每次更改时都请求您的许可。您可以实时查看进度,并在出现任何偏差时随时进行干预。

您可以将上下文理解人工智能处理任何任务的总容量。当您规划事项、提出问题或回答 Claude Code 的问题时,上下文就会不断填充。截至目前,Claude 提供的上下文包含 100 万个词元(人工智能使用的计量单位,大致相当于四分之三个单词)。

如果上下文已满,Claude Code 会尝试压缩内容,但最终结果会显著下降。因此,如果您规划了一个复杂的任务,并且上下文已占用超过 60%,那么实现过程可能会受到影响。这就是为什么建议在规划完成后始终清除上下文,以便实现工作能够获得完整的上下文信息。

每当您开始一项新任务时,请/clear在 Claude Code CLI 中运行命令以清空上下文并从头开始。

当事情出错时

即使计划周全,克劳德代码有时也会产生糟糕的结果。以下是我的应对方法:

  • 小错误
    (变量名错误、缺少类型提示):只需在聊天中告诉 Claude Code 哪里出错了,他就会立即修复。
  • 一切都出错了
    :如果实现方向错误,不要试图逐步修复。运行程序/clear,返回计划模式,并根据从失败尝试中吸取的教训改进计划。这比试图修补错误代码要快得多。

关键在于,修改糟糕的计划永远比修改糟糕的代码要好。如果结果始终不理想,问题几乎总是出在计划或你的AGENTS.md文件中,而不是 Claude Code 本身。

插件、技能、命令、代理、钩子

Claude Code 提供了多种方式来扩展工具的功能,例如插件代理技能钩子。然而,在我看来,这正是大多数人犯错的地方。他们安装了过多的插件、技能、代理和钩子,也创建了过多的自定义项。就连 Claude Code 的作者也提到他自己并没有使用太多这些功能,所以我建议尽量保持精简。

安装插件前,您必须注册插件分发所在的市场。Anthropic 官方市场(claude-plugins-official)默认启用。需要注意的是,Anthropic 还维护着另一个插件市场(anthropics/claude-plugins-official),其中包含一些有趣的插件。我建议您按如下方式添加第二个市场:

  1. 在任意位置运行该claude命令即可启动 Claude Code CLI
  2. 在 Claude Code 中运行/plugins命令以打开插件管理器
  3. 使用[←][→]键盘上的方向键选择Marketplaces标签页
  4. 确保+ Add Marketplace已选中并按下<Enter>
  5. 输入anthropics/claude-plugins-official并按下<Enter>按钮添加

添加第二个官方 Anthropic 软件仓库后,使用键盘方向键选择各个市场,然后点击Browse plugins查看可用插件列表并进行安装。以下是我推荐安装的插件列表

  • php-lsp
    :PHP 语言服务器 (Intelephense) 用于代码智能分析。强烈推荐。如果没有它,Claude Code 将无法理解您项目的类型系统:它会错误地命名方法、忽略构造函数参数,并使用不存在的类。有了它,Claude Code 就能像您的 IDE 一样浏览您的代码库。
  • context7
    强烈推荐;此功能允许 AI 阅读热门项目(包括 Symfony、Doctrine、Twig 和 API Platform)的最新文档,而无需进行网络搜索或浏览其网站。
  • code-review
    :使用多个专用代理审查拉取请求
  • code-simplifier
    简化和优化代码,使其更清晰、一致且易于维护。
  • security-guidance
    :一个用于在编辑文件时发出潜在安全问题警告的钩子,包括命令注入和跨站脚本攻击 (XSS)。
  • playwright
    :一款浏览器自动化和端到端测试工具。它允许 Claude Code 使用浏览器来调试 Symfony 应用程序中的问题(例如 Twig 模板中的渲染问题或 Stimulus 控制器中的 JavaScript 问题)。

就这些。我只用了这些插件就获得了非常好的效果,所以我建议不要花太多时间测试和配置插件。

关于技能命令钩子,我的建议是一样的。刚开始使用 Claude Code 时,不必过于担心它们。随着你对它的了解加深,如果你觉得某些自定义技能、命令或钩子对你有帮助,可以再添加。例如,我有一个自定义命令(存储在 `<claude-code>` 中~/.claude/commands/fix.md),它可以修复 GitHub 仓库中的问题(我只需要在 Claude Code 中运行它:`<claude-code> /fix {the issue number}`),因为我经常需要这样做:

---
allowed-tools: Bash(gh:*)
argument-hint: <issue-number>
description: Inspect a GitHub issue and plan/fix it
---

## Task

Analyze GitHub issue #$1 from this repository and fix it.

## Context

- Repository: !`gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null || echo "unknown"`
- Current branch: !`git branch --show-current`

## Steps

1. Fetch the issue: `gh issue view $1`

2. Analyze complexity:
   - **Trivial/Small** (typos, config tweaks, one-file fixes with clear solution): implement directly
   - **Medium/Large** (multiple files, architectural decisions, unclear scope): present a plan first

3. For direct implementation: make the fix, then summarize what was done.

4. For plans: detail the files to modify, proposed approach, and potential risks.

次级代理人

这是一个重要的概念,但随着 Claude Code 日益智能化,如今手动管理它已不再那么重要。对于某些任务,Claude Code 会自动启动称为子代理的自身副本,以并行处理不同的子任务。除了性能提升之外,子代理的主要优势在于,每个子代理都可以使用自身的上下文来完成任务,而不会影响主任务的上下文。

如果您正在处理复杂的任务,Claude Code 可能会自动启动子代理。您也可以通过在提示中明确指定“使用子代理并行执行所有任务”来强制执行此操作。Claude Code 最近推出了团队功能,作为子代理的高级版本。该功能目前仍处于实验阶段,但它允许您协调多个 Claude Code 实例以团队形式协同工作,共享任务、进行代理间消息传递并实现集中管理。

对于 Symfony 项目,当需要实现相关但独立的部分时,子代理非常有用:例如,同时创建 Messenger 处理程序、其对应的消息类和功能测试。

全局设置

如果您遵循了以上所有建议,那么在 Symfony 应用中使用 Claude Code 应该会取得不错的效果。但是,Claude Code 可能也让您有些烦恼。这是因为它在执行任何操作时都会请求权限:我可以读取此文件吗?我可以列出此目录的内容吗?我可以检查此文件的语法吗?

有些人会--dangerously-skip-permissions在运行claude命令时添加该选项。我不建议这样做。顾名思义,这在实践中非常危险。我的建议是使用全局权限来解决这个问题。您可以使用该~/.claude/settings.json文件来配置应用于所有 Claude Code 会话的设置。例如,以下是我的配置,它允许所有安全命令,禁止一些危险命令,并阻止访问某些文件:

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  },
  "permissions": {
    "allow": [
      "Bash(cat:*)",
      "Bash(curl:*)",
      "Bash(diff:*)",
      "Bash(echo:*)",
      "Bash(find:*)",
      "Bash(gh:*)",
      "Bash(git:*)",
      "Bash(grep:*)",
      "Bash(head:*)",
      "Bash(ls:*)",
      "Bash(pwd)",
      "Bash(tail:*)",
      "Bash(tree:*)",
      "Bash(wc:*)",
      "Bash(which:*)",
      "Bash(php-cs-fixer:*)",
      "Bash(php:*)",
      "Bash(phpstan:*)",
      "Bash(phpunit:*)",
      "Bash(symfony:*)"
    ],
    "deny": [
      "Bash(rm:*)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./config/secrets/.*)",
      "Read(./secrets/**)"
    ],
    "defaultMode": "acceptEdits"
  },
  "enabledPlugins": {
    "php-lsp@claude-plugins-official": true,
    "code-simplifier@claude-plugins-official": true,
    "context7@claude-plugins-official": true,
    "code-review@claude-plugins-official": true,
    "security-guidance@claude-plugins-official": true,
    "playwright@claude-plugins-official": true
  },
  "alwaysThinkingEnabled": true
}

在这个全局配置文件中,你还可以配置钩子。例如,我使用钩子在 Claude Code 创建或编辑文件时自动进行代码检查和格式化。这在 Symfony 项目中尤其有用,因为你需要在 PHP 文件中强制执行编码规范并验证 YAML 配置文件:

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "allow": [
      "..."
    ],
    "deny": [
      "..."
    ],
    "defaultMode": "acceptEdits"
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "case \"$CLAUDE_FILE_PATH\" in *.php) php-cs-fixer fix --quiet \"$CLAUDE_FILE_PATH\" 2>/dev/null || true ;; esac",
            "timeout": 30
          },
          {
            "type": "command",
            "command": "case \"$CLAUDE_FILE_PATH\" in *.yaml|*.yml) php bin/console lint:yaml \"$CLAUDE_FILE_PATH\" ;; esac"
          },
          {
            "type": "command",
            "command": "case \"$CLAUDE_FILE_PATH\" in *.json) python3 -m json.tool \"$CLAUDE_FILE_PATH\" > /dev/null ;; esac"
          }
        ]
      }
    ]
  }
}

后续步骤

如果你能从这篇文章中记住三点,那就记住这三点:(1)编写一个好的AGENTS.md文件并不断改进;(2)编写代码之前一定要做好规划;(3)不要给 Claude Code 安装过多插件。仅仅这三点就能比任何调整都带来更好的效果。


关注「索引目录」公众号,获取更多干货。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读1.2k
粉丝0
内容444