I am using this tutorial https://docs.zendframework.com/tutorials/getting-started/overview/ for creating album module. It works for me.
Inside project there is /module/Album/config/module.config.php file which contains routes. Routers are located inside an array tree. As my previous experience shows I can have in the future dozens of routes per a project (even per a module).
On this documentation page https://docs.zendframework.com/zend-router/routing/ I found another way to add routers to the module.
// One at a time:
$route = Literal::factory([
'route' => '/foo',
'defaults' => [
'controller' => 'foo-index',
'action' => 'index',
],
]);
$router->addRoute('foo', $route);
Such a way is preferred for me than storing routes in a very deep config array tree.
So, my question is: where I can put php routers code outside a config tree as I have mentioned earlier? Where in the module should be such a routers-file located at?
This is not precisely an answer to your question, but a different approach. I do this in module.config.php
when config arrays get too huge:
return [
'router' => include __DIR__.'/routes.php'
,
'controllers' => [
/* etc */
'view_manager' => [
'template_map' => include(__DIR__.'/template_map.php'),
'template_path_stack' => [
__DIR__.'/../view',
],
],
// etc
and it seems to work just fine.
1 Like
I also saw another proposition to keep routes in separate files and then merge them together.
You can do in Module::onBootstrap()
like the following:
<?php
namespace Application;
use Zend\Mvc\MvcEvent;
use Zend\Router\Http\Literal;
class Module
{
public function onBootstrap(MvcEvent $e)
{
$services = $e->getApplication()->getServiceManager();
$router = $services->get('Router');
$route = Literal::factory([
'route' => '/foo',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
]);
$router->addRoute('foo', $route);
}
public function getConfig() { /* ... */ }
}
1 Like
It seems, I was searching exactly for this solution.