(swoft-2.xフレームワーク)1、使用入門
8141 ワード
説明
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");
}
}
公式提供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");
}
}
getResponse()->withContentType(ContentType::HTML)->withContent("12345");
}
}
[
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);
}
}
}
ミドルウェアの制御は公式にマニュアルがなく、頭が大きい.