(swoft-2.xフレームワーク)1、使用入門


説明


php 7は新しいフレームワークにswooleをインストールする必要があるため、linux環境でしか実行できません.ここで本機開発はwin 10(:debianクラウドサーバホスト上のgit cloneプロジェクトで、本機phpstormに同期したり、修正したり、提出したり、win 10のdockerを使用してインストールしたりします).
ここでdockerにはバグがあります.ホストファイルのホット更新を感知できないので、--rmオプションを実行し、手動でホット起動します.

1.インストール


公式提供docker方式は簡単で速い:(git clonehttps://github.com/swoft-clou.../root/tmp/dk/vuejs/swoftなどのswoftをターゲットフォルダにダウンロードします.
#/root/tmp/dk/vuejs/swoft    swoft       
#     http  ,            Dockerfile  
docker run -p 18306:18306 --name swoft -v /root/tmp/dk/vuejs/swoft:/var/www/swoft --rm swoft/swoft

2.httpアクセスリクエスト


a.http応答


コピーenv....Env、パラメータをデバッグモードに変更します.ポートはapp/beanに配置する.phpは変更しません.HomeControllerと公式サイトの説明を参考に、コントローラapp/Http/Clontroller/TestControllerを追加します.php:
getResponse()->withContentType(ContentType::HTML)->withContent("12345");
    }
}
  • ここでは、コパスコンテキストの取得->応答オブジェクトの取得->HTMLヘッダを含む文字列の取得を要求します.
  • 注記ルーティング:
  • 起動ファイルbin/swoftからctrl+をクリックすると、起動プロファイル後の注記ルーティングクラスのロードが表示されます.
        [
            new EnvProcessor($this),
            new ConfigProcessor($this),
            new AnnotationProcessor($this),
            new BeanProcessor($this),
            new EventProcessor($this),
            new ConsoleProcessor($this),
            ]

    ロードプロセスの初期化:
    (new AppApplication()) ==> __construct()->this->init()=>$this->processors()=>new[]:上の4つの起動クラスをインスタンス化します.
    AnnotationRegister::load() ==> AnnotationResource()->load()..loadAnnotation()..parseAnnotation()..parseOneClassAnnotation()=>D o c t r i n e CommonAnnotationsAnnotationReader、注釈クラスをスキャンします.

    b.httpミドルウェア


    公式サイトを参照して、プロファイルapp/bean.phpにおけるhttpDispatcher['middlewares']はhttpリクエスト配信時のミドルウェアである、ここでクラス名を追加し、ViewMiddlewareをシミュレートするように構成することができる.phpはミドルウェアを記述する.デフォルトでは空の未加入があり、app/beanの構成に追加されます.php:
    'httpDispatcher'   => [
            // Add global http middleware
            'middlewares' => [
                // Allow use @View tag
                \App\Http\Middleware\ControllerMiddleware::class,
                \Swoft\View\Middleware\ViewMiddleware::class,
            ],
        ],

    app/Http/Middleware/ClontrollerMiddleware.php:
    handle($request);
                var_dump($response);
                return $response->withData($date); //   、    
                return $response;
            } elseif ( $status == 1) {
                //        
                $json = ['code'=>0,'msg'=>'    ','time'=>$date];
                $response = Context::mustGet()->getResponse();
                return $response->withData($json);
    
            } elseif ( $status == 2 ) {
                $response = Context::mustGet()->getResponse();
                return $response->withData("ok")->withStatus(404);
            } else {
                $method = $request->getMethod();
                $response = Context::mustGet()->getResponse();
                return $response->withData($method);
            }
        }
    }

    ブラウザにアクセスすると、応答の結果が表示されます.起動構成httpDispatcherに追加すると、onRequestが戻る前にロードされます.withData():stringタイプの場合:戻り配列のdataフィールドに格納され、配列タイプ:そのまま返されます.

    c.RESTful API


    swoftは注釈ルーティングを使用するため,要求方式も注釈に追加する.エディタで@RequestMapping()注記をクリックすると、methodプライベート属性、共通メソッドgetMethod()Arrayが表示されます.
    ## app/Http/Controller/TestController.php:
    use Swoft\Http\Server\Annotation\Mapping\RequestMethod;
    
        /**
         * @RequestMapping(route="/test/rs", method={RequestMethod::POST, RequestMethod::PUT})
         * @throws Throwable
         *
         *     
         */
        public function restful(): Response
        {
            //SwoftTest\Http\Server\Testing\Controller\RouteController
            //* @RequestMapping("method", method={RequestMethod::POST, RequestMethod::PUT})
            //Swoft\Devtool\Http\Controller\GenController
            //* @RequestMapping(route="preview", method=RequestMethod::POST)
            return Context::mustGet()->getResponse()->withContentType(ContentType::HTML)->withContent("hiaa");
        }
    }
    
    ## app/Http/Middleware/ControllerMiddleware.php:
    getMethod();
    
            $router    = \Swoft\Bean\BeanFactory::getSingleton('httpRouter');
            $uriPath   = $request->getUriPath();
            $routeData = $router->match($uriPath, $method);
            if( $routeData[0] == \Swoft\Http\Server\Router\Router::NOT_FOUND ){
                $response = Context::mustGet()->getResponse();
                var_dump(1111111);
                return $response->withData([$method ."    "]);
            }
    
            $status = 0;
            if ( $status == 0 ) {
                //          
                $response = $handler->handle($request);
                var_dump("    ");
                return $response->withData($date); //   、    
                return $response;
            } elseif ( $status == 1) {
                //        
                $json = ['code'=>0,'msg'=>'    ','time'=>$date];
                $response = Context::mustGet()->getResponse();
                return $response->withData($json);
    
            } elseif ( $status == 2 ) {
                $response = Context::mustGet()->getResponse();
                return $response->withData("ok")->withStatus(404);
            } else {
                $response = Context::mustGet()->getResponse();
                return $response->withData($method);
            }
        }
    }

    ミドルウェアの制御は公式にマニュアルがなく、頭が大きい.