Zend Basic Tutorial
Zend Forms
Zend Database
Zend Advanced
Segment
Route?A Segment
route is used when your URL contains dynamic segments (parameters) like /product/42
, /user/edit/5
, etc.
You want to pass values via the URL and capture them as variables in the controller.
'route' => '/user[/:action[/:id]]'
/user
– fixed part[:action]
– optional action
(like view
, edit
)[:id]
– optional parameter (like 5
)use Application\Controller\MainController; 'router' => [ 'routes' => [ 'user' => [ 'type' => \Laminas\Router\Http\Segment::class, 'options' => [ 'route' => '/user[/:action[/:id]]', 'defaults' => [ 'controller' => MainController::class, 'action' => 'index', ], ], ], ], ],
File: module/Application/src/Controller/UserController.php
namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class MainController extends AbstractActionController { public function indexAction() { return new ViewModel(['message' => 'User Index Page']); } public function viewAction() { $id = $this->params()->fromRoute('id', 0); return new ViewModel(['message' => "Viewing user with ID: $id"]); } public function editAction() { $id = $this->params()->fromRoute('id', 0); return new ViewModel(['message' => "Editing user with ID: $id"]); } }
view/application/main/index.phtml
<h2><?= $this->message ?></h2>
view/application/main/view.phtml
<h2><?= $this->message ?></h2>
view/application/main/edit.phtml
<h2><?= $this->message ?></h2>
URL |
Action Triggered |
View |
---|---|---|
/user |
|
|
/user/view/5 |
|
|
/user/edit/12 |
|
|
use Application\Controller\MainController; 'blog' => [ 'type' => \Laminas\Router\Http\Segment::class, 'options' => [ 'route' => '/blog[/:category][/:slug]', 'defaults' => [ 'controller' => MainController::class, 'action' => 'hello', ], 'constraints' => [ 'category' => '[a-zA-Z0-9_-]+', 'slug' => '[a-zA-Z0-9_-]+', ], ], ],
<?php namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class MainController extends AbstractActionController { public function helloAction() { $category = $this->params()->fromRoute('category', 'Module'); $slug = $this->params()->fromRoute('slug', 'Guest'); return new ViewModel([ 'category' => $category, 'slug' => $slug, ]); } }
<h1>Category, <?= $this->escapeHtml($category) ?>!</h1> <h1>Slug, <?= $this->escapeHtml($slug) ?>!</h1>
URL |
Matched Action |
Output |
---|---|---|
/blog |
helloAction() |
Category, Module! Slug, Guest! |
/archive/tech |
helloAction() |
Category, tech! Slug, Guest! |
/archive/tech/tech_slug |
helloAction() |
Category, tech! Slug, tech_slug! |