由於zendframework的最新版本是3.x,我會發布Zf3的樣本解決方案,因爲在zend路由上這是一篇不完整的文章。
您希望通過僅使用一個控制器來集中管理請求,所以你可以檢查permisions,角色等,以便爲您的網站的管理頁面。 我們將執行下一個任務:
- 編輯「module.config.php」文件以獲得易於閱讀的代碼。
- 創建一個DefineRoutes.php文件
- 編寫一個簡單的正則表達式來爲所有可能的管理任務設置通配符匹配位置。
我會supouse我們創建了一個管理模塊中的 「modules.config.php」 文件
編輯module.config.php文件正確註冊:
<?php
/**
* @Filename: zendframework/module/Admin/config/module.config.php
* The module required settings.
* @author: your name here
*/
return [
'controllers' => [
'factories' => include __DIR__ . '/ControllerFactories.php'
],
'router' => [
'routes' => include __DIR__ . '/DefineRoutes.php',
],
'view_manager' => ['template_path_stack' => [__DIR__ . '/../view',],],
];
注:我們做的不使用close標籤? >在我們的文件中
創建「DefineRoutes.php」文件。
<?php
/**
* @Filename: zendframework/module/Admin/config/DefineRoutes.php
* Declares site's admin routes
* @author: your name here
*/
namespace Admin;
use Zend\Router\Http\Segment;
// first a couple of useful functions to make our life easy:
// Creates a regexp to match all case-variants of a word
function freeCaseExt($toCase){
$len = strlen($toCase);
$out = '';
if($len < 1){ return $out; }
for ($i=0; $i<$len; $i++){
$s = strtolower(substr($toCase, $i, 1));
$out .= '['.$s.strtoupper($s).']';
}
return $out;
}
// To append slash child routes elsewhere
function SlashUri($controller, $action){
return [
'type' => \Zend\Router\Http\Literal::class,
'options' => [
'route' => '/',
'defaults' => ['controller' => $controller, 'action' => $action ]]];
}
$adminvariants = freeCaseExt('admin'); // to constrain our main route
// Our route family tree:
'admin' => [
'type' => Segment::class,
'options' => [
'route' => '/:admin[/:case][/:casea][/:caseb][/:casec][/:cased][/:casee][/:casef][/:caseg][/:caseh]',
'constraints' => [
'admin' => $adminvariants,
'case' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'casea' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'caseb' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'casec' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'cased' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'casee' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'casef' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'caseg' => '[a-zA-Z0-9][a-zA-Z0-9_-]*',
'caseh' => '[a-zA-Z0-9][a-zA-Z0-9_-]*'
],
'defaults' => [
'controller' => Controller\AdminController::class,
'action' => 'index'
]
],
'may_terminate' => TRUE,
'child_routes' => [
'adminslash' => SlashUri(Controller\AdminController::class, 'index'),
]
],
// Now you have declared all the posible admin routes with or without
// slaches '/' at 9 deep levels using the AdminController::Index() method
// to decide wath to do.
重要:由於我們所限定的第一級通配符:管理員適當約束是需要或它重疊其它第一級路由。
控制器邏輯是幾個skope。 希望這個想法可以幫助某人。
Luis
你想要達到什麼目的,只處理動態路由,沒有任何靜態路由? – RomanPerekhrest