laravel - 在Laravel应用程序中,启用/禁用功能

我在构建一个Laravel应用程序,它有许多不同的功能,希望能够根据特定要求启用或禁用它们,目前,配置中有一系列标志,例如:


'is_feature_1_enabled' => true,


'is_feature_2_enabled' => false,



然后在控制器和视图中,我检查这些配置值,看看是否应该显示某些内容,允许某些操作,等等,应用程序开始受到这种检查的污染,

在Laravel应用程序中,有没有一种管理特性的最佳实践方法?

时间:

我建议你基于命名路由而不是config值来控制东西。

  • 将所有路由分组为整体或按功能分组
  • 为所有路由定义名称
  • 通过路由名称和数据库中的记录控制启用/禁用活动
  • 使用Laravel中间件通过从请求对象获取当前路由名称并将它与数据库匹配来检查是否启用了特定功能

这里有一个示例代码,向你展示了如何检索所有路由,并且你可以匹配路由组名称以进一步处理以匹配你的情况。


Route::get('routes', function() {


$routeCollection = Route::getRoutes();



echo"<table >";


 echo"<tr>";


 echo"<td width='10%'><h4>HTTP Method</h4></td>";


 echo"<td width='10%'><h4>Route</h4></td>";


 echo"<td width='80%'><h4>Corresponding Action</h4></td>";


 echo"</tr>";


 foreach ($routeCollection as $value) {


 echo"<tr>";


 echo"<td>" . $value->getMethods()[0] ."</td>";


 echo"<td>" . $value->getPath() ."</td>";


 echo"<td>" . $value->getName() ."</td>";


 echo"</tr>";


 }


echo"</table>";


});



这里有一个示例中间件处理程序,通过与数据库中已有的特性匹配,可以检查某个特性是否处于活动状态。


public function handle($request, Closure $next)


 {


 if(Helper::isDisabled($request->route()->getName())){


 abort(403,'This feature is disabled.');


 }


 return $next($request);


 }



这在技术上称为功能标志,你可以使用google Laravel软件包,满足你的要求,或使用高级服务。

...