我一直在关注文档,以创建文档中给出的自定义表单类型: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
作为Male
和f
显示为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 }}