入门 Zed Industries 2026-09-14 17:42:19 · 0 阅读

第95章 Zed PHP 扩展:PHP 支持、Language Server 配置与安装指南

PHP 支持可通过 PHP 扩展 获取。

安装 PHP

PHP 扩展要求系统中已安装 PHP 且在其 PATH 中可用:

# macOS (通过 Homebrew)
brew install php

# Debian/Ubuntu
sudo apt-get install php-cli

# CentOS 8+/RHEL
sudo dnf install php-cli

# Arch Linux
sudo pacman -S php

# 检查 PHP 路径
## macOS 和 Linux
which php

## Windows
where php

选择 Language Server

PHP 扩展使用 LSP Language Server,默认采用 Phpactor。如果想使用其他支持 Zed 的 Language Server(例如 Intelephense、PHP Tools 或 PHPantom),请务必参考相关文档了解实现方式。

Intelephense

Intelephense 是一个 PHP 专有 专有 Language Server,采用免费增值模式。部分功能需购买高级许可证才能使用。

请在设置({#kb zed::OpenSettings})中的 Languages > PHP 下配置 Language Server,或在设置文件中添加以下内容:

{
  "languages": {
    "PHP": {
      "language_servers": [
        "intelephense",
        "!phpactor",
        "!phptools",
        "!phpantom",
        "..."
      ]
    }
  }
}

如需使用高级功能,macOS 和 Linux 用户可将许可证文件放置在主目录下的 ~/intelephense/licence.txt,Windows 用户则放置在 %USERPROFILE%/intelephense/licence.txt

或者,你可以将许可证密钥或包含许可证密钥的文件路径作为初始化选项传入。为此,请在你的 settings.json 中添加以下内容:

{
  "lsp": {
    "intelephense": {
      "initialization_options": {
        "licenceKey": "/path/to/licence.txt"
      }
    }
  }
}

PHP Tools

PHP Tools 是一个专有语言服务器,提供基础和高级功能。你需要购买许可证才能启用高级功能。

在设置({#kb zed::OpenSettings})中的 Languages > PHP 下配置语言服务器,或者添加到你的设置文件中:

{
  "languages": {
    "PHP": {
      "language_servers": [
        "phptools",
        "!intelephense",
        "!phpactor",
        "!phpantom",
        "..."
      ]
    }
  }
}

若要使用高级功能,可以在 settings.jsoninitialization_options 中添加你的许可证:

{
  "lsp": {
    "phptools": {
      "initialization_options": {
        "0": "your_license_key"
      }
    }
  }
}

或者,在项目根目录的 .env 文件中设置环境变量 DEVSENSE_PHP_LS_LICENSE

DEVSENSE_PHP_LS_LICENSE="your_license_key"

更多详情参见 PHP Tools for Zed 的文档

Phpactor

在设置({#kb zed::OpenSettings})中的 Languages > PHP 下配置语言服务器,或者添加到你的设置文件中:

{
  "languages": {
    "PHP": {
      "language_servers": [
        "phpactor",
        "!intelephense",
        "!phptools",
        "!phpantom",
        "..."
      ]
    }
  }
}

PHPantom

在设置({#kb zed::OpenSettings})中的 Languages > PHP 下配置语言服务器,或者添加到你的设置文件中:

{
  "languages": {
    "PHP": {
      "language_servers": [
        "phpantom",
        "!phpactor",
        "!intelephense",
        "!phptools",
        "..."
      ]
    }
  }
}

PHPDoc

Zed 支持 PHPDoc 注释的语法高亮。

调试

PHP 扩展通过 Xdebug 为 PHP 提供了调试适配器,有以下几种使用方式:

[
  {
    "label": "PHP: Listen to Xdebug",
    "adapter": "Xdebug",
    "request": "launch",
    "port": 9003
  },
  {
    "label": "PHP: Debug this test",
    "adapter": "Xdebug",
    "request": "launch",
    "program": "vendor/bin/phpunit",
    "args": ["--filter", "$ZED_SYMBOL"]
  }
]

如果遇到问题,可以参考以下常见的排错建议:

  • 确保你运行的 PHP 版本已安装 Xdebug。
  • 确保 Xdebug 已配置为 debug 模式。
  • 确保 Xdebug 确实启动了调试会话。
  • 确保 Xdebug 与 Zed 的主机名和端口配置一致。
  • 在待调试的页面中调用 xdebug_info() 函数,查看诊断日志。

在 PHP 中使用 Tailwind CSS 语言服务器

想在 PHP 文件中获得 Tailwind CSS 语言服务器的全部功能(自动补全、代码检查等),需要配置该语言服务器,让它知道去哪里查找 CSS 类。在 settings.json 中添加以下内容即可:

{
  "lsp": {
    "tailwindcss-language-server": {
      "settings": {
        "includeLanguages": {
          "php": "html"
        },
        "experimental": {
          "classRegex": [
            "class=\"([^\"]*)\"",
            "class='([^']*)'",
            "class=\\\"([^\\\"]*)\\\""
          ]
        }
      }
    }
  }
}

配置这些选项后,在 PHP 文件的 HTML 属性中即可使用 Tailwind CSS 类的自动补全。例如:

<?php
// 包含 HTML 的 PHP 文件:
?>
<div class="flex items-center <在此处补全>">
  <p class="text-lg font-bold <在此处补全>">Hello World</p>
</div>

Laravel/Blade

对于 Laravel/Blade 文件,可能需要额外配置以处理 Blade 指令:

{
  "lsp": {
    "tailwindcss-language-server": {
      "settings": {
        "includeLanguages": {
          "php": "html",
          "blade": "html"
        },
        "experimental": {
          "classRegex": [
            "class=\"([^\"]*)\"",
            "class='([^']*)'",
            "class=\\\"([^\\\"]*)\\\"",
            "@class\\(\\[([^\\]]*)\\]\\)"
          ]
        }
      }
    }
  }
}

这样也能在如下的 Blade 指令中提供补全:

{{-- Blade 文件 --}}
<div class="flex {{ $customClass }} <在此处补全>">
  @class(['flex', 'items-center', '<在此处补全>'])
</div>

评论 (0)