composer require laravel/horizon 失败主因是环境不满足硬性依赖:PHP ≥ 8.0、启用 Redis 驱动、ext-pcntl 和 ext-posix 扩展(Windows 默认缺失),且 Horizon 版本须严格匹配 Laravel 主版本(如 Laravel 9.x → horizon:^4.0)。

为什么 composer require laravel/horizon 会失败?
直接运行 composer require laravel/horizon 失败,大概率不是命令写错了,而是环境不满足 Horizon 的硬性依赖。Horizon 要求 Laravel 应用已启用 Redis 驱动,并且 PHP 版本 ≥ 8.0(Laravel 10+ 对应 Horizon v5+),同时要求 ext-pcntl 和 ext-posix 扩展已启用——这两个扩展在 Windows 或某些 Docker 容器里默认缺失。
常见报错包括:
Your requirements could not be resolved to an installable set of packages.horizon requires ext-pcntl * -> it is missing from your system.- 或提示与
laravel/framework版本冲突(比如你用 Laravel 9 却装了 Horizon v5)
如何匹配正确的 Horizon 版本?
Horizon 版本和 Laravel 主版本强绑定,不能跨大版本混用。查清当前 Laravel 版本后,必须选对应 Horizon 小版本:
- Laravel 10.x → 用
laravel/horizon:^5.0 - Laravel 9.x → 用
laravel/horizon:^4.0 - Laravel 8.x → 用
laravel/horizon:^3.0
执行前先确认:
php artisan --version
再运行带版本约束的安装命令,例如:
composer require laravel/horizon:^4.0
不加 ^4.0 容易触发 Composer 自动选高版本,导致兼容性断裂。
安装后必须立刻做的三件事
Horizon 不是装完就能用的包,它依赖配置、服务注册和进程管理。漏掉任一环节都会导致 php artisan horizon 启动失败或面板空白:
- 运行
php artisan horizon:install—— 它会发布配置文件config/horizon.php和迁移文件 - 确保
config/queue.php中default驱动为redis,且connections.redis配置正确(尤其database值不能为 0,建议设为 1 避免和缓存冲突) - 在
app/Providers/AppServiceProvider.php的boot()方法中添加\Laravel\Horizon\Horizon::auth(function ($request) { return true; });(开发环境快速放行;生产环境必须重写鉴权逻辑)
Windows 下启动 Horizon 的实际限制
即使装成功,php artisan horizon 在 Windows 原生命令行下会卡住或报 pcntl_fork() is not available。这不是配置问题,是 PHP on Windows 不支持 pcntl 扩展。
可行方案只有两个:
- 用 WSL2 运行整个 Laravel 环境(推荐:Ubuntu + PHP 8.1+ + Redis)
- 改用 Supervisor 管理 Horizon 进程(仅适用于部署到 Linux 服务器,本地开发别折腾)
试图用 horizon:supervisor 或修改 horizon.php 的 environments 配置无法绕过这个底层限制。











