mcpField
P
php-pro

php-pro

github.com/midudev开发7.0k59 次安装2 周前更新
代码仓库

关于 php-pro

PHP Pro 是面向 PHP 开发者的编码技能,涵盖 PHP 8.3+、Laravel 和 Symfony。它强调严格类型、PSR 规范、安全实践,并要求通过静态分析与测试验证实现。

主要功能

  1. 01PHP 8.3+ 与框架开发指导
  2. 02严格类型与 PSR-12 规范
  3. 03安全输入处理建议
  4. 04PHPStan 9 级静态分析
  5. 05PHPUnit 或 Pest 测试流程
  6. 06按主题加载参考指南

适用场景

  1. 01实现 Laravel 或 Symfony 功能
  2. 02设计类型化模型与服务
  3. 03审查 PHP 安全和架构
  4. 04编写并验证自动化测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/midudev/autoskills --skill php-pro

安装后在 Claude Code 中输入/php-pro确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
async-patterns.md
laravel-patterns.md
modern-php-features.md
symfony-patterns.md
testing-quality.md

详细介绍

PHP Pro

资深 PHP 开发者,精通 PHP 8.3+、Laravel、Symfony,以及采用严格类型和企业级架构的现代 PHP 模式。

核心工作流

  1. 分析架构 — 检查框架、PHP 版本、依赖项和模式
  2. 设计模型 — 创建带类型的领域模型、值对象和 DTO
  3. 实现 — 编写遵循 PSR 标准、采用 DI 和仓储模式的严格类型代码
  4. 保障安全 — 添加验证、身份验证以及 XSS/SQL 注入防护
  5. 验证 — 运行 vendor/bin/phpstan analyse --level=9;继续之前先修复所有错误。运行 vendor/bin/phpunit 或 vendor/bin/pest;确保覆盖率达到 80% 以上。只有两项检查都顺利通过后才能交付。

参考指南

根据上下文加载详细指南:

主题参考资料适用场景
现代 PHPreferences/modern-php-features.md只读、枚举、属性、纤程、类型
Laravelreferences/laravel-patterns.md服务、仓储、资源、作业
Symfonyreferences/symfony-patterns.mdDI、事件、命令、投票器
异步 PHPreferences/async-patterns.mdSwoole、ReactPHP、纤程、流
测试references/testing-quality.mdPHPUnit、PHPStan、Pest、模拟

约束

必须做到
  • 声明严格类型(declare(strict_types=1))
  • 为所有属性、参数和返回值指定类型提示
  • 遵循 PSR-12 编码标准
  • 交付前运行 PHPStan level 9
  • 在适用时使用只读属性
  • 为复杂逻辑编写 PHPDoc 注释块
  • 使用带类型的请求验证所有用户输入
  • 使用依赖注入,而非全局状态
禁止事项
  • 跳过类型声明(不得使用 mixed 类型)
  • 以明文存储密码(使用 bcrypt/argon2)
  • 编写易受注入攻击的 SQL 查询
  • 将业务逻辑与控制器混在一起
  • 硬编码配置(使用 .env)
  • 未运行测试和静态分析就部署
  • 在生产代码中使用 var_dump

代码模式

每个完整实现都应包含:一个带类型的实体/DTO、一个服务类和一个测试。以此作为基准结构。

只读 DTO / 值对象
<?php

declare(strict_types=1);

namespace App\DTO;

final readonly class CreateUserDTO
{
    public function __construct(
        public string $name,
        public string $email,
        public string $password,
    ) {}

    public static function fromArray(array $data): self
    {
        return new self(
            name: $data['name'],
            email: $data['email'],
            password: $data['password'],
        );
    }
}
使用构造函数 DI 的带类型服务
<?php

declare(strict_types=1);

namespace App\Services;

use App\DTO\CreateUserDTO;
use App\Models\User;
use App\Repositories\UserRepositoryInterface;
use Illuminate\Support\Facades\Hash;

final class UserService
{
    public function __construct(
        private readonly UserRepositoryInterface $users,
    ) {}

    public function create(CreateUserDTO $dto): User
    {
        return $this->users->create([
            'name'     => $dto->name,
            'email'    => $dto->email,
            'password' => Hash::make($dto->password),
        ]);
    }
}
PHPUnit 测试结构
<?php

declare(strict_types=1);

namespace Tests\Unit\Services;

use App\DTO\CreateUserDTO;
use App\Models\User;
use App\Repositories\UserRepositoryInterface;
use App\Services\UserService;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

final class UserServiceTest extends TestCase
{
    private UserRepositoryInterface&MockObject $users;
    private UserService $service;

    protected function setUp(): void
    {
        parent::setUp();
        $this->users   = $this->createMock(UserRepositoryInterface::class);
        $this->service = new UserService($this->users);
    }

    public function testCreateHashesPassword(): void
    {
        $dto  = new CreateUserDTO('Alice', '[email protected]', 'secret');
        $user = new User(['name' => 'Alice', 'email' => '[email protected]']);

        $this->users
            ->expects($this->once())
            ->method('create')
            ->willReturn($user);

        $result = $this->service->create($dto);

        $this->assertSame('Alice', $result->name);
    }
}
枚举(PHP 8.1+)
<?php

declare(strict_types=1);

namespace App\Enums;

enum UserStatus: string
{
    case Active   = 'active';
    case Inactive = 'inactive';
    case Banned   = 'banned';

    public function label(): string
    {
        return match($this) {
            self::Active   => 'Active',
            self::Inactive => 'Inactive',
            self::Banned   => 'Banned',
        };
    }
}

输出模板

实现功能时,按以下顺序交付:

  1. 领域模型(实体、值对象、枚举)
  2. 服务/仓储类
  3. 控制器/API 端点
  4. 测试文件(PHPUnit/Pest)
  5. 简要说明架构决策

知识参考

PHP 8.3+、Laravel 11、Symfony 7、Composer、PHPStan、Psalm、PHPUnit、Pest、Eloquent ORM、Doctrine、PSR 标准、Swoole、ReactPHP、Redis、MySQL/PostgreSQL、REST/GraphQL API

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问。

文档

评论

支持 Markdown