Reputation: 1815
I am using ZF2 Skeleton app.
To create a new controller in a existing Module, I modified the module.config.php file like this:
<?php
return array(
'controllers' => array(
'invokables' => array(
'Album\Controller\Album' => 'Album\Controller\AlbumController', // WORKING FINE
'Album\Controller\Photo' => 'Album\Controller\PhotoController', // I ADDED THIS
),
),
// The following section Was PREVIOUSLY THERE
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/album[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Album\Controller\Album',
'action' => 'index',
),
),
),
),
),
// ADDED THIS FOR NEW CONTROLLER 'PhotoController.php' in same Namespace 'Album'
'router' => array(
'routes' => array(
'photo' => array(
'type' => 'segment',
'options' => array(
'route' => '/photo[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Album\Controller\Photo',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);`
This link (http://domainname.com/dummy/zend/zf2-tutorial/public/photo/index) is working as expected.
This link (http://domainname.com/dummy/zend/zf2-tutorial/public/album/index) is not working and showing the following errors:
A 404 error occurred Page not found.
The requested URL could not be matched by routing.
Upvotes: 2
Views: 6937
Reputation: 11447
The problem is you're declaring router
in your config twice, the second one overwrites the first, so only the second route is used.
Your config file should look something like this with both routes inside the same router
declaration
<?php
return array(
'controllers' => array(
'invokables' => array(
'Album\Controller\Album' => 'Album\Controller\AlbumController', // WORKING FINE
'Album\Controller\Photo' => 'Album\Controller\PhotoController', // I ADDED THIS
),
),
// The following section Was PREVIOUSLY THERE
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/album[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Album\Controller\Album',
'action' => 'index',
),
),
),
// This is where your new route goes
'photo' => array(
'type' => 'segment',
'options' => array(
'route' => '/photo[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Album\Controller\Photo',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
Upvotes: 3