【问题标题】:How to render a page in zend framework 2?如何在 zend 框架 2 中呈现页面?
【发布时间】:2012-05-03 07:29:12
【问题描述】:

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

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

【问题讨论】:

    标签: php zend-framework zend-framework2 zend-framework-mvc


    【解决方案1】:

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

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

    有关如何使用视图模型的示例,请参阅 Akrabat 的 ZF2TestApp:http://zf2test.akrabat.com/

    相关的ZF2代码链接在该页面底部,模板映射配置在module configuration file

    【讨论】:

      【解决方案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 会提供更好的解释

      【讨论】:

        【解决方案3】:

        您可能想查看skeleton application,了解如何在 MVC 环境中渲染内容。

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

        另一方面,您不会在视图中回显渲染器的结果 - 渲染器返回视图的结果,然后由您的应用程序回显(您不会这样做你自己)。

        【讨论】:

        • 你能帮上忙吗?我不太明白。
        • 你的问题应该更具体一点,然后阅读文档并运行并尝试骨架应用程序。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 2016-08-31
        相关资源
        最近更新 更多