Symfony2 Choice Fieldの使い方
Symfony2を本格的に覚え始めました。フレームワークを覚えるのにまず行うのがフォーム項目それぞれの使い方です。Choice, Multiple Choice, Radiobox, File, text, textarea, date/datetimeなどの基本フォーム項目の表示方法、validationを覚えればフレームワークも3割は使えたも同然です。
今回はchoiceからまとめていきます。
Post Entity:
class Post { /** * @var category $category * @ORM\Column(name="category", type="string", length="255") */ private $category; public static function getCategories() { return array('cat1'=>'カテゴリー1', 'cat2'=>'カテゴリー2'); } }
PostType:
use Bunble\Name\Entity\Post; class PostType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder ->add('category', 'choice', array( 'choices'=>Post::getCategories(), 'empty_value' => 'Choose your gender' ) ); } }
choicesの項目にPostクラスのgetCategoriesを投げてあげましょう。
empty_valueの設定は色々と問題もあったようで。
https://github.com/symfony/symfony/pull/1336
TemplateではgetCategories()の配列をどう取得するかがポイントになります。
Twigではvar[ ]として配列を取得します。ControllerからPostのクエリを投げています。
Template(Twig):
{% for entity in entities %} {{ entity.getCategories[entity.category] }} {% endfor %}
ドキュメントにあるcallbackがなぜかうまく動作しませんでした。
validationでなぜか引っかかります。callbackの投げ方が悪かったのかもしれませんが。
http://symfony.com/doc/current/reference/forms/types/choice.html
Form Type一覧:
http://symfony.com/doc/current/reference/forms/types.html
Choice Field Type
http://symfony.com/doc/current/reference/forms/types/choice.html
Text Field Type
http://symfony.com/doc/current/reference/forms/types/text.html
Textarea Field Type
http://symfony.com/doc/current/reference/forms/types/textarea.html
Email Field Type
http://symfony.com/doc/current/reference/forms/types/email.html
URL Field Type
http://symfony.com/doc/current/reference/forms/types/url.html
Datetime Field Type
http://symfony.com/doc/current/reference/forms/types/datetime.html
Checkbox Field Type
http://symfony.com/doc/current/reference/forms/types/checkbox.html
File Field Type
http://symfony.com/doc/current/reference/forms/types/file.html
Radio Field Type
http://symfony.com/doc/current/reference/forms/types/radio.html
Hidden Field Type
http://symfony.com/doc/current/reference/forms/types/hidden.html