Pennant需Laravel 10.27+和PHP 8.1+,版本不符则无法安装;默认array驱动无持久化,切database或redis需发布配置、运行迁移或配置Redis连接;features表须手动加name索引以避免查询慢。

composer require 装不上 pennant?先确认 Laravel 版本和 PHP 扩展
Pennant 从 v1.0 起只支持 Laravel 10.27+ 和 PHP 8.1+,装不上大概率是版本卡住了。composer require laravel/pennant 报 requires laravel/framework ^10.27 错误时,别硬加 --ignore-platform-reqs —— 驱动层依赖模型事件和新式枚举,降级兼容性极差。
实操建议:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
php -v和php artisan --version确认真实环境版本 - 若用 Laravel 9 或更早,直接放弃 Pennant;改用
spatie/laravel-feature-repository这类轻量方案 - PHP 缺
ext-json或ext-pdo也会静默失败,php -m | grep -E "(json|pdo)"快速验证
Laravel Pennant 默认用数组驱动?怎么切到数据库或 Redis
Pennant 安装后默认走 array 驱动(内存级、无持久化),Feature Flag 开关一重启就丢。要持久化,必须手动切换驱动并发布配置。
实操建议:
- 先执行
php artisan vendor:publish --tag=pennant-config生成config/pennant.php - 把
'driver' => 'array'改成'driver' => 'database'或'driver' => 'redis' - 数据库驱动需提前运行
php artisan pennant:install建表(会建features表) - Redis 驱动不自动建连接,确保
config/database.php里redis.default已配好,且config/pennant.php中'connection' => 'default'对应正确
database 驱动写入慢?注意 features 表没加索引
高频调用 Feature::active('new_checkout') 时,如果 features 表没索引,MySQL/PG 查询会全表扫描,尤其当功能开关超 50 个后延迟明显上升。
实操建议:
-
php artisan pennant:install生成的迁移默认**不带索引**,得手动补:Schema::table('features', function (Blueprint $table) { $table->index('name'); }); - Redis 驱动虽快,但不支持「按用户组批量查开关」这类复杂查询,纯 KV 场景才推荐
- 别在
boot()里反复调用Feature::for($user)->active(...)—— 每次都查库/Redis,应合并为Feature::for($user)->state(['a', 'b', 'c'])
自定义驱动报 Class not found?服务提供者注册顺序是关键
写完 MySqlFeatureDriver 类、也加了 App\Providers\PennantServiceProvider,但 Feature::driver('mysql') 仍报错 —— 多半是服务提供者加载太晚,Laravel 已缓存了驱动映射。
实操建议:
- 自定义驱动类必须实现
Laravel\Pennant\Contracts\StoresFeatures接口 - 在
config/pennant.php里加驱动配置项:'drivers' => ['mysql' => [...]],不能只靠代码注册 -
PennantServiceProvider的register()方法里,必须用$this->app->resolving('pennant.driver.mysql', ...)绑定,而非$this->app->singleton() - 改完清配置缓存:
php artisan config:clear,否则config/pennant.php里的 driver 名称不会生效


















