我使用下面的代码在控制器操作中呈现页面。
public function userinforeceiveAction()
{
$renderer = new PhpRenderer();
$map = new Resolver\TemplateMapResolver(array(
'userinfo' => __DIR__ . '/userinfo.phtml',
));
$resolver = new Resolver\TemplateMapResolver($map);
$renderer->setResolver($resolver);
$model = new ViewModel();
$model->setTemplate('userinfo');
return new ViewModel();
}
我在视图中回显渲染内容。
echo $renderer->render($model);
但它什么都没有。请帮我。谢谢。 而且这两行也很好地与zf1合作。
$this->userinfoAction();
$this->$render('userinfo');
答案 0 :(得分:9)
如果您使用的是ZF2 MVC图层,则无需实例化自己的视图渲染,只需返回一个ViewModel实例,它将处理其余部分:
public function userinforeceiveAction()
{
$vm = new ViewModel();
$vm->setTemplate('userinfo');
return $vm;
}
有关如何使用视图模型的示例,请参阅Akrabat的ZF2TestApp:http://zf2test.akrabat.com/
关联的ZF2代码链接在该页面的底部,模板地图在module configuration file
中配置答案 1 :(得分:2)
实际上你所做的事情应该与下面的矿工更改一起使用
public function userinforeceiveAction()
{
$renderer = new PhpRenderer();
$map = new Resolver\TemplateMapResolver(array(
// first mistake
// __DIR__ is the directory of application controller, not the path of views
// second mistake
// 'userinfo' should be '(controller)/(action)'
'userinfo' => __DIR__ . '/userinfo.phtml',
));
// third mistake
// since $map is a resolver instance, this is wrong
$resolver = new Resolver\TemplateMapResolver($map); // no need
$renderer->setResolver($resolver);
// should be $renderer->setResolver($map);
$model = new ViewModel();
// 'userinfo' should be changed
$model->setTemplate('userinfo');
// big mistake
// what you are returning here is new instance of view model
return new ViewModel();
// instead you should return $model
}
视图中不需要这一行
echo $renderer->render($model);
但最好和推荐的方法是通过模块配置文件注入, 正如Adam所说
documentation将提供更好的解释
答案 2 :(得分:1)
您可能希望了解如何在MVC环境中呈现内容的skeleton application。
主要是你正确地做到了。但是为什么不使用它而创建渲染器和解析器?我想设置渲染策略和模板?在控制器中没有什么可做的,但在应用程序的/模块配置中。
另一方面,您不会在视图中回显渲染器的结果 - 渲染器返回视图的结果,然后由应用程序回显(您不要通过你自己)。