Zend framework ZF3:设置没有布局的终端/渲染视图(Zend Expressive)

Zend framework ZF3:设置没有布局的终端/渲染视图(Zend Expressive),zend-framework,mezzio,zf3,Zend Framework,Mezzio,Zf3,我已经从ZF3“zend expressive”安装了skelleton应用程序。在路由配置中,我配置了一些路由。其中一些路由应返回不带布局的响应。在ZF2中,我只是使用了ViewModel,您可以在其上调用“setTerminal”。但是现在ViewModel在操作中不直接可用,因为它嵌套为ZendViewWrinder的私有属性。我不知道如何设置终端,因此输出是在没有布局的情况下呈现的 我在路由配置中尝试了各种选项,例如添加值为true的键“terminal”、“terminate”和“ma

我已经从ZF3“zend expressive”安装了skelleton应用程序。在路由配置中,我配置了一些路由。其中一些路由应返回不带布局的响应。在ZF2中,我只是使用了ViewModel,您可以在其上调用“setTerminal”。但是现在ViewModel在操作中不直接可用,因为它嵌套为ZendViewWrinder的私有属性。我不知道如何设置终端,因此输出是在没有布局的情况下呈现的

我在路由配置中尝试了各种选项,例如添加值为true的键“terminal”、“terminate”和“may_terminate”。我也曾尝试创建一个单独的工厂,但最终遇到了同样的问题,即我无法访问ViewModel。。在操作中创建单独的ViewModel也不起作用,当我将terminal设置为true,并将对象作为ZendViewRender对象的“render”方法中的第二个参数传递时,它在传递同一对象的“RenderModel”时失败:“无法渲染;遇到了标记为terminal的子对象”

一定有一个我忽略的简单配置,所以我的问题是。有人知道如何在终端上设置视图吗


希望我能很好地解释我的问题。非常感谢。我的解决方案

对!!我找到了一个“解决方案”。我实现了一个名为“layout/terminal”的新布局,而不是推进ViewModal的terminal设置。此布局仅输出变量$content。参考:

要使用此布局,应在配置中添加新工厂

<?php
namespace Factory;

use Interop\Container\ContainerInterface;
use Zend\Expressive\Template\TemplateRendererInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
use Zend\View\Model\ViewModel;

class RenderWithoutTemplate implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        $template = $container->has(TemplateRendererInterface::class)
            ? $container->get(TemplateRendererInterface::class)
            : null;

        $r = new \ReflectionClass($template);
        $view = new ViewModel();
        $view->setTerminal(true); // Does not affect any render behaviour (?)
        $view->setTemplate('layout/terminal');

        $prop = $r->getProperty('layout');
        $prop->setAccessible(true);
        $prop->setValue($template, $view);

        return $template;
    }
}

也许,作为一项内务管理任务,把这个解决方案变成一个答案,然后接受你自己的答案。完成@DavidWeinraub!
public function indexAction(){

  return $this->getResponse();
}