我使用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');
}
}
这是一种好方法还是被认为是一种反模式?如果此类问题还有另一种模式,请告诉我。
答案 0 :(得分:0)
我希望将自定义活动作为网址的一部分。所以,你会有这样的东西
$router->group([
'namespace' => 'App\Http\Controllers\Custom',
'prefix' => 'v1/customCampaigns'
], function () use ($router) {
$router->post('myCustomActivity', 'MyCustomActivityController@methodName');
});
使用此格式,您可以将端点直接映射到特定控制器。