LoginSignup
0
0

More than 5 years have passed since last update.

BEAR.Sunday 学習記録(6) Formその1

Posted at

ようやくフォームやテンプレートのあたりに入ってきました。そこで、「BEAR.Sundayでコンタクトフォームを作ってみる」を真似て Aura/Input/Form を使ってフォームを表示してみようとしました。

これが例によってまた大ハマリ。リソースの onGet() でちょっと特殊なことをやっていたせいなのですが。

Aura.Input をインターセプトするために、BEAR.Package には AuraFormTrait という便利な Trait が用意されていて、これを使うと Aura.Input 用の invoke() を書かなくて済みます。

AuraFormTrait::invoke() のおおまかな処理を説明しますと、

  • GET の場合は、入力フォームを表示するためonGet()を呼びます。
  • POST の場合はバリデーションを行い($this->form->filter())、通れば元の ResourceObject の onPut/onPost/onDelete などの処理を続行します($invocation->proceed())。DBなどに保存する処理が続くでしょう。
  • バリデーションを通らなければ、エラーメッセージをセットして、onGet()を呼びます。もう一回見直して入力しろ、と入力フォームを表示するわけですね。

んで何が問題だったかというと、invoke() 内で onGet() を呼ぶときに、引数なしで呼ぶので、期待していた ResourceObject::onGet()の引数が null になってしまいました。

フォームを表示するときに引数を渡すこともそんなに無いかもしれませんが、例えば「カテゴリ:動物」内に記事を作る、ってときに category_id=3 なんてのを渡したり、ページAの子ページを作るときに、parent_id=56 なんてのを渡したりすることがありますが、こういったパラメタが渡せなくなってしまいます。

あれ、でもこれ、今まで POST(新規投稿)で考えていたけど、更新や削除の時に渡す Primary Key な $id も無くなっちゃう? 何か作り方を間違えているような気もしますね ^ ^;; そのような場合は AuraFormTrait を使わずに自前で処理を書くべきなのかな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0