Symfonyに挑戦16「Jobeet 10日目」

10日目: フォーム

フォームフレームワークは3つの機能で構成されている

  • バリデーション
    入力チェックをする
  • ウィジェット
    入力フォームを出力する
  • フォーム
    上二つで構成したフォームを出力

Propel フォーム

  • データベースに保存するためのフォーム
  • propel:build-allタスクを起動したときにクラスが自動で生成される
  • schema.ymlで作ったテーブル毎に用意される
  • 生成される場所はjobeet/lib/form/

求人フォームをカスタマイズ

  1. jobeet/apps/frontend/templates/layout.phpの「Post a Job」リンクを変更
  2. jobeet/lib/form/JobeetJobForm.class.phpのconfigure()メソッドを追加し、unset()でフォームにいらない項目を削除
  3. jobeet/lib/form/JobeetJobForm.class.phpにemailのバリデータを追加
  4. jobeet/lib/model/JobeetJobPeer.phpにどこからでも使えるようにpublicで選択リストデータを追加
  5. jobeet/lib/form/JobeetJobForm.class.phpにtype項目を追加し、上の$typeを選択項目に設定。
  6. jobeet/lib/form/JobeetJobForm.class.phpにtypeのバリデータを追加
  7. jobeet/lib/form/JobeetJobForm.class.phpにlogo項目を追加
  8. jobeet/lib/form/JobeetJobForm.class.phpにsetLabels()で各項目のラベル名を設定
  9. jobeet/lib/form/JobeetJobForm.class.phpにlogoのバリデータを追加
  10. jobeet/apps/frontend/modules/job/templates/showSuccess.phpのロゴイメージを変更
  11. jobeet/lib/form/JobeetJobForm.class.phpにヘルプ項目を追加
  12. jobeet/apps/frontend/modules/job/templates/newSuccess.phpを変更
  13. jobeet/apps/frontend/modules/job/templates/_form.phpを変更
  14. jobeet/apps/frontend/modules/job/actions/actions.class.phpのexecuteNew()以下の各メソッドを変更
  15. jobeet/apps/frontend/modules/job/actions/actions.class.phpのexecuteNew()メソッドにタイプ項目のデフォルト値を設定
  16. jobeet/lib/model/JobeetJob.phpのsaveメソッドにtokenを一緒に保存するように変更
  17. jobeet/lib/form/JobeetJobForm.class.phpのunset()にtokenを追加してフォームからtokenを削除
  18. jobeet/apps/frontend/config/routing.ymlのjob項目を変更
  19. jobeet/apps/frontend/modules/job/templates/showSuccess.phpのEditリンクを修正
  20. jobeet/apps/frontend/modules/job/templates/showSuccess.phpの上の方に管理者用のメニューバーを配置
  21. jobeet/apps/frontend/modules/job/templates/_admin.phpを作成しコードをコピペ(管理者用のメニューバーパーシャル)
  22. jobeet/lib/model/JobeetJob.phpに管理用のメソッドを追加
  23. jobeet/apps/frontend/config/routing.ymlのjob項目を変更
  24. jobeet/apps/frontend/modules/job/templates/_admin.phpパーシャルのPublishリンクを修正
  25. jobeet/apps/frontend/modules/job/actions/actions.class.phpにpublishアクションのexecutePublish()メソッドを追加
  26. jobeet/lib/model/JobeetJob.phpにpublishメソッドを追加
  27. jobeet/lib/model/JobeetJobPeer.phpのaddActiveJobsCriteria()メソッドのcriteriaの条件を追加
  28. 試しにPOST A JOBからJobを投稿してみるとちゃんと投稿できた。

【覚書】

  • unset()で表示したくないフォーム項目を削除
  • unset()でフィールドの項目を削除したら、表示される入力フィールドと共にバリデータも削除される。
  • フォームに依存するcssjavascriptを使うことがある場合に備え、フォームパーシャルには下記を常に書いておけばいい。
<?php include_stylesheets_for_form($form) ?>
<?php include_javascripts_for_form($form) ?>