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

时间:2015-10-23 09:04:32

标签: 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错误),这工作正常。我得到了致命错误

  

致命错误:未捕获的异常'Zend \ View \ Exception \ RuntimeException'   消息'未提供RouteMatch实例'

我不想通过在尝试呈现网址之前添加条件来检查它是否是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) { 
   }
?>

1 个答案:

答案 0 :(得分:0)

您获得的异常消息不是因为 route 未定义,而是URL视图助手的{em> routeMatch 参数{{1} ,尚未设定。

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

例如

Zend\View\Helper\Url

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

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

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