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';
}]
];
路由的定義也可以攜帶參數(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ù)了
}]
];
控制器函數(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 支持控制器的構(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)
{
}
}
更多建議: