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