在 Lumen/Laravel 控制器中添加自定义逻辑的最佳实践
Posted
技术标签:
【中文标题】在 Lumen/Laravel 控制器中添加自定义逻辑的最佳实践【英文标题】:Best practice for adding custom logic in Lumen/Laravel controller 【发布时间】:2018-05-12 20:29:54 【问题描述】:我正在使用 Lumen (Laravel) 为在线活动/活动应用程序创建一个 API,该应用程序处理各种活动的现场注册和礼品兑换等事情。有时,某些具有非常特定功能的事件需要它们自己的自定义逻辑。我想知道如何从架构/最佳实践的角度最好地处理此自定义代码。
这就是我所拥有的:我有一条像这样调用 CustomCampaignController 的路由:
$router->group([
'prefix' => 'v1'
], function () use ($router)
// ..... other routes for standard activities
$router->post('customCampaigns', 'CustomCampaignController@runController');
);
在 App\Http\Controllers 下,我打开了一个目录来存储所有自定义活动的类。 customCampaigns 路由采用 activityId 参数,其值与活动类之一匹配。例如,如果客户端将 activityId="MyCustomActivity" 发布到 customCampaigns,我将实例化以下类:App\Http\Controllers\Custom\MyExampleActivity。
// app/Http/Controllers/CampaignController.php
public function runController(Request $request)
$className = 'App\\Http\\Controllers\\Custom\\' . $request->input('activityId');
$customController = new $className;
return $customController->run();
然后自定义控制器会做它的事情并返回响应
// app/Http/Controllers/Custom/MyCustomActivity.php
namespace App\Http\Controllers\Custom;
class MyCustomActivity
public function __construct()
//
public function run()
// Custom logic here
return response('Response');
这是一种好方法还是可以被视为反模式?如果此类问题有其他模式,请告诉我。
【问题讨论】:
【参考方案1】:我更愿意将自定义活动作为 url 的一部分。所以,你会有这样的东西
$router->group([
'namespace' => 'App\Http\Controllers\Custom',
'prefix' => 'v1/customCampaigns'
], function () use ($router)
$router->post('myCustomActivity', 'MyCustomActivityController@methodName');
);
使用这种格式,您可以将端点直接映射到特定的控制器中。
【讨论】:
问题是可能有很多自定义活动。我想问题是,最好是有多条路线,每条路线处理一个活动,还是一条路线来处理许多活动?使用单一路线,我不需要为每个新活动不断更新 route.php 文件。以上是关于在 Lumen/Laravel 控制器中添加自定义逻辑的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
关于Lumen / Laravel .env 文件中的环境变量是如何生效的