Advertisement
Google Ad Slot: content-top
Zend Routing
What is Routing?
Routing in Zend Framework is the process of mapping a URL to a specific controller and action.
For example:
http://example.com/user/profile
Can be routed to:
- Controller:
UserController - Action:
profileAction()
Where is Routing Defined? (module/Application/config/module.config.php)
Routes are defined inside:
When a user visits /, Zend loads MainController::homeAction() and shows the view in view/application/main/home.phtml.
namespace Application; use Laminas\Router\Http\Literal; use Application\Controller\MainController; use Laminas\ServiceManager\Factory\InvokableFactory; return [ 'router' => [ 'routes' => [ 'home' => [ 'type' => Literal::class, 'options' => [ 'route' => '/', 'defaults' => [ 'controller' => MainController::class, 'action' => 'home', ], ], ], ], ], 'controllers' => [ 'factories' => [ MainController::class => InvokableFactory::class, ], ], 'view_manager' => [ 'template_path_stack' => [ __DIR__ . '/../view', ], 'template_map' => [ 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', ], ], ];
'router' – Routing Configuration (module/Application/config/module.config.php)
'router' => [ 'routes' => [ 'home' => [ 'type' => Literal::class, 'options' => [ 'route' => '/', 'defaults' => [ 'controller' => Controller\MainController::class, 'action' => 'home', ], ], ], ], ],
- Defines a route named
home - Matches exactly
/(homepage) - When the homepage is opened, it will run:
MainController::homeAction()
'controllers' – Registering Controllers (module/Application/config/module.config.php)
'controllers' => [ 'factories' => [ Controller\MainController::class => InvokableFactory::class, ], ],
- Tells the framework how to create
MainController - Uses
InvokableFactorysince the controller has no constructor parameters - Required to make the controller load properly
MainController.php (module\Application\src\Controller\MainController.php)
<?php
declare(strict_types=1);
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class MainController extends AbstractActionController
{
public function homeAction()
{
return new ViewModel();
}
}
- Each public method ending with
Actionis an action. homeAction()→ URL:/
'view_manager' – View Folder Setup (module/Application/config/module.config.php)
'view_manager' => [ 'template_path_stack' => [ __DIR__ . '/../view', ], 'template_map' => [ 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', ], ],
template_path_stack
- Tells Zend where to find
.phtmlview files - In this case, it will look in:
module/Application/view/
If your controller is MainController and action is homeAction, Zend will look for:
view/application/main/home.phtml
home.phtml
<h1>Welcome Home (Literal Route)</h1>
template_map
- “Wrap all rendered views inside
view/layout/layout.phtml.” - Here
view/application/main/home.phtmlWrap insideview/layout/layout.phtml.
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml'
layout.phtml (module\Application\view\layout\layout.phtml)
<?= $this->doctype() ?> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> <div> <?= $this->content ?> </div> </body> </html>
Route Types in Zend
Type |
Description |
|---|---|
Literal |
Exact match of a route ( |
Segment |
Dynamic routes with parameters ( |
Regex |
Advanced pattern matching |
Hostname |
Match based on hostname |
Method |
Match based on HTTP method (GET, POST) |