摘要:路由定義文件定義下的所有的路由文件都是有效的定義路由必須使用控制器定義修改配置文件,強制路由訪問此時已經開啟多應用配置目錄文件如下修改配置文件,啟用路由
路由定義文件
route 定義下的所有的路由文件都是有效的
定義路由必須使用
use thinkfacadeRoute;
控制器定義
修改配置文件,強制路由訪問
此時已經開啟多應用配置
目錄文件如下
修改配置文件,啟用路由
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------
// | 應用設置
// +----------------------------------------------------------------------
use thinkfacadeEnv;
return [
// 應用地址
"app_host" => Env::get("app.host", ""),
// 應用Trace(環境變量優先讀取)
"app_trace" => false,
// 應用的命名空間
"app_namespace" => "",
// 是否啟用路由
"with_route" => true,
// 是否啟用事件
"with_event" => true,
// 自動多應用模式
"auto_multi_app" => true,
// 應用映射(自動多應用模式有效)
"app_map" => [],
// 域名綁定(自動多應用模式有效)
"domain_bind" => [],
// 禁止URL訪問的應用列表(自動多應用模式有效)
"deny_app_list" => [],
// 默認應用
"default_app" => "index",
// 默認時區
"default_timezone" => "Asia/Shanghai",
// 默認驗證器
"default_validate" => "",
// 異常頁面的模板文件
"exception_tmpl" => app()->getThinkPath() . "tpl/think_exception.tpl",
// 錯誤顯示信息,非調試模式有效
"error_message" => "頁面錯誤!請稍后再試~",
// 顯示錯誤信息
"show_error_msg" => true,
];
再次修改配置文件,強制路由
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------
// | 應用設置
// +----------------------------------------------------------------------
return [
// PATHINFO變量名 用于兼容模式
"var_pathinfo" => "s",
// 兼容PATH_INFO獲取
"pathinfo_fetch" => ["ORIG_PATH_INFO", "REDIRECT_PATH_INFO", "REDIRECT_URL"],
// pathinfo分隔符
"pathinfo_depr" => "/",
// HTTPS代理標識
"https_agent_name" => "",
// URL偽靜態后綴
"url_html_suffix" => "html",
// URL普通方式參數 用于自動生成
"url_common_param" => true,
// 是否開啟路由延遲解析
"url_lazy_route" => false,
// 是否強制使用路由
"url_route_must" => true,
// 合并路由規則
"route_rule_merge" => false,
// 路由是否完全匹配
"route_complete_match" => false,
// 使用注解路由
"route_annotation" => false,
// 是否開啟路由緩存
"route_check_cache" => false,
// 路由緩存連接參數
"route_cache_option" => [],
// 路由緩存Key
"route_check_cache_key" => "",
// 訪問控制器層名稱
"controller_layer" => "controller",
// 空控制器名
"empty_controller" => "Error",
// 是否使用控制器后綴
"controller_suffix" => false,
// 默認的路由變量規則
"default_route_pattern" => "[w.]+",
// 域名根,如thinkphp.cn
"url_domain_root" => "",
// 是否自動轉換URL中的控制器和操作名
"url_convert" => true,
// 表單請求類型偽裝變量
"var_method" => "_method",
// 表單ajax偽裝變量
"var_ajax" => "_ajax",
// 表單pjax偽裝變量
"var_pjax" => "_pjax",
// 是否開啟請求緩存 true自動緩存 支持設置請求緩存規則
"request_cache" => false,
// 請求緩存有效期
"request_cache_expire" => null,
// 全局請求緩存排除規則
"request_cache_except" => [],
// 默認控制器名
"default_controller" => "Index",
// 默認操作名
"default_action" => "index",
// 操作方法后綴
"action_suffix" => "",
// 默認JSONP格式返回的處理方法
"default_jsonp_handler" => "jsonpReturn",
// 默認JSONP處理方法
"var_jsonp_handler" => "callback",
];
再次定義admin下的路由
此時訪問 http://localhost:8082/admin/ming/34
已經開始路由
正常訪問
沒有路由
此時開啟強制路由以后,首頁需要開啟路由
由于默認的應用為index 所以需要在route定義index
目錄如下
定義首頁目錄
此時訪問首頁
http://localhost:8082/
會被重定向到 index控制器下的index方法
變量規則
變量規則,這里定義的是
Route::get("new/:name", "News/read")
->pattern(["name" => "[w|-]+"]);
此時匹配的是name變量的匹配的規則,匹配的規則是雙斜杠
路由規則
// 定義動態路由
Route::get("hello/:name", "index/:name/hello");
可以做到把一個變量傳入另外一個路由中
路由地址
路由到控制器的操作
添加一個控制器
此控制器使用appadmincontroller 命名空間 其文件內容如下
傳入$id作為參數
再次定義路由規則如下
Route::get("blog/:id", "Blog/read");
此時訪問admin模塊下的blog內容,會匹配:id的內容,
http://localhost:8082/admin/blog/23/ 此時會匹配23內容
其結果如下
路由地址
路由到控制器操作
路由到控制器和操作
上面的例子就是
路由到類的方法
這種方式可以執行任何方法
Route::get("blog/:id","appindexserviceBlog@read");
Route::get("blog/:id","appindexserviceBlog::read");
上方執行的是Blog的read方法或者read的靜態方法
重定向路由
Route::redirect("blog/:id", "http://blog.thinkphp.cn/read/:id", 302);
使用302重定向一個新的地址
路由到模板
使用路由到模板直接渲染
訪問 http://localhost:8082/admin/blog/ 此時會渲染出
閉包支持
使用閉包可以使用一些特殊需求的路由,不需要再次執行控制器的操作了
http://localhost:8082/admin/blog/34
閉包中可以實現依賴注入
method();
return $method . $name;
});
此時由于依賴request會自動注入request
路由參數
對當前的路由進行匹配。。
ext("html") // url 后綴檢測
->https(); // https 檢測
只有全部符合要求才能匹配到
額外追加參數
使用append額外追加參數
append(
["app_id" => 1, "status" => 1]
);
此時會傳入兩個參數 app_id 和 status 兩個參數
綁定模型
支持綁定模型
Route::get("hello/:id", "index/hello")
->model("appindexmodelUser");
支持從模型層中直接獲取數據
同時可以使用閉包,獲取數據
Route::rule("hello/:id", "index/hello")
->model(function ($id) {
$model = new appindexmodelUser;
return $model->where("id", $id)->find();
});
請求緩存
Route::get("new/:name$", "News/read")
->cache(3600);
表示直接請求3600秒
路由中間件
可以在路由中,數據直接傳給中間件
路由分組
可以對公有的路由進行分組操作
ext("html")->pattern([
"id" => "d+",
"name" => "w+"
]);
此時,可以根據正則匹配路由
資源路由
此時訪問
http://localhost:8082/admin/blog/34/edit 會調用edit方法
http://localhost:8082/admin/blog/34/read 會調用read方法
資源嵌套
路由支持資源嵌套
注解路由
修改配置文件,實現注解路由
// +----------------------------------------------------------------------
// +----------------------------------------------------------------------
// | 應用設置
// +----------------------------------------------------------------------
return [
// PATHINFO變量名 用于兼容模式
"var_pathinfo" => "s",
// 兼容PATH_INFO獲取
"pathinfo_fetch" => ["ORIG_PATH_INFO", "REDIRECT_PATH_INFO", "REDIRECT_URL"],
// pathinfo分隔符
"pathinfo_depr" => "/",
// HTTPS代理標識
"https_agent_name" => "",
// URL偽靜態后綴
"url_html_suffix" => "html",
// URL普通方式參數 用于自動生成
"url_common_param" => true,
// 是否開啟路由延遲解析
"url_lazy_route" => false,
// 是否強制使用路由
"url_route_must" => true,
// 合并路由規則
"route_rule_merge" => false,
// 路由是否完全匹配
"route_complete_match" => false,
// 使用注解路由
"route_annotation" => true,
// 是否開啟路由緩存
"route_check_cache" => false,
// 路由緩存連接參數
"route_cache_option" => [],
// 路由緩存Key
"route_check_cache_key" => "",
// 訪問控制器層名稱
"controller_layer" => "controller",
// 空控制器名
"empty_controller" => "Error",
// 是否使用控制器后綴
"controller_suffix" => false,
// 默認的路由變量規則
"default_route_pattern" => "[w.]+",
// 域名根,如thinkphp.cn
"url_domain_root" => "",
// 是否自動轉換URL中的控制器和操作名
"url_convert" => true,
// 表單請求類型偽裝變量
"var_method" => "_method",
// 表單ajax偽裝變量
"var_ajax" => "_ajax",
// 表單pjax偽裝變量
"var_pjax" => "_pjax",
// 是否開啟請求緩存 true自動緩存 支持設置請求緩存規則
"request_cache" => false,
// 請求緩存有效期
"request_cache_expire" => null,
// 全局請求緩存排除規則
"request_cache_except" => [],
// 默認控制器名
"default_controller" => "Index",
// 默認操作名
"default_action" => "index",
// 操作方法后綴
"action_suffix" => "",
// 默認JSONP格式返回的處理方法
"default_jsonp_handler" => "jsonpReturn",
// 默認JSONP處理方法
"var_jsonp_handler" => "callback",
];
添加注解,實現路由
路由綁定
支持綁定到控制器操作,命名空間,和類
// 綁定當前的URL到 Blog控制器
Route::bind("blog");
// 綁定當前的URL到 Blog控制器的read操作
Route::bind("blog/read");
原先訪問 http://serverName/blog/read/id/5
需要訪問 http://serverName/read/id/5 可以訪問到
剩下的還可以綁定到命名空間 類
域名路由
使用 Route::domain 綁定子域
路由緩存
過
MISS 路由
MISS路由為全局最后一條執行的路由
跨域請求
通過allowCrossDomain 進行跨域請求
URL請求
用于生成url請求
路由規則
5, "name" => "ming"]));
return $id;
}
}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31606.html
摘要:杰出的數據庫遷移工具和緊密集成的單元測試支持,這些工具賦予你構建任何應用的能力。淺談應公司要求,現在用重新搭一個框架,接觸了幾天對它也有了一定的了解。淺談支持,支持單元測試。更加嚴謹了,異常嚴謹的錯誤檢測和安全機制。 自從接觸php開始,用的就是thinkphp框架,它給我的感覺是輕量,且容易上手。后來進了一家外包公司又用了laravel框架,個人覺得laravel還是很高大上的,功能...
在ThinkPHP中我們使用偽靜態的時候會產生一些問題,從而不能夠很方便在用apache的rewrite規則來解決,不過官方因為這個問題給大家提供了一種高級解決方案就是route 我在使用ThinkPHP做項目的時候遇到這樣的事情 route的規則是要匹配一下控制器 這就是官方在路由的例子里面為什么不使用別的方式,我也納悶官方為什么沒有解決這個問題 看官方的例子,然后我在寫我的需求 ...
摘要:抽象數據庫訪問層作用對不同數據庫的操作進行封裝,最終達到用統一的操作方式操作不同數據庫連接器隱藏不同數據庫連接的差異,自動加載對應的數據庫驅動查詢構建起隱藏不同數據庫的差異,自動拼接路由層什么是路由每個框架都具有路由功能,所謂路由就是用戶請 抽象數據庫訪問層 作用:對不同數據庫的操作進行封裝,最終達到:用統一的操作方式操作不同數據庫 連接器:隱藏不同數據庫連接的差異,自動加載對應的數...
摘要:源碼分析開門篇生命周期入口文件用戶發起的請求都會經過應用的入口文件,通常是文件。注冊錯誤和異常機制執行注冊錯誤和異常處理機制。由三部分組成應用關閉方法錯誤處理方法異常處理方法注冊應用關閉方法是為了便于攔截一些系統錯誤。 源碼分析—開門篇 thinkphp生命周期 1、入口文件 用戶發起的請求都會經過應用的入口文件,通常是 ==public/index.php==文件。當然,你也可以更改...
摘要:如上為三個模塊行為行為是在預先定義好的一個應用位置執行的一些操作。發生作用的位置稱之為鉤子,當應用程序運行到這個鉤子的時候,就會被攔截下來,統一執行相關的行為。給某一個鉤子綁定相關行為就成了一種類編程的思想。 ThinkPhp5.0 Composer: php世界里的包管理器 目錄結構 project 應用部署目錄 ├─application 應用目錄(可設置) ...
摘要:異常處理上節解讀源碼一自動加載看完了自動加載部分,根據代碼執行順序,的行注冊錯誤和異常處理機制加載慣例配置文件下面的加載配置文件不用說,現在重點看一下異常處理。博客鏈接解讀源碼二異常處理和請求生命周期 異常處理 上節解讀 thinkphp5 源碼(一):自動加載看完了自動加載部分,根據代碼執行順序,base.php的59-64行 // 注冊錯誤和異常處理機制 hinkError::r...
閱讀 3503·2019-08-30 15:53
閱讀 3415·2019-08-29 16:54
閱讀 2204·2019-08-29 16:41
閱讀 2415·2019-08-23 16:10
閱讀 3386·2019-08-23 15:04
閱讀 1357·2019-08-23 13:58
閱讀 357·2019-08-23 11:40
閱讀 2462·2019-08-23 10:26
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要