Blink路由與控制器

2018-11-25 22:00 更新

Blink路由與控制器

Blink路由

Blink 默認(rèn)的路由配置位于 src/http/routes.php 文件中,該文件返回一個(gè)數(shù)組,包含應(yīng)用所有的路由定義。 下面是一個(gè)簡(jiǎn)單的路由配置文件:

<?php
return [
    ['GET', '/', function () {
        return 'hello world';
    }],
    ['GET', '/foo/bar', function () {
        return 'hello foo bar';
    }]
];

路由的定義也支持指定多個(gè) HTTP 請(qǐng)求方法(HTTP Method),實(shí)例如下:

return [
    [['GET', 'HEAD'], '/', function () {
        // 該路徑下的 GET 和 HEAD 請(qǐng)求都將由該函數(shù)處理
        return 'hello world';
    }]
];

Blink帶參數(shù)的路由

路由的定義也可以攜帶參數(shù),我們使用{param} 的語(yǔ)法來(lái)定義一個(gè)參數(shù),其中param是參數(shù)的名稱,控制器函數(shù)需要按順序接受 框架傳遞過(guò)來(lái)的參數(shù)。如下的例子中定義了 type 和 id 兩個(gè)參數(shù):

return [
    ['GET', '/users/{type}/{id}', function ($type, $id) {
        // 路由中定義的參數(shù)可以直接在控制器函數(shù)或方法中獲取
    }]
];

上面的例子沒有對(duì) type 和 id 參數(shù)做任何限制,實(shí)際上下面這些 URL 都能通過(guò)該路由的校驗(yàn):

/users/foo/123
/users/321/bar
/users/foo/bar

但實(shí)際上我們可以只希望 /users/foo/123 通過(guò)檢驗(yàn),這時(shí)我們可以使用正則表達(dá)式限制每個(gè)參數(shù)的值,其對(duì)應(yīng)的語(yǔ)法是{param:expression}, 下面的路由定義就符合我們的預(yù)期:

return [
    ['GET', '/users/{type:[a-zA-Z]+}/{id:\d+}', function ($type, $id) {
        // 現(xiàn)在的 type 就限定為字符串, id 限定為整數(shù)了
    }]
];

Blink控制器

控制器函數(shù)除了上文中使用的匿名函數(shù),更常見的是使用類的方法。我們使用 ClassName@method 這樣的語(yǔ)法指定類方法作為控制器函數(shù),如:

return [
    ['GET', '/', '/app/http/controllers/IndexController@index']
];

該示例中我們采用了類的絕對(duì)命名空間,這個(gè)看起來(lái)會(huì)比較繁瑣,這是我們可以結(jié)合 src/config/app.php 中的controllerNamespace 配置,采用相對(duì)的命名空間格式,簡(jiǎn)化代碼。結(jié)合兩者,下面示例達(dá)到的效果將完全一致:

src/config/app.php

return [
    'controllerNamespace' => '\app\http\controllers',
];

src/http/routes.php

return [
    ['GET', '/', 'IndexController@index']
];

Blink依賴注入

Blink 支持控制器的構(gòu)造函數(shù)和普通方法兩種注入方式。通過(guò)依賴注入,我們可以很方便的把需要的對(duì)象拿來(lái)使用,而不用關(guān)心這些對(duì)象是怎么創(chuàng)建的, 框架本身自然會(huì)很好的處理好對(duì)象的創(chuàng)建。下面是一個(gè)簡(jiǎn)單的控制器注入案例:

use blink\core\Object;
use blink\http\Request;

class Controller extends Object
{
    /**
     * 這里通過(guò)構(gòu)造函數(shù)注入 Request 對(duì)象
     */
    public function __construct(Request $request, $config = [])
    {

        parent::__construct();
    }

    /**
     * 這里在普通方法中注 Request 對(duì)象
     *
     * @param $id 路由參數(shù) id 的值,注意路由參數(shù)需要放在參數(shù)列表的前面
     * @param $request 注入的 Request 對(duì)象
     */
    public function index($id, Request $request)
    {

    }
}
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)