从navigation.xml触发的多个操作

时间:2012-05-03 08:12:38

标签: php zend-framework zend-navigation

导航xml有一个奇怪的问题,这是一个片段:

...
<registration>
      <label>Registration</label>
      <module>mine</module>
      <controller>registration</controller>
      <pages>
          <register>
             <label>Register</label>
             <module>mine</module>
             <controller>registration</controller>
             <action>doregistration</action>
           </register>
      </pages>
</registration>
...

每次调用/ mine / registration / index操作时,/ mine / registration / doregistration操作都会被触发(调试时可能需要一两秒)

/ mine / registration / index确实正确显示。

整个应用程序中都会出现此问题。 当我们更改第二个(或子)页面的操作时,将执行此特定操作。

这是Zend中的已知问题吗?以前有人有过这个问题吗?

2 个答案:

答案 0 :(得分:0)

也许这个例子,来自同一个应用程序,同样的问题,使事情更清楚:

navigation.xml

...
<over>
    <label>Over ons</label>
    <module>default</module>
    <controller>over</controller>
    <action>index</action>
    <pages>
        <wat>
            <label>Wat?</label>
            <module>default</module>
            <controller>over</controller>
            <action>wat</action>
        </wat>
        <wie>
            <label>Wie?</label>
            <module>default</module>
            <controller>over</controller>
            <action>wie</action>
        </wie>
        <contact>
            <label>Contact</label>
            <module>default</module>
            <controller>over</controller>
            <action>contact</action>
        </contact>
        <faq>
            <label>Help</label>
            <module>default</module>
            <controller>over</controller>
            <action>faq</action>
        </faq>
    </pages>
</over>
...

相应的OverController如下所示:

class Default_OverController extends Custom_Controller_Action_EhcAction
{

public function indexAction()
{
    return $this->render('index');
}

public function contactAction()
{
    return $this->render('contact');
}

public function wieAction()
{
    return $this->render('wie');
}

public function watAction()
{
    return $this->render('wat');
}

public function faqAction()
{
    return $this->render('faq');
}
}

正如您所见,我们的控制器扩展了Custom_Controller_Action_EhcAction。 这是一个自定义类,它扩展了Zend_Controller_Action并添加了一些额外的功能(日志记录,登录用户的身份,......)。这个自定义类不能成为我们问题的原因,如果我们不使用is仍会出现。

在此示例中,如果我们转到default/over/wat操作,应用程序也将调用以下节点default/over/wie。如果我们在XML中切换位置,则会发现第二个调用始终是以下或第一个基础节点。

我们不认为他们是一个JavaScript调用,因为如果我们检查我们与Charles的流量,那么只有一个调用被调度。

此示例的视图脚本仅包含简单的HTML,无论是PHP还是JS ......

希望这会使我们的问题更加明确......

答案 1 :(得分:0)

啊哈! 我们找到了问题的原因:链接导航助手 http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.navigation.links

我们仍然没有真正的解决方案,但这些头部链接并不重要。我们不再使用它了。