【问题标题】:Best practice for adding custom logic in Lumen/Laravel controller在 Lumen/Laravel 控制器中添加自定义逻辑的最佳实践
【发布时间】: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');
    }
}

这是一种好方法还是可以被视为反模式?如果此类问题有其他模式,请告诉我。

【问题讨论】:

    标签: php laravel rest lumen


    【解决方案1】:

    我更愿意将自定义活动作为 url 的一部分。所以,你会有这样的东西

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

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

    【讨论】:

    • 问题是可能有很多自定义活动。我想问题是,最好是有多条路线,每条路线处理一个活动,还是一条路线来处理许多活动?使用单一路线,我不需要为每个新活动不断更新 route.php 文件。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多