2017-11-29 7 views
0

私はLumen(Laravel)を使用して、さまざまなイベントのオンサイト登録やギフトの償還などを処理するオンラインアクティビティ/キャンペーンアプリケーションのAPIを作成しています。場合によっては、独自のカスタムロジックが必要な非常に特殊な機能が必要な特定のイベントがあります。私はアーキテクチャ/ベストプラクティスの観点から、このカスタムコードをどのように最善の方法で処理するのだろうかと思っています。Lumen/Laravelコントローラでカスタムロジックを追加するためのベストプラクティス

は、ここで私が持っているものだ:私はすべてのカスタム活動のためのクラスを格納するディレクトリを開いたのApp \のHttp \コントローラの下で

$router->group([ 
    'prefix' => 'v1' 
], function() use ($router) { 
    // ..... other routes for standard activities 
    $router->post('customCampaigns', '[email protected]'); 
}); 

:私はそうのようなCustomCampaignControllerを呼び出してルートを持っています。 customCampaignsルートには、アクティビティクラスの1つに値が一致するactivityIdパラメータが使用されます。たとえば、クライアントがcustomCampaignsにactivityId = "MyCustomActivity"を投稿した場合、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

カスタムアクティビティをURLの一部として入れることをお勧めします。したがって、このようなことがあります

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

この形式を使用すると、エンドポイントを特定のコントローラに直接マッピングできます。

+0

多くのカスタムアクティビティがある可能性があります。私は、1つのアクティビティを処理するたびに多くのルートを持つ方がよいか、多くのアクティビティを処理する単一のルートを持つ方が良いのかという疑問はありますか?単一のルートでは、新しいアクティビティごとにroute.phpファイルを更新し続ける必要はありません。 – orikon

関連する問題