Laravel 切换
是一个轻量级的特性标志包,专注于全局开关。Laravel 的第一方
三角旗
该软件包专为用户细分发布和 A/B 测试而设计;Laravel Toggle 则有意简化,完全跳过了用户细分,只保留了由开关控制的选项。
.env
数据库,或者两者的结合。
安装
该软件包需要 PHP 8.2+ 和 Laravel 11、12 或 13。
作曲家
要求
卸载项目/laravel-togglephp
工匠
供应商:发布
--tag=切换配置
如果您计划使用数据库驱动程序,请发布并运行迁移:
php
工匠
供应商:发布
--tag=切换迁移php
工匠
迁移
定义和检查切换开关
旗帜生活于
config/toggle.php
并且可以通过环境变量进行支持:
“旗帜”
=>
[
'评论'
=>
环境
(
'切换评论'
,
真的
),
相关文章
=>
环境
(
'切换相关文章'
,
错误的
),],
你通过以下方式检查它们
Toggle
外观。文章控制器可以根据标志位有条件地加载关联关系,而不会污染查询:
使用
卸载项目\切换\立面\切换
;班级
文章控制器{
民众
功能
展示
(
细绳
$slug){$文章
=
文章
::
在哪里
(
'slug'
,$slug)
->
什么时候
(
切换
::
积极的
(
'评论'
),
fn
($q) => $q
->
和
(
'评论.作者'
))
->
先失败
();
返回
看法
(
'articles.show'
,[
'文章'
=>
$article,
'有关的'
=>
切换
::
积极的
(
相关文章
)
?
相关文章
::
为了
(文章)
:
收集
(),]);}}
Toggle::inactive()
这对于保护仅在某个功能关闭时才应运行的行为非常有用,例如,当更丰富的简讯管道被禁用时,回退到普通的电子邮件摘要:
如果
(
切换
::
不活跃
(
'newsletter-v2'
)){
邮件
::
到
(订阅用户)
->
队列
(
新的
每周摘要
(文章)}
Blade 模板拥有专用指令,因此您无需手动包装条件语句。一个典型的例子是,仅在启用评论功能时才在文章下方渲染评论线程:
@切换
(
'评论'
)<
livewire:article.comments
:文章
=
“$article”
/>@elsetoggle<
页
班级
=
"text-sm text-gray-500"
此帖已关闭评论。
页
>@endtoggle
如果您偏好类型安全的标识符,可以在任何接受标志名称的地方使用枚举。将标志名称集中到一个
Feature
枚举类型使其具有自动补全功能,并且在需要弃用某个枚举值时也易于通过 grep 命令查找:
枚举
特征
:
细绳{
案件
评论
=
'评论'
;
案件
相关文章
=
相关文章
;
案件
付费墙
=
“付费墙”
;}如果
(
切换
::
积极的
(
特征
::
付费墙
)
&&
$文章
->
isPremium
()){
返回
看法
(
'articles.paywall'
,
袖珍的
(
'文章'
));}
驱动程序
Laravel Toggle 自带两个存储驱动程序,可通过以下方式选择:
TOGGLE_DRIVER
:
切换驱动程序
=
配置
# 只读,使用 config/toggle.php 中的标志切换驱动程序
=
数据库
# 读写,回退到配置
配置驱动程序在运行时是只读的,因为它的值来源于环境变量。数据库驱动程序会先检查数据库,如果数据库中不存在相应的记录,则回退到配置值,因此配置默认值会一直生效,直到您手动覆盖它们为止。
您也可以在同一个应用程序中混合使用这两种驱动程序,方法是分别列出数据库驱动的标志:
“旗帜”
=>
[
'评论'
=>
环境
(
'切换评论'
,
真的
),
相关文章
=>
环境
(
'切换相关文章'
,
错误的
),],'数据库标志'
=>
[
'breaking-news-banner'
,
'newsletter-signup-modal'
,],
旗帜
database_flags
始终使用数据库驱动程序(带配置回退),标志
flags
保持只读状态,任何未列出的标志都会回退到全局驱动程序。这使得稳定的标志能够保留在……
.env
无需部署即可更改操作标志。
运行时控制和缓存
当数据库驱动程序处于活动状态时,您可以在运行时启用或禁用标志。发布突发新闻的编辑可能无需进行任何操作即可从管理屏幕打开横幅。
.env
或发布部署:
切换
::
使能够
(
'breaking-news-banner'
(英文):// 之后,当这则新闻不再是头版头条时切换
::
禁用
(
'breaking-news-banner'
(英文):// 或者完全移除覆盖并回退到默认配置。切换
::
删除
(
'breaking-news-banner'
(英文):切换
::
全部
();
// ['breaking-news-banner' => true, 'newsletter-signup-modal' => false, ...]
查找结果会被缓存,您可以通过环境变量调整缓存存储时间和 TTL:
启用缓存
=
真的切换缓存存储
=
redis切换缓存期限
=
3600
捆绑式
Toggle
Eloquent 模型会在记录保存或删除时自动清除缓存,您也可以手动清除缓存。
Toggle::forgetCache('name')
或者
Toggle::flushCache()
。
对于未定义的标志,该包的行为是可配置的:返回
false
, 返回
true
或者扔一个
ToggleNotFoundException
因此,在开发过程中,缺少标志会导致明显的错误。
切换默认值
=
错误的切换默认值
=
真的切换默认值
=
例外
惯性和工匠
如果你的前端使用 Inertia,则包含
ShareTogglesWithInertia
中间件将每个切换开关都公开为一个
flags
prop。这允许你的 Vue、React 或 Svelte 组件根据条件渲染功能,而无需额外的 API 调用:
使用
卸载项目\切换\中间件\使用惯性共享切换
;->
withMiddleware
(
功能
(
中间件
$中间件) {$中间件
->
网络
(
附加
:[
分享切换惯性
::班级
,]);})
常量
{
旗帜
}
=
使用页面
().props如果
(flags.breakingNewsBanner){
显示横幅
()}
该软件包还提供了一些用于日常工作的 Artisan 命令,包括
toggle:list
检查每个已定义的标志及其当前状态,
toggle:create
搭建新旗帜的脚手架
config/toggle.php
和
.env
(可选)
--active
和
--db
旗帜),以及
toggle:cache-clear
清除所有切换缓存或单个条目。
您可以访问[此处插入链接]了解更多信息并查看源代码。 GitHub 。






