Zend framework2 如何在布局视图中检查无效路由

Zend framework2 如何在布局视图中检查无效路由,zend-framework2,zend-view,zend-layout,Zend Framework2,Zend View,Zend Layout,我在Application/view/layout/layout.phtml中编写了这段代码,用于添加指向当前页面的链接。我添加此项是为了调试以刷新当前页面 <li class="active"><a href="<?php echo $this->url() ?>"><?php echo $this->translate('Refresh') ?></a></li> 只要我没有无效的路由(404错误),这

我在Application/view/layout/layout.phtml中编写了这段代码,用于添加指向当前页面的链接。我添加此项是为了调试以刷新当前页面

<li class="active"><a href="<?php echo $this->url() ?>"><?php echo $this->translate('Refresh') ?></a></li>
  • 只要我没有无效的路由(404错误),这就可以正常工作。我犯了致命的错误

    致命错误:未捕获异常“Zend\View\exception\RuntimeException” 带有消息“未提供路由匹配实例”

    在尝试呈现url之前,我不想通过添加一个条件来检查它是否是404错误或无效路由来处理这个问题。我不知道怎么做。我试着查看Zend\View\View类和ViewModel类的源代码,看看是否有方法可以获取错误代码,或者可以告诉它是404错误

    编辑:

    作为最后的手段,我添加了如下的try-catch块,它工作正常,但想检查是否有任何优雅的方法

    <?php
       try{
           $url = $this->url();
    ?>       
      <li class="active"><a href="<?php echo $url ?>"><?php echo $this->translate('Refresh  ') ?></a></li>
      <?php
         } catch (Exception $ex) { 
       }
    ?>
    
    
    

  • 您收到的异常消息不是因为路由未定义,而是因为URL视图帮助程序的
    routeMatch
    参数
    Zend\view\helper\URL
    尚未设置

    通常,在使用URL帮助器时,您可以提供路由的名称作为第一个参数。助手将在内部使用路由器和路由匹配,根据路由配置生成正确的URL字符串

    比如说

    echo $this->url('test'); // will create the route matching the test route name
    
    帮助程序还允许您不提供路由名称,
    $this->url()
    ,在这种情况下,在创建这些路由时,默认情况下它将使用最后匹配的路由。然而,有一种特殊情况是,你不能依赖它;当应用程序无法匹配路由时,将没有可用的
    RouteMatch

    因此,当应用程序尝试加载404错误模板(由
    layout.phtml
    包装)时,在
    layout.phtml
    中使用此快捷方便的方法,URL视图帮助程序将没有可用的
    RouteMatch
    并抛出您收到的错误

    要解决此问题,在布局或错误脚本中调用URL视图帮助程序时,应始终提供路由名称