Symfony2: заполнение списка выбора из файла yaml - PullRequest
4 голосов
/ 05 марта 2012

У меня есть многоязычный сайт с фильмами, и в зависимости от локали я хочу, чтобы в раскрывающемся списке была выбрана категория фильма.

я хочу управлять своими категориями в файле yaml (category.yml), например,

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

категория является целочисленным полем, в Movie Entity / Table

, поэтому мне нужно сгенерировать выпадающий список, подобный этому

<select>
  <option value="1">Movies</option>
  <option value="2">Series</option>
  <option value="3">Cartoons</option>
</select>

конечно в правильном тексте локали

как мне сгенерировать элемент формы из файла yaml? а для чистого управления файлами куда его надо ставить? под ресурсы / языки? или в app / config?

Ответы [ 2 ]

2 голосов
/ 08 августа 2013

Вы можете реализовать список выбора.

Сначала обновите свой класс формы, чтобы ваше поле реализовало 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);
    }

}
0 голосов
/ 05 марта 2012

Лучше использовать один файл yml для каждой локали, так же, как файлы перевода.Например, в messages.en.yml:

category:
    movies: Movies
    series: Series
    cartoons: Cartoons
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...