symfony2服务数组参数。如何根据关键获得价值

时间:2014-03-31 12:28:27

标签: php symfony service

我正在创建新的发票表单,其中包括带有一些常量值的选择输入。 我是通过服务来实现的:

services.yml

parameters:
    stawki_vat:
        0: 0%
        5: 5%
        8: 8%
        23: 23%
        zw: zw.
services:
    acme.form.type.stawki_vat:
        class: Acme\FakturyBundle\Form\Type\StawkiVatType
        arguments:
            - "%stawki_vat%"
        tags:
            - { name: form.type, alias: stawki_vat }

StawkiVatType.php

class StawkiVatType extends AbstractType
{
    private $stawkiVatChoices;

    public function __construct(array $stawkiVatChoices) {
        $this->stawkiVatChoices = $stawkiVatChoices;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'choices' => $this->stawkiVatChoices,
        ));
    }

    public function getParent()
    {
        return 'choice';
    }

    public function getName()
    {
        return 'stawki_vat';
    }
}

TowarType.php

class TowarType extends AbstractType
{
    /**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('nazwa_towar', null, array('label' => 'Nazwa towaru/usługi'))
        ->add('cena_netto', null, array(
            'label' => 'Cena netto'
        ))
        ->add('vat', 'stawki_vat', array(
            'attr' => array('class' => 'styled'),
            'label' => 'Stawka VAT',
        ))
    ;
}

在形式上,一切都很完美。 但是现在,我希望得到一个存储在数据库中的值(stawki_vat的键)并显示一个stawki_vat数组的值。

如何以简单的方式实现这一目标?

1 个答案:

答案 0 :(得分:0)

您需要将实体管理器传递给自定义表单类型服务。假设您正在使用Doctrine:

<强> services.yml

services:
    acme.form.type.stawki_vat:
        class: Acme\FakturyBundle\Form\Type\StawkiVatType
        arguments: ["@doctrine.orm.entity_manager","%stawki_vat%"]

<强> StawkiVatType.php

class StawkiVatType extends AbstractType
{
private $stawkiVatChoices;
private $em;

public function __construct(EntityManager $em, array $stawkiVatChoices) {
    $this->em = $em;
    $this->stawkiVatChoices = $stawkiVatChoices;
}

// ...