【问题标题】:ZF2 debugging custom view helperZF2调试自定义视图助手
【发布时间】:2013-02-26 22:30:11
【问题描述】:

我使用的是 Zend Framework 2 自定义视图助手:

$uri = $this->view->vars()->mainMenu->findById('h');

mainMenu 属性是一个 Zend\Navigation\Navigation 对象。

结果是我的视图脚本的渲染在执行视图助手时停止,没有任何错误消息。因此,出于所有实际目的:死亡的白屏。

在此视图中帮助行:

$uri = $this->view->vars()->mainMenu;

确实有效,所以显然问题出在 findById() 方法上。

但如果我直接在我的视图脚本中使用第一行,我会得到预期的结果,一个包含我主页 url 的字符串:'/'。

我的问题是:

我的视图助手中的 findById() 方法有什么问题?

和/或(更重要的是):

如何在视图助手环境中调试这个(以及其他,这是一个反复出现的问题)问题?

【问题讨论】:

    标签: debugging zend-framework2 view-helpers


    【解决方案1】:

    问题是findById() 不存在。检查Zend\Navigation\Navigation 扩展的Zend\Navigation\AbstractActionContainer

    正确的方法(我猜)是findBy()findAllBy()findOneBy()

    $this->view->vars()->mainMenu->findOneBy('id', 'my-id-to-find');
    

    【讨论】:

    • 这些方法也不起作用,findById被__call捕获并重定向到findOneBy。无论如何,findById 在我的视图脚本中工作。
    • 你说得对,不过建议不要让__call() 处理事情。 Zend\Debug\Debug::dump(vars()->mainMenu) 它可能是一个导航对象,但它是您所期望的吗?
    • 是的,它是一个导航对象,其中包含我正在寻找的页面(并且我的视图脚本中的相同代码确实找到了该页面)。我可以转储 nav 对象,但是一旦我尝试 findOneBy 方法,就根本没有错误输出。
    • 谢谢,你指出了我正确的方向:问题是我在转储导航对象后确实“退出”了。第一次,在我的布局脚本中使用助手,它执行得很好。只有第二次,在我的视图脚本中,它找不到对象。但由于退出,我没有做到这一点。顺便说一句,我用 FindOneBy() 替换了 FindById()。
    【解决方案2】:

    通过首先解决我的问题的第二部分,通过安装 XDEBUG(在 Zend Server CE 上)找到了问题,最终给出了一些错误输出(在非对象上调用方法)。

    在我专注于布局视图脚本的地方,相同的视图助手也存在于我的(最终)视图脚本中,其中导航对象在我使用的引用下不可用。

    在视图和布局脚本中起作用的是:

    $uri = $this->view->layout()->getVariables()->mainNav->findById('h');
    

    我在这里找到了我的解决方案:

    http://akrabat.com/zend-framework-2/access-view-variables-in-another-view-model/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多