フォーム作成
webページにはフォームが必要です。ディペンデンシーインジェクションのチャプターをお読みください。
フォームクラス
フォームを作る為にAura\Input\Form
クラスを拡張してinit()
メソッドをオーバーライドする必要があります。
setField
を使ってinput typeを加えます。
サンプルのフォームを作ってみましょう
FormFactory
ステータスがどのように準備されるかをみて フォームに渡されたオプションを読みます
フォームのフィルターのセット
auraフレームワークはAura.Filterパッケージを使ってバリデーションにとサニタイズを行います。
Aura\Input\Form
オブジェクトはAura\Filter\RuleCollection
クラスを拡張したAura\Framework\Input\Filter
オブジェクトのgetFilter()
メソッドを持っています。
違ったタイプのルールのサニタイズやバリデーションを参考にして、独自のルールを作成することができます。
フォーム作成のためのコントローラー拡張
Auraフレームワークはとても基本的なコントローラーを持っています。必要に応じてコントローラーを拡張することができます。
コンフィギュレーション
DIのためにフォームの名前をAura\Input\FormFactory
をマップする必要があります。
FormFactory
に複数のフォームをマップすることができます。
フォームオブジェクト
フォームオブジェクトはExample\Package\Web\PageController
を拡張して作ります。
ユーザー入力のバリデーションとセット
ユーザー入力が有効ならフォームに格納することができます。
最初にfill()
メソッドを使って入力した値をセットします。それからfilter()
メソッドを使って入力が有効かを見ます。
もし有効でないならメッセージを表示し、フィルタールールに渡さないようにします。
CSRFプロテクションの適用
Aura.Inputはクロスサイトリクエストフォージェリ(cross-site request forgery)攻撃を防御するインターフェイスが用意されています。
このインターフェイスを使用するために独自のCSRF実装を用意する必要があります。Aura.Inputは「ユーザーが認証されたどうかを伝えるオブジェクト」または「暗号化されたセキュアなランダム値をもつCSRFトークンの値を生成・保持するオブジェクト」を提供できないからです。
setAntiCsrf()
メソッドを使ってフォームにインスタンスを渡します。
setAntiCsrf()
をコールするとフォームにCSRFフィールドが追加されます。
フォームのfill()
をコールするとデータのCSRF値をチェックして正しいかを確認します。
正しくないときは例外が投げられデータは入力されません。
ビューレイヤー
Aura.Inputパッケージはユーザー入力とその値を取り扱います。フィールドのレンダリングは行いません。
それはビューレイヤーのタスクです。しかしながらAura.Inputはレンダリングを行うビューレイヤーのために”ヒント”を提供します。
フィールドを定義するときに、二番目のパラメーターとして型をsetField()
メソッドで指定することができます。
これはHTMLのインプットタイプでHTMLのタグ名、ビューレイヤーが認識するカスタム名、あるいはその他のものです。
ビューのためのヒントに過ぎない点に注意してください。厳密なものではありません。
属性とオプションをフィールドに加えるためにフルーエントメソッドを使う事もできます。
ビューレイヤーではget()
メソッドを使ってフィールドからヒントを引き出します。
Aura.ViewパッケージはこれらのヒントからHTMLに変換するヘルパーが付属します。
フォームオブジェクトはコントローラーからビューにこのようにアサインされます。
そしてビューからはこのようにしてフォームを表示します。
フォームオプションの通知
アプリケーションが使うインプットは全てのフォームとフィルターに使う標準的なオプションのセットを使用するのはよくある事ですが、これらをフォーム毎に複製するのは不便です。
Aura.Inputはアプリケーション共通のコンテナを使ってこれらのオブジェクトを渡す事ができます。これらのオプションを使ってインプットを組み立てます。
例としてContactForm
任意のオプションをで作成してみましょう。
そしてinit()
メソッドで$states
配列の代わりに$options->getStates()
で得られた値に変更します。
オプションの設定