Zend framework2 如何检查ZF2视图模板是否存在?

Zend framework2 如何检查ZF2视图模板是否存在?,zend-framework2,Zend Framework2,我知道如何为ViewModel设置特定模板。但是,在ViewModel中设置模板之前,如何检查当前模板路径堆栈中是否存在其他模板?其思想是,我可以重用单个操作来基于查询参数呈现视图。我想先检查一下,如果视图不存在,那么我可以将响应状态代码设置为404,而不是一般的服务器错误消息。您可以执行以下操作,假设您想从控制器执行此操作 $template = 'non/existant/template'; $resolver = $this->getEvent()

我知道如何为ViewModel设置特定模板。但是,在ViewModel中设置模板之前,如何检查当前模板路径堆栈中是否存在其他模板?其思想是,我可以重用单个操作来基于查询参数呈现视图。我想先检查一下,如果视图不存在,那么我可以将响应状态代码设置为404,而不是一般的服务器错误消息。

您可以执行以下操作,假设您想从控制器执行此操作

    $template = 'non/existant/template';
    $resolver = $this->getEvent()
        ->getApplication()
        ->getServiceManager()
        ->get('Zend\View\Resolver\TemplatePathStack');

    if (false === $resolver->resolve($template)) {

        // does not exist
    }

如果要检查某个视图是否存在于另一个视图中(可能正在加载部分视图),可以使用

<?php if ($this->resolver('layouts/default')) : ?>
    <?php $this->render('layouts/default'); ?>
<?php endif; ?>


如果您使用的是ZF2Twig,则应为:

$template = "non/existant/twig-template";
/** @var \ZfcTwig\View\TwigResolver $resolver */
$resolver = $this->getServiceLocator()->get('ZfcTwig\View\TwigResolver');
if (false === $resolver->resolve($template)) {
    // Twig template does not exist
}

杰出的这就是我要找的。谢谢