我有一个多语种电影网站,根据区域设置,我想要一个下拉菜单选择电影类别。
我想在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下?
答案 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