Gene\Router 是gene框架的核心類之一,本框架區別於其他常見框架的最大地方就是獨特、強大、簡單的路由定義等。
路由強大靈活,支持回調、類方法;支持rest、http請求方式(get,post,put,patch,delete,trace,connect,options,head)等; 支持定義全局、局部鉤子,每個方法可以定義清理全局鉤子等。
初始化路由,傳遞緩存key,將會把路由配置緩存起來。
Gene\Router如果作為gene_application應用的路由配置使用,可以不傳遞緩存key,自動沿用應用的標志名稱;如果作為一個獨立的功能使用,則需要傳遞緩存key,區別不同的路由配置。
返回值: Gene\Router實例化對象本身。
//實例化路由對象
$router = new Gene\Router();
方法:get,post,put,patch,delete,trace,connect,options,head;
設置路由的方法,涵蓋rest操作的基本方法。 路由路徑支持參數,回調方法支持類方法和匿名函數,鉤子定義路由鉤子及全局鉤子。
返回值: Gene\Router實例化對象本身。
訪問路由地址,將會調用設置的類的方法。 類方法的格式:classNanme@methodName.
比如: index@list;
//實例化路由對象
$router = new Gene\Router();
//路由設置類方法
$router->get("/","Controllers_Index@index");
訪問路由地址,將會調用設置的匿名函數。
//實例化路由對象
$router = new Gene\Router();
//路由設置匿名函數
$router->get("/",function(){
echo "index";
});
訪問路由地址,將會把定義的路由參數傳遞給回調方法裡面。
參數的格式:冒號後面加參數名。
比如:":id"。
回調方法裡面獲取參數:路由裡面的參數(可能有多個),作為一個數組傳遞給回調方法,回調方法裡面可以直接獲取。
//實例化路由對象
$router = new Gene\Router();
//路由設置支持參數
$router->get("/news/:id.html",function($params){
echo "id:" , $params['id'];
});
路由鉤子可以設置當前路由的鉤子,也可以設置全局鉤子,或者禁用全局鉤子。
鉤子的格式:curHookName@globalHook。
globalHook參數列表: clearBefore 禁用前置全局鉤子
clearBefore 禁用後置全局鉤子
clearAll 禁用前置、後置全局鉤子
注意:路由裡面設置鉤子過後,需要調用鉤子定義方法定義需要的鉤子。
//實例化路由對象
$router = new Gene\Router();
//路由設置鉤子
$router->get("/admin/index", Controllers_Admin_Index@index, "adminHook");
/* 定義後台管理員權限檢查鉤子 */
$router->hook("adminHook", function () {
if (!isset($_SESSION['admin']['user_id'])) {
die('沒有操作權限!');
}
});
定義鉤子,可以自定義鉤子名稱(before、after除外)。
before:默認前置全局鉤子;
after:默認後置全局鉤子;
全局鉤子定義後默認都會執行,除非路由定義裡面聲明排除:
比如排除前置全局鉤子:@clearBefore;
返回值: Gene\Router實例化對象本身。
//實例化路由對象
$router = new Gene\Router();
//定義前置全局鉤子
$router->hook("before", function(){
echo " before ";
});
//實例化路由對象
$router = new Gene\Router();
//定義後置全局鉤子
$router->hook("after", function($params){
echo " after ";
if(is_array($params))var_dump($params);
});
//實例化路由對象
$router = new Gene\Router();
//定義自定義鉤子
$router ->hook("webCheck", function () {
isset($_SESSION) || session_start();
if (!isset($_SESSION['user']['user_id'])) {
header('/login.html', 302);
die;
}
});
路由分組方法。
如果有多個路由定義公用了共同的前綴,就可以使用group方法定義前綴。
group方法必須成對使用,形成閉環。 其他類似功能方法:prefix。
返回值: Gene\Router實例化對象本身。
//實例化路由對象
$router = new Gene\Router();
//路由分組:將後台的用戶管理放在一個分組裡面
$router
->group("/admin/user")
->get("/add", "Controllers_Admin_User@add", "adminAuth@clearAll")
->post("/addPost", "Controllers_Admin_User@addPost", "adminAuth@clearBefore")
->get("/edit/:id", "Controllers_Admin_User@edit", "adminAuth@clearAll")
->post("/editPost", "Controllers_Admin_User@editPost", "adminAuth@clearBefore")
->get("/del/:id", "Controllers_Admin_User@del", "adminAuth@clearBefore")
->group();
定義路由錯誤處理。
默認內置了401處理鉤子,如果定義了401錯誤,路由處理失敗會自動調用。
返回值: Gene\Router實例化對象本身。
//實例化路由對象
$router = new Gene\Router();
//定義401
$router->error(401, function () {
echo " 401 ";
});
獲取當前路由配置的緩存時間。
無
返回值: String。
//實例化路由對象
$router = new Gene\Router();
$time = $router->getTime();
獲取當前路由緩存的事件。
無
返回值: array。
//實例化路由對象
$router = new Gene\Router();
$event = $router->getEvent();
獲取當前路由緩存的路由定義。
無
返回值: array。
//實例化路由對象
$router = new Gene\Router();
$tree = $router->getTree();
刪除當前路由緩存的時間。
返回值: boolean。
//實例化路由對象
$router = new Gene\Router();
$result = $router->delEvent();
刪除當前路由緩存的路由定義。
返回值: boolean。
//實例化路由對象
$router = new Gene\Router();
$result = $router->delTree();
清空當前路由緩存的路由定義和事件。
返回值: boolean。
//實例化路由對象
$router = new Gene\Router();
$result = $router->clear();
獲取路由對象。
無
返回值: Gene\Router實例化對象本身。
//獲取實例化路由對象
$router = Gene\Router::getRouter();
該方法執行後會運行路由定義。默認web應用可以不傳參數,如果是cli方式下訪問或者執行任務,則需要傳遞參數。
前面gene_application裡面也有run方法,其實是調用的Gene\Router裡面的run。
兩者的區別是: gene_application裡面封裝了配置加載更新的邏輯,不修改是不會重復加載的,實現了高效率。
Gene\Router裡面沒有處理緩存判斷,如果單獨使用Gene\Router模塊的話,用戶需要使用getTime方法獲取已緩存時間,進行判斷處理。
返回值: Gene\Router實例化對象本身。
//實例化路由對象
$router = new Gene\Router();
//配置路由
$router->clear()
->get("/",function(){
echo "index";
})
->run();
//實例化路由對象
$router = new Gene\Router();
//配置路由
$router->clear()
->get("/",function(){
echo "index";
})
->run('get', '/admin/task')
運行已定義的error。
返回值: boolean。
//實例化路由對象
$router = new Gene\Router();
$result = $router->runError("401");