从控制器symfony2内部跳到另一个控制器
我使用的是symfony2.8。 我想从另一个控制器跳到控制器。这怎么可能 下面是我的源代码 DefaultController.php从控制器symfony2内部跳到另一个控制器,symfony,Symfony,我使用的是symfony2.8。 我想从另一个控制器跳到控制器。这怎么可能 下面是我的源代码 DefaultController.php class DefaultController extends Controller public function myFirstAction(){ // do something if ($a = 1){ $this->mySecondAction() // error } else {
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()显示如下错误
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
所有Symfony操作都传递给一个请求实例。您应该能够通过向两个操作函数添加相应的参数并在调用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());
}
所有Symfony操作都传递给一个请求实例。您应该能够通过向两个操作函数添加相应的参数并在调用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());
}
如果您想跳转到另一个控制器,您可以将其定义为服务,但是如果您在同一控制器中具有功能,则可以使用@AmericanUmlaut-answer 将控制器定义为服务,获取函数“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());
}
如果您想跳转到另一个控制器,您可以将其定义为服务,但是如果您在同一控制器中具有功能,则可以使用@AmericanUmlaut-answer 将控制器定义为服务,获取函数“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());
}
在我的情况下,@AmericanUmlaut way就足够了,但是你的答案适合进一步学习或有人需要,非常感谢。在我的情况下,@AmericanUmlaut way就足够了,但是你的答案适合进一步学习或有人需要,非常感谢。