mcpField
L
laravel-architecture

laravel-architecture

github.com/fusengine开发34142 次安装2 周前更新
代码仓库

关于 laravel-architecture

laravel-architecture 是面向 Laravel 开发者的架构技能资料,涵盖项目组织、依赖注入、配置、开发环境和生产部署。它结合参考指南与代码模板,也包含 MCP 服务、工具、资源和提示词的模板。

主要功能

  1. 01项目目录与分层设计指南
  2. 02服务容器和依赖注入参考
  3. 03配置及开发环境说明
  4. 04Artisan、文件系统与并发参考
  5. 05部署、日志与错误处理指南
  6. 06MCP 服务模板

适用场景

  1. 01规划新 Laravel 项目结构
  2. 02实现服务、仓库与依赖注入
  3. 03配置开发环境和应用部署
  4. 04在 Laravel 项目中编写 MCP 服务

MCP 相关

资料包含 MCP 参考指南,以及用于创建 MCP 服务、工具、资源和提示词的模板。

安装

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

$npx skills add https://github.com/fusengine/agents --skill laravel-architecture

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

包含的文件

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

references/
artisan.md
concurrency.md
configuration.md
container.md
context.md
contracts.md
deployment.md
envoy.md
errors.md
facades.md
filesystem.md
helpers.md
homestead.md
installation.md
lifecycle.md
logging.md
mcp.md
octane.md
packages.md
pennant.md
processes.md
providers.md
releases.md
sail.md
structure.md
references/templates/
AppServiceProvider.php.md
ArtisanCommand.php.md
Envoy.blade.php.md
McpServer.php.md
octane-config.md

详细介绍

全面涵盖 Laravel 应用架构:项目结构 (Actions、Contracts、DTOs、Services、Repositories 布局)、服务容器与依赖注入、服务提供者与 Facades、环境与配置、开发环境(Sail、Valet、Homestead、Octane)、Artisan CLI、文件系统/进程/上下文、功能开关(Pennant)、MCP 服务、并发,以及生产部署(包括 Envoy、日志记录、错误处理和软件包编写)。

Laravel 架构模式

Agent 工作流(必须遵循)

在进行任何实现之前,并行启动 3 个 Agent,每个分别调用一次 Agent,并指定一个 name:

  1. fuse-ai-pilot:explore-codebase - 分析现有架构
  2. fuse-ai-pilot:research-expert - 通过 Context7 验证 Laravel 模式
  3. mcp__context7__query-docs - 检查服务容器和 DI 模式

实现之后,运行 fuse-ai-pilot:sniper 进行验证。


概述

Laravel 架构注重清晰的职责分离、依赖注入和易于维护的代码组织。本技能涵盖从项目结构到生产部署的所有内容。

适用场景
  • 构建新的 Laravel 项目
  • 实现服务、Repositories 和 Actions
  • 设置依赖注入
  • 配置开发环境
  • 部署到生产环境

关键规则

  1. 控制器保持精简 - 将业务逻辑委托给服务
  2. 接口放在 app/Contracts/ - 绝不与实现放在一起
  3. 优先使用 DI,而非 Facades - 使用构造函数注入以便测试
  4. 文件行数不超过 FUSE_SOLID_MAX_LINES - 按照 SOLID 原则拆分较大的文件
  5. 区分环境 - 绝不提交 .env

架构

app/
├── Actions/              # Single-purpose action classes
├── Contracts/            # Interfaces (DI)
├── DTOs/                 # Data transfer objects
├── Enums/                # PHP 8.1+ enums
├── Events/               # Domain events
├── Http/
│   ├── Controllers/      # Thin controllers
│   ├── Middleware/       # Request filters
│   ├── Requests/         # Form validation
│   └── Resources/        # API transformations
├── Jobs/                 # Queued jobs
├── Listeners/            # Event handlers
├── Models/               # Eloquent models only
├── Policies/             # Authorization
├── Providers/            # Service registration
├── Repositories/         # Data access layer
└── Services/             # Business logic

参考指南

核心架构
参考适用场景
container.md依赖注入、绑定、解析
providers.md服务注册、引导
facades.md静态代理、实时 Facades
contracts.md接口、松耦合
structure.md目录组织
lifecycle.md请求处理流程
配置与设置
参考适用场景
configuration.md环境、配置文件
installation.md新项目设置
upgrade.md版本升级、破坏性变更
releases.md发布说明、版本管理
开发环境
参考适用场景
sail.mdDocker 开发
valet.mdmacOS 原生开发
homestead.mdVagrant(旧版)
octane.md高性能服务端
实用工具
参考适用场景
artisan.mdCLI 命令、自定义命令
helpers.md全局辅助函数
filesystem.md文件存储、S3、本地存储
processes.mdShell 命令执行
context.md请求范围内的数据共享
高级功能
参考适用场景
pennant.md功能开关
mcp.mdModel Context Protocol
concurrency.md并行执行
运维
参考使用场景
deployment.md生产环境部署
envoy.mdSSH 任务自动化
logging.md日志通道、格式
errors.md异常处理
packages.md创建软件包

模板

