0

我在 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 实例”

我不想通过在尝试呈现 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) { 
   }
?>
4

1 回答 1

1

您收到的异常消息不是因为路由未定义,而是routeMatchURL 视图帮助程序的参数 ,Zend\View\Helper\Url尚未设置。

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

例如

echo $this->url('test'); // will create the route matching the test route name

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

因此,layout.phtml当应用程序尝试加载 404 错误模板layout.phtmlRouteMatch

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

于 2015-10-23T12:19:37.273 回答