路由訪問位址
路由到控制器/操作
#這是最常用的一種路由方式,把滿足條件的路由規則路由到相關的控制器和操作,然後由系統調度執行相關的操作,格式為:
控制器/操作
解析規則是從操作開始解析,然後解析控制器,例如:
// 路由到blog控制器 Route::get('blog/:id','Blog/read');
Blog類別定義如下:
<?php namespace app\index\controller; class Blog { public function read($id) { return 'read:' . $id; } }
路由位址中支援多層控制器,使用下面的方式進行設定:
Route::get('blog/:id','group.Blog/read');
表示路由到下面的控制器類,
index/controller/group/Blog
也可以支援路由到動態的應用程式、控制器或操作,例如:
// action变量的值作为操作方法传入 Route::get(':action/blog/:id', 'Blog/:action');
路由到類別的方法
這種方式的路由可以支援執行任何類別的方法,而不限於執行控制器的操作方法。
路由位址的格式為(動態方法):
\完整類別名稱@方法名稱
或(靜態方法)
\完整類別名::方法名稱
例如
Route::get('blog/:id','\app\index\service\Blog@read');
執行的是 \app\index\service\Blog類別的read方法。
也支援執行某個靜態方法,例如:
Route::get('blog/:id','\app\index\service\Blog::read');
重定向路由
#可以直接使用redirect方法註冊一個重定向路由
Route::redirect('blog/:id', 'http://blog.thinkphp.cn/read/:id', 302);
路由到範本
支援路由直接渲染範本輸出。
// 路由到模板文件 Route::view('hello/:name', 'index/hello');
表示該路由會渲染目前應用程式下面的view/index/hello.html範本檔案輸出。
模板檔案中可以直接輸出目前請求的param變量,如果需要增加額外的模板變量,可以使用:
Route::view('hello/:name', 'index/hello', ['city'=>'shanghai']);
在模板中可以輸出name和city兩個變數。
Hello,{$name}--{$city}!
路由到回應物件
支援在路由中直接指定回應物件輸出,例如:
Route::get('hello/:name', response() ->data('Hello,' . $name) ->code(200) ->contentType('text/plain'));
更多的情況是直接對資源檔案的請求設定404存取
// 对于不存在的static目录下的资源文件设置404访问 Route::get('static', response()->code(404));
路由到閉包
我們可以使用閉包的方式定義一些特殊需求的路由,而不需要執行控制器的操作方法了,例如:
Route::get('hello', function () { return 'hello,world!'; });
參數傳遞
#閉包定義的時候支援參數傳遞,例如:
Route::get('hello/:name', function ($name) { return 'Hello,' . $name; });
規則路由中定義的動態變數的名稱就是閉包函數中的參數名稱,不分次序。
因此,如果我們造訪的URL位址是:
http://serverName/hello/thinkphp
則瀏覽器輸出的結果是:
Hello,thinkphp
##依賴注入
可以在閉包中使用依賴注入,例如:Route::rule('hello/:name', function (Request $request, $name) { $method = $request->method(); return '[' . $method . '] Hello,' . $name; });