我遇到forward
了 Symfony (v2.3) 方法的问题。
基本上,我在两个不同的捆绑包中有两个控制器。假设DesktopBundle
应用程序的桌面版本和MobileBundle
移动版本。
我想将一个动作的代码重用DesktopBundle
到一个动作中MobileBundle
。我现在做的是前锋:
桌面控制器
namespace Acme\DesktopBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Route("/")
*/
class IndexController extends Controller
{
/**
* @Route("", name="desktopIndex")
* @Template()
*/
public function indexAction()
{
/* some code I don't want to duplicate */
return array(
'some' => 'var'
);
}
}
移动控制器
namespace Acme\MobileBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Route("/")
*/
class IndexController extends Controller
{
/**
* @Route("", name="mobileIndex")
* @Template()
*/
public function indexAction()
{
return $this->forward('AcmeDesktopBundle:Index:index');
}
}
现在它可以工作了,但显然该Response
对象是与桌面版本的渲染模板一起返回的indexAction
。
我想要的是获取变量,然后渲染移动版本的模板。
我尝试将一个变量传递给 forward 方法,然后有条件地将操作呈现到桌面版本中:
return $this->forward(
'acmeDesktopBundle:Index:index',
array('mobile' => true)
);
这会起作用,但我真的不想更改为内部的代码,DesktopBundle
而只是MobileBundle
. 有没有办法做到这一点?我遗漏了一些东西,还是应该采用完全不同的解决方案?