前言
對比了幾個基于 swoole 的框架,swoft 在 github 上面 star 數(shù)量遙遙領(lǐng)先的,所以準備基于 swoft 開始一個小項目。
swoft目錄
對于一個 laravel 老玩家,看這個目錄還是比較簡單的,env 配置文件使用的時候 copy 一遍,不同的是他這邊配置是分為 env、config、bean 三部分,主要開發(fā)的代碼在 app 下,bin 下放了一些可執(zhí)行文件。

Controller
我是將它作為一個 http 的服務,所以最重要的目錄 app/Http/Controller ,每一條 http 請求對應一個 Controller 中的方法。所有 Controller 都需要 @Swoft\Http\Server\Annotation\Mapping\Controller 注解(注釋),后面所有提到的注釋和注解意義相同,注解是 java 中的稱呼,是一些有意義的代碼級別含義的標志,方法都需要添加 @Swoft\Http\Server\Annotation\Mapping\RequestMapping 注解

Request
$request = Context::get()->getRequest();
$key = $request->post('key');
$method = $request->getMethod();
$headers = $request->getHeaders();
$some = $request->query('key', 'default value')
這里 $request 可以類比 laravel 對象,
Response
這種大而全的框架其實都是有很多方法獲取常見的 request 以及 response 對象的。
全局context獲取
$response=Context::mustGet()->getResponse()
方法注入
/**
* @RequestMapping("index")
* @param Response $response
* @return Response
* @throws ReflectionException
* @throws ContainerException
*/
public function index(Response $response): Response
{
$response = $response->withContent('<html lang="en"><h1>Swoft framework</h1></html>');
$response = $response->withContentType(ContentType::HTML);
return $response;
}
可以看到使用了 param 注解,并聲明 Response 類型。
DB
和 laravel 中一樣使用 Eloquent 模型操作數(shù)據(jù),但是我沒有找到我想要的關(guān)聯(lián)模型相關(guān)的方式,例如:belongsTo、morphTo 等。
$user = User::query()
->where('mobile', $mobile)
->first();
Redis
這類框架真的互相一大抄,使用的是著名的擴展 predis,毫無懸念。
$value = Redis::get('some');
運行
直接運行
其實到這里才是我想說有點坑的地方。
$ php bin/swoft http:start
好!稍等片刻,項目是跑起來了,但是我修改代碼的時候居然不更新,需要切斷進程重新跑。
swoftcli
這也是官方提供的一個工具,可以 watch 文件的變化,然后可以自動重啟服務,cli 在老版本是內(nèi)置的,新版本的 swoft 踢除了。
$ php bin/swoftcli run -b bin/swoft /var/www/swoft
不得不說真香,但是在 MacBook 下面修改代碼到服務重啟成功總是慢半拍,但是試了在 linux 下確實可以做到同步。
容器化
終于要講到我的大殺器,官方也是提供 Dockerfile 和 docker-compose 的,改了一下 command 就可以正常運行了。
參考文檔
-官方文檔