Apricotのリクエストクラスは、PHPのスーパーグローバル変数を個別にカプセル化したシングルトンです。リクエスト取得用に以下のシングルトンがあります:
これらはシングルトンなので、アプリケーションのどこからでもリクエストを取得することができます。
Inputクラスはフォームの送信データを取得するシングルトンで、methodに従って、$_GETまたは$_POSTから生成されます。Inputクラスは後述のQueryStringクラスは同じく Apricot\Foundation\SimpleInput
クラスをシングルトンにしたものです。
使用法: Input::{メソッド}
メソッド | 機能 |
---|---|
bool has(string $key) | キー指定よる入力データの存在確認 |
string get(string $key, string $default = null) | キー指定よる入力データの取得 |
array all() | 全ての入力データの取得 |
array only(array|mixed $keys) | 必要入力データのみの取得 |
array except(array|mixed $keys) | 不要なものを除く入力データの取得 |
set(string $key, string $vale) | 入力データの設定 |
remove(string $key) | 入力データの削除 |
all()
は、フォームからの全ての入力値を取得するメソッドです。
$inputs = Input::all(); $account = $inputs['account']; $password = $inputs['password'];
以下は、上の例と同じ結果になります。get()
は第2引数にデフォルト値を指定できます。
$account = Input::get('account',null); $password = Input::get('password',null);
only()
は、指定したキーだけの入力値を取得する場合に使用します。
$inputs = Input::only('account','password');
except()
は指定したキー以外の入力値を取得する場合に使用します。
$inputs = Input::except('password_confirmation');
バリデーションなどの後で不要になった入力値は、remove()
で削除して次の処理に進みます。
Input::remove('password_confirmation');
QueryStringクラスはクエリ文字列を取得する為のシングルトンです。このクラスはApricot\Foundation\SimpleInput
クラスをシングルトンにしたもので、$_GETから生成します。
使用法: QueryString::{メソッド}
メソッド | 機能 |
---|---|
bool has(string $key) | キー指定よる入力データの存在確認 |
string get(string $key, string $default = null) | キー指定よる入力データの取得 |
array all() | 全ての入力データの取得 |
array only(array|mixed $keys) | 必要入力データのみの取得 |
array except(array|mixed $keys) | 不要なものを除く入力データの取得 |
set(string $key, string $vale) | 入力データの設定 |
remove(string $key) | 入力データの削除 |
使用例は上のInputシングルトンを同じです。
Sessionクラスはセッション変数を設定及び取得をするシングルトンです。このクラスは Apricot\Foundation\SimpleSession
クラスをシングルトンにしたもので、$_SESSIONから生成します。Sessionシングルトン後述するフラッシュデータを包含しています。
使用法: Session::{メソッド}
メソッド | 機能 |
---|---|
start() | セッションの開始 |
isStarted():bool | セッションが開始されているか否かの判定 |
has(string $key):bool | セッション変数の存在確認 |
get(string $key, $default = null) | セッション変数の取得 |
set(string $key, $value) | セッション変数の設定 |
remove(string $key) | セッション変数の削除 |
clear() | セッション変数のクリア |
destroy() | セッションの破棄 |
flash():SimpleFlash | フラッシュデータの取得 |
使用例:
// 指定したデータがセッションに存在するかを調べる。 if (Session::has('key')) { // 存在する } // 指定したデータをセッションから取得する。第2引数はデフォルト値です。 $value = Session::get('key', 'default'); // セッションへデータを保存する。 Session::set('key', 'value'); // 指定したデータをセッションから削除する Session::remove('key');
start()
メソッドはフレームワークによってアプリケーション初期化時に呼び出されます。
clear()
メソッドは $_SESSIONだけをクリアします。destroy()
メソッドは 内部的にclear() メソッドとPHPのsession_destroy()を呼び出して、現在のセッションに関連づけられたすべてのデータを完全に破棄し、さらに、現在のセッションIDもクッキーから削除します。通常、destroy() メソッドは フレームワークによってログオフ時に呼びされます。
flash()
メソッドは後述のFlashシングルトンで使用されます。通常、フラッシュデータの操作にはFlashシングルトンを使用します。
セッションには以下の設定ファイルが存在します。
/your-project/config/setting
<?php /** * This file contains session settings. */ return [ 'name' => 'SID'.substr(md5(env('APP_SECRET', env('APP_NAME'))),0,16), 'ini' =>[ 'gc_maxlifetime' => null, /* default: 1440[sec] */ 'gc_probability' => null, /* default: 1 */ 'gc_divisor' => null, /* default: 100 */ 'cookie_lifetime' => null, /* default: 0[sec] */ ], ];
フラッシュとは、セッション内で一回限りだけ有効なセッション変数(次の画面の遷移のときまで保存される変数)のことです。Flashクラスはフラッシュ変数の設定及び取得を行うシングルトンで、Apricot\Foundation\SimpleFlash
クラスから作ります。
使用法: Flash::{メソッド}
メソッド | 機能 |
---|---|
has(string $key):bool | フラッシュ変数の存在確認 |
get(string $key, $default = null) | フラッシュ変数の取得 |
set(string $key, $value) | フラッシュ変数の設定 |
remove(string $key) | フラッシュ変数の削除 |
clear() | フラッシュ変数のクリア |
使用例:
// 指定したデータがフラッシュに存在するかを調べる。 if (Flash::has('key')) { // 存在する } // 指定したデータをフラッシュから取得する。第2引数はデフォルト値です。 $value = Flash::get('key', 'default'); // フラッシュへデータを保存する。 Flash::set('key', 'value'); // 指定したデータをフラッシュから削除する Flash::remove('key'); // フラッシュをクリアする Flash::clear();
以下のフラッシュ・キーはフレームワークで使用しています。
キー | 型 | 内容 |
---|---|---|
_old_inputs | array | 前回の入力データ |
_old_path | string | 前回のURIパス |
errors | ErrorBag | エラーバッグ |
Cookieクラスはクッキーの設定及び取得を行うシングルトンで、Apricot\Foundation\SimpleCookie
クラスを使って実装します。
使用法: Cookie::{メソッド}
メソッド | 機能 |
---|---|
has(string $key):bool | クッキーの存在確認 |
get(string $key, $default = null) | クッキーの取得 |
set(string $key, string $value, int $expires_sec=0):bool | クッキーの設定(有効期間付き) |
forever(string $key, string $value):bool | クッキーの設定(永続的) |
remove(string $key) | クッキーの削除 |
使用例:
// 指定したデータがクッキーに存在するかを調べる。 if (Cookie::has('key')) { // 存在する } // 指定したデータをクッキーから取得する。第2引数はデフォルト値です。 $value = Cookie::get('key', 'default'); // クッキーへデータを1日間だけ保存する。第3引数は有効期間[秒]です。 Cookie::set('key', 'value', 24*60*60); // クッキーへデータを永続的に保存する。 Cookie::forever('key', 'value'); // 指定したデータをクッキーから削除する。 Cookie::remove('key');
set()
メソッドの第3引数を省略した場合は、デフォルト値の0が設定されます。この場合はセッションクッキーとなり、セッションが終了すると保存したデータは消えます。forever()
メソッドは永続的にクッキーを保存しますが、その期間は設定ファイル( cookie.setting.php )の forever
によって決まります。
クッキーには以下の設定ファイルが存在します。
/your-project/config/setting
<?php /** * This file contains cookie settings. */ return [ 'path' => '', 'domain' => '', 'secure' => FALSE, 'httponly' => FALSE, 'forever' => 365*24*60*60, ];
path から httponly までの設定値の詳細は、PHPマニュアルのsetcookieを参照して下さい。
リクエスト取得用のボイラープレートには以下の関数があります。input()からcookie()までは、それぞれのリクエスト変数を取得する関数で、HTMLテンプレートでよく使われるます。inputLabels()はInputクラスからバリデーションの項目名を取得するのに便利な関数です。
ヘルパー関数 | 機能 |
---|---|
input (string $key, $default=null):string | フォームデータを取得 |
queryString (string $key, $default=null):string | クエリ文字列を取得 |
session (string $key, $default=null):mixed | セッション変数を取得 |
flash (string $key, $default=null):mixed | フラッシュ変数を取得 |
cookie (string $key, $default=null):string | クッキー変数を取得 |
inputLabels (string $message_key):array | フォームデータのラベル配列を取得します |
Responseクラスはレスポンスのベースクラスで、その目的はHTMLヘッダーとフラッシュデータの管理です。後述の RenderResponse(レンダリング用) と RedirectResponse(リダイレクト用) はResponseクラスから派生します。Responseクラスは以下のメソッドを持ちます。
メソッド | 機能 |
---|---|
addHeader($headers):Response | HTMLヘッダーの追加 |
hasFlash(string $key):bool | フラッシュデータの存在確認 |
addFlash(string $key, $value):Response | フラッシュデータの追加 |
commit(int $response_code=null) | レスポンスの確定 |
RenderResponseクラスはResponseクラスから派生します。HTMLレンダリングを行うレスポンス用のクラスで、以下のメソッドを持ちます。addHeader()などのResponseクラスのメソッドも使用できます。
メソッド | 機能 |
---|---|
__construct(string $html=null) | RenderResponseの生成 |
setHtml(string $html=null):RenderResponse | HTMLテキストの設定 |
commit(int $response_code=null) | レスポンスの確定 |
アプリケーションでは、直接RenderResponseクラスを使うのではなく、後述する render() 関数を使用します。
RedirectResponseクラスはResponseクラスから派生したリダイレクト用のクラスです。リダイレクトではフラッシュデータを使ってリダイレクト先のページにデータを送ることが多いので、フラッシュ用のメソッドが追加されています。RedirectResponseクラスは以下のメソッドを持ちます。addHeader()などのResponseクラスのメソッドも使用できます。
メソッド | 機能 |
---|---|
__construct(string $url) | RedirectResponseの生成 |
with(string $key, $value):RedirectResponse | フラッシュデータの追加 |
withInputs():RedirectResponse | 入力データをフラッシュに追加する |
withErrors(ErrorBag $errorBag):RedirectResponse | エラーバッグをフラッシュに追加する |
withOldErrors():RedirectResponse | 前回のエラーバッグを次のフラッシュに転送する |
以下は、RedirectResponseクラスで使用するフラッシュデータです。_old_inputs は withInputs()で、errorsは withErrors() と withOldErrors()で使用されます。
キー | 型 | 内容 |
---|---|---|
_old_inputs | array | 前回の入力データ |
_old_path | string | 前回のURIパス |
errors | ErrorBag | エラーバッグ |
アプリケーションでは、直接RedirectResponseクラスを使うのではなく、後述する redirect() 関数を使用します。
レスポンス処理用のボイラープレートには以下の関数があります。render()とredirect()はコントローラアクションで、その他はHTMLテンプレートでよく使われる関数です。
ヘルパー関数 | 機能 |
---|---|
render(string $view=null, array $variables=[]) :RenderResponse | RenderResponseの生成 テンプレート名とテンプレート変数を指定します |
redirect(string $url):RedirectResponse | RedirectResponseの生成 リダイレクトURLを指定します |
old(string $key, $default = null):string | キーを指定して前回の入力値を取得します |
back():string | 前回のURIを取得します |
errors():ErrorBag | 前回のエラーバッグを取得します |
render()
は、テンプレート名(string)とテンプレート変数(array)を指定してHTMLをレンダリングしてRenderResponseオブジェクトを返す関数です。テンプレートについては、HTMLテンプレートを参照して下さい。以下の例では、ユーザモデルで全件検索した結果をテンプレート変数としてユーザ一覧を表示しています。
/** index action */ public function index() { $users = $this->user->findAll(); return render("user.index", ["users"=>$users]); }
以下は redirect()
と back()
の典型的な使用例です。フォーム送信を受け取るアクションでは、通常、バリデーションに失敗した場合は、前回の入力値とエラー内容と共に送信元のページに戻ります。以下の例では、redirect() の引数に back() で取得した前回のURIを指定し、RedirectResponse オブジェクトを得た後に、withInputs() と withErrors() メソッドを使って前回の入力値とエラー内容をフラッシュを使用してリダイレクト先に渡しています。
/** update action */ public function update() { // バリデーション結果に応じてリダイレクトする if ($errorBag) { // 失敗した時 return redirect(back())->withInputs()->withErrors($errorBag); } // 成功した時 return redirect(route("user/{$id}/edit")); }
old()
とerrors()
はBladeテンプレートで良く使用される関数です。old() はフラッシュで渡された前回の入力値を取得する関数で、第2引数はデフォルト値です。以下はユーザ名の入力フィールドの例です。このように、データ編集ページの場合、通常は第2引数にはモデルから取得したテンプレート変数を渡します。
<input type="text" name="account" id="account" value="{{old('account',$user->account)}}">
errors()
は、前ページからフラッシュで渡されたエラーバッグを取得する関数です。以下の例では、エラーバッグのcount()メソッドでエラーの数を取得し、エラーがあれば、その内容を出力しています。エラーバッグはIteratorAggregateインターフェースを実装してるのでforeach()などのIteratorを使用した構文が使用できます。
@if($errors->count()) @foreach($errors as $key=>$value) <div class="alert">{{$value}}</div> @endforeach @endif