模板用途
UserService.php.md服务 + 仓库模式
AppServiceProvider.php.mdDI 绑定、引导
ArtisanCommand.php.mdCLI 命令、签名、I/O
McpServer.php.mdMCP 服务、工具、资源、提示词
PennantFeature.php.md功能标志、A/B 测试
Envoy.blade.php.mdSSH 部署自动化
sail-config.mdDocker Sail 配置
octane-config.mdFrankenPHP、Swoole、RoadRunner

功能矩阵

功能参考优先级
服务容器container.md高
服务提供者providers.md高
目录结构structure.md高
配置configuration.md高
安装installation.md高
Octane(性能)octane.md高
Sail(Docker)sail.md高
Artisan CLIartisan.md中
部署deployment.md中
Envoy(SSH)envoy.md中
Facadesfacades.md中
Contractscontracts.md中
Valet(macOS)valet.md中
升级指南upgrade.md中
日志记录logging.md中
错误errors.md中
生命周期lifecycle.md中
文件系统filesystem.md中
辅助函数helpers.md低
Pennant(标志)pennant.md低
上下文context.md低
进程processes.md低
并发concurrency.md低
MCPmcp.md低
软件包packages.md低
发布releases.md低
Homesteadhomestead.md低

快速参考

服务注入
public function __construct(
    private readonly UserServiceInterface $userService,
) {}
服务提供者绑定
public function register(): void
{
    $this->app->bind(UserServiceInterface::class, UserService::class);
    $this->app->singleton(CacheService::class);
}
Artisan 命令
php artisan make:provider CustomServiceProvider
php artisan make:command ProcessOrders
环境访问
$debug = env('APP_DEBUG', false);
$config = config('app.name');

Laravel 13 说明

更新后的技术栈
  • Symfony 7.4 和 8.0 可并行使用(HttpFoundation、Console、Mailer)
  • 最低要求 PHP 8.3(不再支持 8.2)
  • Beanstalk 驱动需要 pda/pheanstalk 7.x / 8.x(不再支持 5.x)
  • 当前稳定版本:13.33(2026 年 9 月)
Cache::touch() API

新增方法,可在不重新计算值的情况下刷新 TTL。

Cache::touch('user:123', 3600);
Cache::touch('user:123', now()->addHour());
用于动态路由的 Queue::route()

参见 [[laravel-queues]],了解如何为每个作业类声明路由(Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts')),以及 Queue::forward()(13.26+)。

嵌套模型引导 → LogicException

Laravel 13 会在模型自身引导期间实例化模型(在模型的 boot() 或 trait 的 boot*() 中调用 new static())时抛出 LogicException。请将该逻辑移出引导周期。

13.x 新增内容(13.1 → 13.33)
  • php artisan dev(13.16+):在单个终端中运行服务器、queue:listen、Pail 和 Vite;可通过 AppServiceProvider::boot() 中的 Illuminate\Foundation\DevCommands::artisan('horizon', 'horizon') 自定义,并可通过 php artisan dev:list 查看(需要 Node 22.13+)
  • #[BindWhen(Impl::class, static fn () => ...)](13.22+):在接口上声明条件绑定——需要 PHP 8.5
  • 大多数管理器均支持枚举(UnitEnum)(Cache::store()、Queue、Log、Mail、Auth::guard() 等)(13.3 → 13.7)
  • 支持 Guzzle 8(13.26+)

Laravel 12 → 13 迁移

主题之前(12)之后(13)
PHP 最低版本8.28.3
PHPUnit1112(支持 13)
Pest34(PHP 8.4+ 时支持 5)
CSRFVerifyCsrfTokenPreventRequestForgery(通过 Sec-Fetch-Site 检查来源)
缓存前缀下划线默认使用连字符(设置 CACHE_PREFIX、REDIS_PREFIX、SESSION_COOKIE 以保持向后兼容)
Beanstalkpheanstalk 5.xpheanstalk 7.x / 8.x
Symfony7.x7.4 / 8.0
模型引导可接受模型引导期间嵌套实例化 → LogicException
配置—新增 cache.serializable_classes(强化允许列表,默认值为 false)
# Backward-compatible cache prefixes when upgrading from L12
CACHE_PREFIX=laravel_cache_
REDIS_PREFIX=laravel_database_
SESSION_COOKIE=laravel_session
// config/cache.php — deserialization hardening
'serializable_classes' => [
    App\DTO\PaymentDto::class,
    App\DTO\OrderDto::class,
],

最佳实践

应做
  • 为 DTO 和值对象使用 final readonly class(PHP 8.3+)
  • 通过构造函数属性提升注入,并使用 interface(依赖倒置)
  • 使用 Context::add() 记录日志,在任务 / 请求间传递元数据
  • 在生产环境中配置 serializable_classes
  • 优先使用 app(Contract::class),而非 App::make()(严格类型)
不应做
  • 在模型自身的引导期间实例化模型(在 boot() 中使用 new static() → L13 中会触发 LogicException)
  • 硬编码绝对路径(使用 base_path()、storage_path())
  • 混用 Repository 和 Service(每项职责各用一个)
  • 使用 new ConcreteClass() 绕过容器
  • 从 L12 升级时忽略缓存前缀的变化

评论

支持 Markdown