具有自定义表单类型的学说实体



我一直在关注文档,以创建文档中给出的自定义表单类型:http://symfony.com/doc/master/cookbook/form/create_custom_field_field_type.html#using-the-the-field-type

从给定的示例中拥有性别,我想" pimp"我的实体,我正在使用新的FormType。

class Person {
    const GENDER_MALE = "m";
    const GENDER_FEMALE = "f";
    private $gender;
    ....
    /* generated getter/setter  */
    .....
    public function getGenderAsText() 
    {
          return $this->getGender() == self::GENDER_MALE?"male":"female";
    }

} 

我的问题,也许有人有一个很好的建议。.如何将Gendertype的优雅结合在一起,哪种handels选择像我的模型一样挑选形式,因此在模板中轻松使用。?

update

Alex指出,如何用自写的性别树枝扩展显示特定字段。

当您特别调用现场扩展时,这就像魅力一样 {{item.gender |性别}}

我有一堆对象,使用对公共字段的继承 - 但是每个类都有许多数据。我已经写了一些逻辑来提取所有属性,将它们交给模板和一个twigextension手柄渲染:

public function dynamicContractFilter($value)
{
    // handle DateTime
    if ($value instanceof DateTime) {
        return $value->format('d.m.Y');
    }
    ....
    } elseif (is_bool($value)) {
        return $value ? 'yes' : 'no';
    } else {
        return $value;  // plain string
    }
}

我无法确定它是简单的字符串/整数还是" gendertypedfield" ..

我猜这是PHP本身的某种限制,因为它是不典型的。

最好的方法是写一个性别树枝扩展。

这样,您可以将m作为Malef显示为Female,不仅在Person实体中。它还提供了您的数据和显示代码之间的明确分离。

喜欢:

namespace AcmeDemoBundleTwig;
class GenderExtension extends Twig_Extension
{
    const
        MALE   = 'Male',
        FEMALE = 'Female';
    public function getFilters()
    {
        return array(
            'gender' => new Twig_Filter_Method($this, 'gender'),
        );
    }
    public function gender($token)
    {
        if ('m' === $token)
            return self::MALE;
        if ('f' === $token)
            return self::FEMALE;
        throw new InvalidArgumentException('Invalid argument, expecting either "m" or "f".');
    }
    public function getName()
    {
        return 'acme_gender_extension';
    }
}

然后,您将在模板中包含:

{{ person.gender | gender }}

相关内容

  • 没有找到相关文章

最新更新