このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
apricot:usage:ja:http [2020/07/29 13:21] tanaka 作成 |
apricot:usage:ja:http [2020/09/03 13:45] (現在) y2sunlight [Apricot リクエストとレスポンス] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > 編集中 | ||
- | |||
- | ---- | ||
- | |||
====== Apricot リクエストとレスポンス ====== | ====== Apricot リクエストとレスポンス ====== | ||
--- // | --- // | ||
- | [[apricot: | + | [[apricot: |
目次 | 目次 | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
+ | * [[apricot: | ||
* Apricot リクエストとレスポンス | * Apricot リクエストとレスポンス | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
+ | * [[apricot: | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
行 22: | 行 23: | ||
===== リクエスト ===== | ===== リクエスト ===== | ||
- | ==== Input ==== | + | |
- | >TODO | + | Apricotのリクエストクラスは、PHPのスーパーグローバル変数を個別にカプセル化したシングルトンです。リクエスト取得用に以下のシングルトンがあります: |
+ | |||
+ | * Input --- フォーム送信データ(GET変数またはPOST変数:methodに依存) | ||
+ | * QueryString --- クエリ文字列(GET変数) | ||
+ | * Session --- SESSION変数 | ||
+ | * Flash --- 1回限り有効なSESSION変数 | ||
+ | * Cookie --- COOKIE変数 | ||
+ | |||
+ | これらはシングルトンなので、アプリケーションのどこからでもリクエストを取得することができます。 | ||
\\ | \\ | ||
- | ==== QueryString ==== | + | ==== Inputクラス ==== |
- | >TODO | + | |
+ | Inputクラスはフォームの送信データを取得するシングルトンで、methodに従って、$_GETまたは$_POSTから生成されます。Inputクラスは後述のQueryStringクラスは同じく '' | ||
+ | |||
+ | 使用法: ** Input:: | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |bool has(string $key)|キー指定よる入力データの存在確認| | ||
+ | |string get(string $key, string $default | ||
+ | |array all()|全ての入力データの取得| | ||
+ | |array only(array< | ||
+ | |array except(array< | ||
+ | |set(string $key, string $vale)|入力データの設定| | ||
+ | |remove(string $key)|入力データの削除| | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code php> | ||
+ | $inputs | ||
+ | $account | ||
+ | $password | ||
+ | </ | ||
+ | |||
+ | 以下は、上の例と同じ結果になります。'' | ||
+ | |||
+ | <code php> | ||
+ | $account = Input:: | ||
+ | $password = Input:: | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code php> | ||
+ | $inputs = Input:: | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code php> | ||
+ | $inputs = Input:: | ||
+ | </ | ||
+ | |||
+ | バリデーションなどの後で不要になった入力値は、'' | ||
+ | |||
+ | <code php> | ||
+ | Input:: | ||
+ | </code> | ||
\\ | \\ | ||
- | ==== Session | + | ==== QueryStringクラス |
- | >TODO | + | |
+ | QueryStringクラスはクエリ文字列を取得する為のシングルトンです。このクラスは'' | ||
+ | |||
+ | 使用法: ** QueryString:: | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |bool has(string $key)|キー指定よる入力データの存在確認| | ||
+ | |string get(string $key, string $default = null)|キー指定よる入力データの取得| | ||
+ | |array all()|全ての入力データの取得| | ||
+ | |array only(array< | ||
+ | |array except(array< | ||
+ | |set(string $key, string $vale)|入力データの設定| | ||
+ | |remove(string $key)|入力データの削除| | ||
+ | |||
+ | 使用例は上のInputシングルトンを同じです。 | ||
\\ | \\ | ||
- | ==== Flash ==== | + | ==== Sessionクラス |
- | >TODO | + | |
+ | Sessionクラスはセッション変数を設定及び取得をするシングルトンです。このクラスは '' | ||
+ | |||
+ | 使用法: ** Session:: | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |start()|セッションの開始| | ||
+ | |isStarted(): | ||
+ | |has(string $key): | ||
+ | |get(string $key, $default = null)|セッション変数の取得| | ||
+ | |set(string $key, $value)|セッション変数の設定| | ||
+ | |remove(string $key)|セッション変数の削除| | ||
+ | |clear()|セッション変数のクリア| | ||
+ | |destroy()|セッションの破棄| | ||
+ | |flash(): | ||
+ | |||
+ | 使用例: | ||
+ | <code php> | ||
+ | // 指定したデータがセッションに存在するかを調べる。 | ||
+ | if (Session:: | ||
+ | // 存在する | ||
+ | } | ||
+ | |||
+ | // 指定したデータをセッションから取得する。第2引数はデフォルト値です。 | ||
+ | $value = Session:: | ||
+ | |||
+ | // セッションへデータを保存する。 | ||
+ | Session:: | ||
+ | |||
+ | // 指定したデータをセッションから削除する | ||
+ | Session:: | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
\\ | \\ | ||
- | ==== Cookie ==== | + | === 設定ファイル === |
- | >TODO | + | |
+ | セッションには以下の設定ファイルが存在します。 | ||
+ | |||
+ | {{fa> | ||
+ | <code php session.setting.php> | ||
+ | <?php | ||
+ | /** | ||
+ | * This file contains session settings. | ||
+ | */ | ||
+ | return | ||
+ | [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ], | ||
+ | ]; | ||
+ | </ | ||
+ | |||
+ | * name --- セッション名(初期設定値は環境変数APP_SECRETを使って設定します) | ||
+ | * ini.gc_maxlifetime --- サーバに保存されるセッション変数の有効期間(デフォルト値は1440[秒]) | ||
+ | * ini.gc_probability --- [[https:// | ||
+ | * ini.gc_divisor --- [[https:// | ||
+ | * ini.cookie_lifetime --- セッションクッキーの有効期間(デフォルト0ではブラウザを閉じたらセッションは破棄されます) | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Flashクラス ==== | ||
+ | |||
+ | フラッシュとは、セッション内で一回限りだけ有効な[[# | ||
+ | |||
+ | 使用法: ** Flash:: | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |has(string $key): | ||
+ | |get(string $key, $default = null)|フラッシュ変数の取得| | ||
+ | |set(string $key, $value)|フラッシュ変数の設定| | ||
+ | |remove(string $key)|フラッシュ変数の削除| | ||
+ | |clear()|フラッシュ変数のクリア| | ||
+ | |||
+ | 使用例: | ||
+ | <code php> | ||
+ | // 指定したデータがフラッシュに存在するかを調べる。 | ||
+ | if (Flash:: | ||
+ | // 存在する | ||
+ | } | ||
+ | |||
+ | // 指定したデータをフラッシュから取得する。第2引数はデフォルト値です。 | ||
+ | $value = Flash:: | ||
+ | |||
+ | // フラッシュへデータを保存する。 | ||
+ | Flash:: | ||
+ | |||
+ | // 指定したデータをフラッシュから削除する | ||
+ | Flash:: | ||
+ | |||
+ | // フラッシュをクリアする | ||
+ | Flash:: | ||
+ | </ | ||
+ | |||
+ | === フレームワークが使用するFlashデータ === | ||
+ | |||
+ | 以下のフラッシュ・キーはフレームワークで使用しています。 | ||
+ | |||
+ | ^キー^型^内容^ | ||
+ | |_old_inputs|array|前回の入力データ| | ||
+ | |_old_path|string|前回のURIパス| | ||
+ | |errors|ErrorBag|エラーバッグ| | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Cookieクラス | ||
+ | |||
+ | Cookieクラスはクッキーの設定及び取得を行うシングルトンで、'' | ||
+ | |||
+ | 使用法: ** Cookie:: | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |has(string $key): | ||
+ | |get(string $key, $default = null)|クッキーの取得| | ||
+ | |set(string $key, string $value, int $expires_sec=0): | ||
+ | |forever(string $key, string $value): | ||
+ | |remove(string $key)|クッキーの削除| | ||
+ | |||
+ | 使用例: | ||
+ | <code php> | ||
+ | // 指定したデータがクッキーに存在するかを調べる。 | ||
+ | if (Cookie:: | ||
+ | // 存在する | ||
+ | } | ||
+ | |||
+ | // 指定したデータをクッキーから取得する。第2引数はデフォルト値です。 | ||
+ | $value = Cookie:: | ||
+ | |||
+ | // クッキーへデータを1日間だけ保存する。第3引数は有効期間[秒]です。 | ||
+ | Cookie:: | ||
+ | |||
+ | // クッキーへデータを永続的に保存する。 | ||
+ | Cookie:: | ||
+ | |||
+ | // 指定したデータをクッキーから削除する。 | ||
+ | Cookie:: | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === 設定ファイル === | ||
+ | |||
+ | クッキーには以下の設定ファイルが存在します。 | ||
+ | |||
+ | {{fa> | ||
+ | <code php cookie.setting.php> | ||
+ | <?php | ||
+ | /** | ||
+ | * This file contains cookie settings. | ||
+ | */ | ||
+ | return | ||
+ | [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ]; | ||
+ | </ | ||
+ | |||
+ | * path --- ドメイン上のクッキーが有効なパス(デフォルト値はカレントパス: | ||
+ | * domain --- クッキーが有効なドメイン(デフォルト値はカレントURLのドメイン) | ||
+ | * secure --- TRUEを設定すると、セキュアな接続が存在する場合にのみクッキーを設定します | ||
+ | * httponly --- TRUEを設定すると、HTTPを通してのみクッキーを設定します | ||
+ | * forever --- 永続的クッキーの実際の保存期間を設定します(デフォルト値は365日) | ||
+ | |||
+ | > path から httponly までの設定値の詳細は、PHPマニュアルの[[https:// | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== ボイラープレート ==== | ||
+ | |||
+ | リクエスト取得用のボイラープレートには以下の関数があります。input()からcookie()までは、それぞれのリクエスト変数を取得する関数で、HTMLテンプレートでよく使われるます。inputLabels()はInputクラスからバリデーションの項目名を取得するのに便利な関数です。 | ||
+ | |||
+ | ^ヘルパー関数^機能^ | ||
+ | |input\\ (string $key, $default=null): | ||
+ | |queryString\\ (string $key, $default=null): | ||
+ | |session\\ (string $key, $default=null): | ||
+ | |flash\\ (string $key, $default=null): | ||
+ | |cookie\\ (string $key, $default=null): | ||
+ | |inputLabels\\ (string $message_key): | ||
\\ | \\ | ||
===== レスポンス ===== | ===== レスポンス ===== | ||
- | ==== RenderResponse | + | ==== Responseクラス |
- | >TODO | + | |
+ | Responseクラスはレスポンスのベースクラスで、その目的はHTMLヘッダーとフラッシュデータの管理です。後述の RenderResponse(レンダリング用) と RedirectResponse(リダイレクト用) はResponseクラスから派生します。Responseクラスは以下のメソッドを持ちます。 | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |addHeader($headers): | ||
+ | |hasFlash(string $key): | ||
+ | |addFlash(string $key, $value): | ||
+ | |commit(int $response_code=null)|レスポンスの確定| | ||
\\ | \\ | ||
- | ==== RedirectResponse ==== | + | ==== RenderResponseクラス ==== |
- | >TODO | + | |
+ | RenderResponseクラスはResponseクラスから派生します。HTMLレンダリングを行うレスポンス用のクラスで、以下のメソッドを持ちます。addHeader()などのResponseクラスのメソッドも使用できます。 | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |< | ||
+ | |setHtml(string $html=null): | ||
+ | |commit(int $response_code=null)|レスポンスの確定| | ||
+ | |||
+ | アプリケーションでは、直接RenderResponseクラスを使うのではなく、後述する render() 関数を使用します。 | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== RedirectResponseクラス | ||
+ | |||
+ | RedirectResponseクラスはResponseクラスから派生したリダイレクト用のクラスです。リダイレクトではフラッシュデータを使ってリダイレクト先のページにデータを送ることが多いので、フラッシュ用のメソッドが追加されています。RedirectResponseクラスは以下のメソッドを持ちます。addHeader()などのResponseクラスのメソッドも使用できます。 | ||
+ | |||
+ | ^メソッド^機能^ | ||
+ | |< | ||
+ | |with(string $key, $value): | ||
+ | |withInputs(): | ||
+ | |withErrors(ErrorBag $errorBag): | ||
+ | |withOldErrors(): | ||
+ | |||
+ | 以下は、RedirectResponseクラスで使用するフラッシュデータです。_old_inputs は withInputs()で、errorsは withErrors() と withOldErrors()で使用されます。 | ||
+ | |||
+ | ^キー^型^内容^ | ||
+ | |_old_inputs|array|前回の入力データ| | ||
+ | |_old_path|string|前回のURIパス| | ||
+ | |errors|ErrorBag|エラーバッグ| | ||
+ | |||
+ | アプリケーションでは、直接RedirectResponseクラスを使うのではなく、後述する redirect() 関数を使用します。 | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== ボイラープレート ==== | ||
+ | |||
+ | レスポンス処理用のボイラープレートには以下の関数があります。render()とredirect()はコントローラアクションで、その他はHTMLテンプレートでよく使われる関数です。 | ||
+ | |||
+ | {{tablelayout? | ||
+ | ^ヘルパー関数^機能^ | ||
+ | |render(string $view=null, array $variables=[])\\ : | ||
+ | |redirect(string $url): | ||
+ | |old(string $key, $default = null): | ||
+ | |back(): | ||
+ | |errors(): | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code php> | ||
+ | /** index action */ | ||
+ | public function index() | ||
+ | { | ||
+ | $users = $this-> | ||
+ | return render(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 以下は '' | ||
+ | |||
+ | <code php> | ||
+ | /** update action */ | ||
+ | public function update() | ||
+ | { | ||
+ | // バリデーション結果に応じてリダイレクトする | ||
+ | if ($errorBag) | ||
+ | { | ||
+ | // 失敗した時 | ||
+ | return redirect(back())-> | ||
+ | } | ||
+ | |||
+ | // 成功した時 | ||
+ | return redirect(route(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code php> | ||
+ | <input type=" | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code php> | ||
+ | @if($errors-> | ||
+ | @foreach($errors as $key=> | ||
+ | <div class=" | ||
+ | @endforeach | ||
+ | @endif | ||
+ | </code> | ||
\\ | \\ | ||