Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转发另一个模板_Php_Templates_Symfony - Fatal编程技术网

Php 转发另一个模板

Php 转发另一个模板,php,templates,symfony,Php,Templates,Symfony,我在Symfony(v2.3)的forward方法中遇到了一个问题 基本上,我在两个不同的包中有两个控制器。比如说,对于桌面版本的应用程序,使用DesktopBundle;对于移动版本,使用MobileBundle 我想将DesktopBundle操作的代码重用为MobileBundle操作。我现在做的是一个前锋: 桌面控制器 namespace Acme\DesktopBundle\Controller; 使用Sensio\Bundle\FrameworkExtraBundle\Configu

我在Symfony(v2.3)的
forward
方法中遇到了一个问题

基本上,我在两个不同的包中有两个控制器。比如说,对于桌面版本的应用程序,使用
DesktopBundle
;对于移动版本,使用
MobileBundle

我想将
DesktopBundle
操作的代码重用为
MobileBundle
操作。我现在做的是一个前锋:

桌面控制器

namespace Acme\DesktopBundle\Controller;
使用Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
使用Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
*@Route(“/”)
*/
类IndexController扩展控制器
{
/**
*@Route(“,name=“desktopIndex”)
*@Template()
*/
公共函数索引()
{
/*有些代码我不想重复*/
返回数组(
'some'=>'var'
);
}
}
MobileController

namespace Acme\MobileBundle\Controller;
使用Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
使用Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
*@Route(“/”)
*/
类IndexController扩展控制器
{
/**
*@Route(“,name=“mobileIndex”)
*@Template()
*/
公共函数索引()
{
返回$this->forward('AcmeDesktopBundle:Index:Index');
}
}
现在它可以工作了,但是很明显,
响应
对象与桌面版的
索引
的呈现模板一起返回

我想要的是,获取变量,然后呈现移动版本的模板

我尝试将一个变量传递到forward方法,然后有条件地将操作呈现到桌面版本:

返回$this->转发(
“acmeDesktopBundle:Index:Index”,
数组('mobile'=>true)
);

这是可行的,但我不想在
DesktopBundle
中更改代码,只想在
MobileBundle
中更改代码。有没有办法做到这一点?我遗漏了什么,还是应该采用完全不同的解决方案

转发意味着重定向到给定页面,但不更改客户端上的url。即在服务器端重定向。如果只想访问操作的返回值,只需调用它。有了
@模板
注释,这变得非常简单

namespace Acme\MobileBundle\Controller;

use Acme\DesktopBundle\Controller\IndexController as DesktopController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

/**
 * @Route("/")
 */
class IndexController extends Controller
{
    /**
     * @Route("", name="mobileIndex")
     * @Template()
     */
    public function indexAction()
    {
        $desktop = new DesktopController();
        $desktop->setContainer($this->container);

        $values = $desktop->indexAction();
        // do something with it

        return $values;
    }
}

是的,我尝试了这个,但我抛出了一个错误:
FatalErrorException:error:调用/var/www/vendor/symfony/symfony/src/symfony/Bundle/FrameworkBundle/Controller/Controller.php第251行中非对象的成员函数get()