2

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

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

但是在我的奏鸣曲列表页面中,我想显示一个更好的值“Category 1”,正如我在 parameters.yml 中设置的那样。

问题:

如何在列表中显示“类别 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é'))
    ;
}
4

0 回答 0