在Lumen / Laravel控制器中添加自定义逻辑的最佳实践

时间:2017-11-29 07:49:35

标签: php laravel rest lumen

我使用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 个答案:

答案 0 :(得分:0)

我希望将自定义活动作为网址的一部分。所以,你会有这样的东西

$router->group([
  'namespace' => 'App\Http\Controllers\Custom',
  'prefix' => 'v1/customCampaigns'
], function () use ($router) {
  $router->post('myCustomActivity', 'MyCustomActivityController@methodName');
});

使用此格式,您可以将端点直接映射到特定控制器。