ZF2 view helper URL ignores controller and action

module / applcation / config / module.config.php

'router' => array( 'routes' => array( 'home' => array( 'type' => 'Zend\Mvc\Router\Http\Literal', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ), ), 'application' => array( 'type' => 'Segment', 'options' => array( 'route' => '/application[/:action][/]', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', ), ), 'may_terminate' => true, ), ), ), 

In my IndexController.php I have indexAction () and validateAction () - (just experimenting that they don't have a function really)

I can perfectly approach viewing. But I write in a view:

 echo $this->url('application',array('action' => 'validate')); 

And it's just an echo

 /application/ 

How can I make him repeat the path with the action? I tried everything that I could think of, and I can not find reasonable documentation for this or anyone else with the same problem.

here is var_dump when loading the config page:

 array(5) { ["router"]=> array(1) { ["routes"]=> array(2) { ["home"]=> array(2) { ["type"]=> string(28) "Zend\Mvc\Router\Http\Literal" ["options"]=> array(2) { ["route"]=> string(1) "/" ["defaults"]=> array(2) { ["controller"]=> string(28) "Application\Controller\Index" ["action"]=> string(5) "index" } } } ["application"]=> array(2) { ["type"]=> string(7) "segment" ["options"]=> array(2) { ["route"]=> string(25) "/application[/:action][/]" ["defaults"]=> array(3) { ["__NAMESPACE__"]=> string(22) "Application\Controller" ["controller"]=> string(5) "Index" ["action"]=> string(5) "index" } } } } } ["service_manager"]=> array(1) { ["factories"]=> array(1) { ["translator"]=> string(45) "Zend\I18n\Translator\TranslatorServiceFactory" } } ["translator"]=> array(2) { ["locale"]=> string(5) "en_US" ["translation_file_patterns"]=> array(1) { [0]=> array(3) { ["type"]=> string(7) "gettext" ["base_dir"]=> string(57) "/home/marshall/html/module/Application/config/../language" ["pattern"]=> string(5) "%s.mo" } } } ["controllers"]=> array(1) { ["invokables"]=> array(1) { ["Application\Controller\Index"]=> string(38) "Application\Controller\IndexController" } } ["view_manager"]=> array(7) { ["display_not_found_reason"]=> bool(true) ["display_exceptions"]=> bool(true) ["doctype"]=> string(5) "HTML5" ["not_found_template"]=> string(9) "error/404" ["exception_template"]=> string(11) "error/index" ["template_map"]=> array(4) { ["layout/layout"]=> string(73) "/home/marshall/html/module/Application/config/../view/layout/layout.phtml" ["application/index/index"]=> string(83) "/home/marshall/html/module/Application/config/../view/application/index/index.phtml" ["error/404"]=> string(69) "/home/marshall/html/module/Application/config/../view/error/404.phtml" ["error/index"]=> string(71) "/home/marshall/html/module/Application/config/../view/error/index.phtml" } ["template_path_stack"]=> array(1) { [0]=> string(53) "/home/marshall/html/module/Application/config/../view" } } } 
+4
source share
1 answer

If you start with ZendSkeletonApplication , remove the predefined application route from the application configuration. The only way I could repeat this in the last ZendSkeletonApplication is to determine the route of your application before the route is already defined.

For example, this routing section in module.config.php works for me:

 'router' => array( 'routes' => array( 'home' => array( 'type' => 'Zend\Mvc\Router\Http\Literal', 'options' => array( 'route' => '/', 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ), ), 'application' => array( 'type' => 'segment', 'options' => array( 'route' => '/application[/:action][/]', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', ), ), ), ), ) 

Using this, it works:

 <?= $this->url('application', array('action' => 'validate')) ?> // Produces /application/validate/ 
+1
source

All Articles