Symfony2:从yaml文件中填充选择列表

时间:2012-03-05 08:44:07

标签: forms symfony yaml

我有一个多语种电影网站,根据区域设置,我想要一个下拉菜单选择电影类别。

我想在yaml文件(categories.yml)中管理我的类别,就像这样

category:
  {en: Movies,de: Filme }
  {en: Series,de: Serien }
  {en: Cartoons,de: Zeichentrick }

该类别是Movie实体/表

中的整数字段

所以我需要像这样生成一个选择下拉列表

<select>
  <option value="1">Movies</option>
  <option value="2">Series</option>
  <option value="3">Cartoons</option>
</select>
右侧语言环境

中的

如何从yaml文件生成表单项?对于干净的文件管理,应该放在哪里?在资源/语言下?或在app / config下?

2 个答案:

答案 0 :(得分:2)

您可以实施选择列表。

首先,更新您的表单类,以便您的字段使用您将在下一步创建的新类实现choice_list

<?php

namespace Acme\DemoBundle\Form;

$builder
    ->add('myChoiceField', 'choice', array(
        'choice_list' => new \Acme\DemoBundle\Form\ChoiceList\DemoChoice(),
    ))
;

接下来,实施\Acme\DemoBundle\Form\ChoiceList\DemoChoice

<?php

namespace Acme\DemoBundle\Form\ChoiceList;

use Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList,
    Symfony\Component\Form\Extension\Core\ChoiceList\LazyChoiceList,
    Symfony\Component\Yaml\Parser;

class DemoChoice extends LazyChoiceList
{

    public function loadChoiceList ()
    {
        // read the Yaml file, $data will be an array
        $yaml = new Parser();
        $data = $yaml->parse(file_get_contents(__DIR__ . '/../Resources/config/data.yml'));

        // the keys of the array will be used as the option value
        // the values of the array will be used as the option text
        // ie: <option value="option-1">First Option</option>
        $choices = array(
            'option-1' => 'First Option',
            'option-2' => 'Second Option',
        );

        return new SimpleChoiceList($choices);
    }

}

答案 1 :(得分:0)

您最好每个区域设置使用一个yml文件,就像翻译文件一样。 例如,在messages.en.yml中:

category:
    movies: Movies
    series: Series
    cartoons: Cartoons