swoft 入門

前言

對比了幾個基于 swoole 的框架,swoft 在 github 上面 star 數(shù)量遙遙領(lǐng)先的,所以準備基于 swoft 開始一個小項目。

swoft目錄

對于一個 laravel 老玩家,看這個目錄還是比較簡單的,env 配置文件使用的時候 copy 一遍,不同的是他這邊配置是分為 env、config、bean 三部分,主要開發(fā)的代碼在 app 下,bin 下放了一些可執(zhí)行文件。


image.png

Controller

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

image.png

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 就可以正常運行了。

參考文檔

-官方文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • swoft2.0源碼剖析01-注解器 前言 本人認為學習一個框架正確的方式是先看框架的文檔,再進入實戰(zhàn)動手寫代碼寫...
    自律小嘉同學閱讀 316評論 0 0
  • date: 2018-2-28 10:07:15title: go| beego 速覽description: 快...
    daydaygo閱讀 2,612評論 0 9
  • 1、@Controller 在SpringMVC 中,控制器Controller 負責處理由DispatcherS...
    jkian閱讀 1,062評論 5 14
  • 什么是HTTP中間件呢? 中間件Middleware用于控制請求到達和響應請求的整個流程,可對請求進行過濾驗證,當...
    JunChow520閱讀 2,993評論 0 1
  • 先說幾句廢話,調(diào)和氣氛。事情的起由來自客戶需求頻繁變更,偉大的師傅決定橫刀立馬的改革使用新的框架(created ...
    wsdadan閱讀 3,198評論 0 12

友情鏈接更多精彩內(nèi)容