繁体   English   中英

如何在zend框架2中呈现页面?

[英]How to render a page in zend framework 2?

我使用下面的代码在控制器动作中呈现页面。

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');

如果您使用的是ZF2 MVC图层,则无需实例化自己的视图渲染,只需返回一个ViewModel实例,它将处理其余的事情:

public function userinforeceiveAction()
{
    $vm = new ViewModel();
    $vm->setTemplate('userinfo');
    return $vm;
}

有关如何使用视图模型的例子看Akrabat的ZF2TestApp: http://zf2test.akrabat.com/

关联的ZF2代码链接在该页面的底部,模板映射在模块配置文件中配置

实际上你所做的事情应该与下面的矿工改变一起工作

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所说

文档将提供更好的解释

您可能希望查看有关如何在MVC环境中呈现内容的框架应用程序

主要是你正确地做到了这一点。 但是为什么不使用它而创建渲染器和解析器? 我想设置渲染策略和模板? 在控制器中没有什么可做的,但在应用程序的/模块配置中。

另一方面,您不会在视图中回显渲染器的结果 - 渲染器返回视图的结果,然后由应用程序回显(您不自己执行此操作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM