2017-02-01 201 views
0

我正在使用symfony2.8。 我想從另一個控制器跳到控制器。怎麼可能?從控制器內部跳到另一個控制器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()); 
} 

$這個 - > mySecondAction()顯示錯誤,如

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

所有Symfony的動作傳遞的Request實例。您應該可以通過將相應的參數添加到這兩個操作函數中並將它傳遞給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

相關問題