2017-07-11 1 views
0

DI用にスリムブリッジを使用しています。スリム3 - 引数を渡さずにメソッドを呼び出す方法

私は、ACControllerから、BControllerで関数secondを呼び出すとします。

namespace App\Controllers; 

use Psr\Http\Message\RequestInterface as Request; 
use Psr\Http\Message\ResponseInterface as Response; 
use Noodlehaus\Config as Config; 

class BController extends Controllers { 

public function second(Request $request, Response $response, Config $config, $optional = []){ 
    // do stuff 
} 

は、どのように私は(この場合は、オプションの$)と、要求や応答などのない他のすべての依存関係を送信するだけでパラメータを渡す第2の機能を呼び出すことができます。私はルートlogic.'first」関数を追跡しようとした

class AController extends Controllers{ 
    public function second(Request $request, Response $response, BController $bController){ 
     $bController->second(['custom parameter']); 

     // or 

     $this->container->get('App/Controllers/BCOntroller')->second(); 

     // i do not want this 

     $bController->second($request, $response, $cache, etc etc); 
    } 
} 

がパラメータ

$app->get('/', ['\App\Controllers\AController', 'first']); 
+1

2番目のコントローラから必要な機能は何ですか?明らかに第二の機能は – Rob

+0

ですか?明らかに –

+0

。それに幸運。 – Rob

答えて

0

を送信せずに実行されますあなたの質問は、間接的にそうでない場合、なぜあなたがしたいApp/Controllers/BController::second()は、アプリケーション・ロジック(の一部が含まれていることを意味しますリクエスト/レスポンスのペアを渡さずにそれを起動しますか?)。この場合、単一責任の原則を破るという問題に直面しています。各コンポーネントは1つのことのみを行う必要があります。コントローラのタスクは、要求と応答を処理することです。だから、@Robは何をApp/Controllers/BController::second()があなたに質問したのです。

AController::second()メソッドが呼び出されたときに同じロジックが実行されるようにするためには、App\Controllers\BController::second()からアプリケーションロジックを抽出して、必要な場所で呼び出すのが最適です。

次に、必要なときにコントローラ内部からサービスを注入します。

あなたの質問への正確な回答として、いいえ、メソッドの署名には$request$response引数が必要なので、そのメソッドを呼び出すことはできません。

関連する問題