Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zend_Controller_Router_Exception: "xyz" is not specified

I have a problem in my current Zend Framework application.

In my Bootstrap I register these routes:

protected function _initRouter()
{
    $this->bootstrap("FrontController");
    $frontController = $this->getResource("FrontController");

    $route = new Zend_Controller_Router_Route(
        ":module/:id",
        array(
            "controller" => "index",
            "action" => "index"
            ),
        array("id" => "\d+")
        );
    $frontController->getRouter()->addRoute('shortcutOne', $route);

    $route = new Zend_Controller_Router_Route(
        ":module/:controller/:id",
        array("action" => "index"),
        array("id" => "\d+")
        );
    $frontController->getRouter()->addRoute('shortcutTwo', $route);

    $route = new Zend_Controller_Router_Route(
        ":module/:controller/:action/:id",
        null,
        array("id" => "\d+", "action" => "\w+")
        );
    $frontController->getRouter()->addRoute('shortcutThree', $route);
}

Now later I added Zend_Navigation to my project. I have several modules, that register navigation elements in the module bootstrap:

<?php

class Contact_Bootstrap extends Zend_Application_Module_Bootstrap
{
    protected function _initNavigation()
    {
        $layout = $this->getApplication()->getResource("layout");
        $view = $layout->getView();

        $config = new Zend_Config_Xml(dirname(__FILE__)."/config/navigation.xml", "nav");

        $view->navigation()->addPage($config);
    }
}

When I open the app in my browser everything works fine. That means I can see the navigation and click on its links to view the specified page. But when I hit a page that uses the :module/:action/:id route, the Navigation Helper throws a Zend_Controller_Router_Route exception:

Fatal error: Zend_Controller_Router_Exception: id is not specified in C:\Entwicklung\kt\trunk\src\library\Zend\View\Helper\Navigation\HelperAbstract.php on line 519

Did anyone of you experience this error too? It would be great if you could help me or give me advise. Also if you need more information on my setup etc., just tell me.

Thank you!

like image 387
Sebastian Hoitz Avatar asked Dec 04 '22 14:12

Sebastian Hoitz


1 Answers

I found the solution myself.

This problem was caused due to a not-so-beneficial behavior of the Zend_Navigation elements. In their getHref() method they use the URL helper. This helper creates the URL the navigation entry has to link to, taking in the arguments specified for the navigation element (module, controller, action, etc.)

Now, the problem is that, if you have created a custom route in your bootstrap just as I did, for example

":module/:controller/:id"

You run into the problem that when this route is being used, the URL helper uses that route to generate the link for the navigation entry. However, I did not pass on an additional "id" parameter, so I got the exception.

So one solution is to pass an additional parameter for each Zend_Navigation_Page_Mvc instance "route" which is set to "default".

Another solution, which I didn't try yet, is to let the new custom route just re-map itself onto the default route, like:

":module/:controller/:action/id/$id"

But I don't know if you have the ability with Zend Framework to do that.

like image 184
Sebastian Hoitz Avatar answered Jan 10 '23 04:01

Sebastian Hoitz