路由訪問位址



路由到控制器/操作

#這是最常用的一種路由方式,把滿足條件的路由規則路由到相關的控制器和操作,然後由系統調度執行相關的操作,格式為:

控制器/操作

解析規則是從操作開始解析,然後解析控制器,例如:

// 路由到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;
});