Symfony2 Sonata Admin Bundle - 列出相应自定义值的字段

时间:2015-02-13 17:24:18

标签: php symfony sonata-admin symfony-sonata sonata

我的Sonata CRUD列表页面工作正常,但我想显示实体值和来自我的parameters.yml 的数组之间的对应值:(显示标签而不是显示标签更好键。)

我有一个实体USER,其categoriesType字段的值为'cat_1'。 这是列表中显示的值(所以......很难看)

但是在我的奏鸣曲列表页面中,我希望在我的parameters.yml中设置一个更好的值“Category 1”。

问题:

如何在列表中显示“类别1”而不是“cat_1”? 有没有可能用我的parameters.yml中的那些替换/映射值?

categories:
    cat_1:
        title: Category 1
        template: xxx.html.twig
    cat_2:
        title: Category 2
        template: ggg.html.twig
    cat_3:
        title: 'Category 3
        template: zzz.html.twig

服务:

<service id="etna.form.type.categories" class="Etna\FrameworkBundle\Form\Type\CategoriesType">
    <argument>%categories%</argument>
    <tag name="form.type" alias="categories" />
</service>    

表格类型:

namespace Etna\FrameworkBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class CategoriesType extends AbstractType
{
    /** @var array */
    protected $categories;

    /**
     * @param array $categories
     */
    public function __construct(array $categories)
    {
        $titles = array_map(function($categories) {
           return $categories['title'];
        }, $categories);

        $this->categories = $titles;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'choices' => $this->categories,
        ));
    }

    /**
     * @return null|string|\Symfony\Component\Form\FormTypeInterface
     */
    public function getParent()
    {
        return 'choice';
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'categories';
    }
}


protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('name', 'string', array('label' => 'Nom'))
        ->add('expression', 'string', array('label' => 'Expression'))
        ->add('categoriesType', 'categories', array('label' => 'Nom'))
        ->add('enabled', null, array('label' => 'Activé'))
    ;
}

0 个答案:

没有答案