2017-02-01 5 views
0

私はsymfony2.8を使用しています。 私は別のコントローラからコントローラにジャンプしたいと思います。どのように可能ですか?コントローラの中から別のコントローラにjumpt symfony2

これは

DefaultController.php

class DefaultController extends Controller 
    public function myFirstAction(){ 
    // do something 
    if ($a = 1){ 
     $this->mySecondAction() // error 
    } 
    else { 
     return $this->render('AcmeMemberBundle:Default:myFirst.html.twig',array()); 
    } 
} 

public function mySecondAction(){ 
    //do something 
     return $this->render('AcmeMemberBundle:Default:mySecond.html.twig',array()); 
} 

ます$ this-> mySecondAction以下の私のソースコード(ある)はsymfonyのすべてのアクションが要求インスタンスを渡され

Catchable Fatal Error: Argument 1 passed to Acme\MemberBundle\Controller\DefaultController::secondAction() must be an instance of Symfony\Component\HttpFoundation\Request, none given, called in 

答えて

2

のようなエラーが表示されます。このエラーを修正するには、対応するパラメータを両方のアクション関数に追加し、mySecondAction()への呼び出しで渡します。

また、アクションでレスポンスを返さなければならないことを忘れないでください。あなたのコード内のmySecondAction()の結果

use Symfony\Component\HttpFoundation\Request; 

class DefaultController extends Controller 
    public function myFirstAction(Request $request){ 
    // do something 
    if ($a = 1){ 
     return $this->mySecondAction($request) // Note the return I added here 
    } 
    else { 
     return $this->render('AcmeMemberBundle:Default:myFirst.html.twig',array()); 
    } 
} 

public function mySecondAction(Request $request){ 
    //do something 
     return $this->render('AcmeMemberBundle:Default:mySecond.html.twig',array()); 
} 
+0

ありがとうございました。それは単に私の問題を解決します。 – whitebear

1

あなたはに別のコントローラをjumptしたい場合は、あなたが同じコントローラに機能を持っているしかし、もしあなたが@AmericanUmlaut答えを使用することができ、サービスとしてそれを定義することができます。

例えば、以前に定義されたサービスとしてのコントローラを定義し、機能取得「mySecondActionを()」とサービスを使用して:

は、その後、あなたがサービスとしてそれを定義することができ、次のように: services.ymlファイルを

services: 
app.mySecondAction: 
    class: AppBundle\Controller\DefaultController 
    calls: 
     - [setContainer, ["@service_container"]] 

コントローラー:

public function myFirstAction() { 
    // do something  
    if ($a = 1) { 
     //using the service previously defined 
     $service = $this->get('app.mySecondAction'); 
     return $service->mySecondAction();   
    } else { 
     return $this->render('AcmeMemberBundle:Default:myFirst.html.twig', array()); 
    } 
} 

public function mySecondAction(){ 
    //do something 
    return $this->render('AcmeMemberBundle:Default:mySecond.html.twig',array()); 
} 
+0

私のケースでは@AmericanUmlautの方法で十分ですが、あなたの答えはさらなる研究には良いですか、誰かがこれを必要としています、ありがとうございます。 – whitebear

関連する問題