以 Symfony 2.6 形式更改选项的字符串表示
Changing string representation of choices in a Symfony 2.6 form
我正在构建一个表单类型,它使用表单字段订阅者来呈现一些表单字段。
订阅者 returns 表单选项给定字段。其中一个选项是 "choices":
$formOptions = [
...
'choices' => $choices,
];
$choices
是实体。
因此,它们将通过对象的__toString()
呈现在表单中。
__toString()
方法类似于:
public function __toString()
{
return $this->getName();
}
但是,我希望 "choices" 表示为 $name . $id
(名称与对象 ID 连接)。
同时,我不想修改对象的__toString()
方法,因为我只希望在这个表单字段中使用不同的字符串表示形式,而不是在整个系统中。
我有哪些选项?
我是否可以对 Symofny 表单字段显示已通过选项的方式进行精细控制?
从 Symfony 2.7 开始,您可以使用带有回调的 choice_label
选项来动态创建您选择的标签:
$builder->add('name', 'choice', array(
'choices' => ...,
'choice_label' => function ($choice) {
return $choice->name.$choice->id;
},
));
此示例假定您的选择是具有 public $id
和 $name
属性的对象。
你可以试试这样的东西吗? :
$formChoices = [];
foreach ($choices as $key => $entity) {
$formChoices[$entity->getId()] = sprintf('%s %s', $entity->getName(), $entity->getId());
}
$formOptions = [
...
'choices' => $formChoices,
];
可以根据entity field documentation 2.6
使用属性选项
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'property' => 'customToString',
));
只需确保 属性 名称与方法名称匹配
/**
* @return string
* Here you print the attributes you need
*/
public function customToString()
{
return sprintf(
'%s,
$this->$name . $this->$id,
);
}
我正在构建一个表单类型,它使用表单字段订阅者来呈现一些表单字段。
订阅者 returns 表单选项给定字段。其中一个选项是 "choices":
$formOptions = [
...
'choices' => $choices,
];
$choices
是实体。
因此,它们将通过对象的__toString()
呈现在表单中。
__toString()
方法类似于:
public function __toString()
{
return $this->getName();
}
但是,我希望 "choices" 表示为 $name . $id
(名称与对象 ID 连接)。
同时,我不想修改对象的__toString()
方法,因为我只希望在这个表单字段中使用不同的字符串表示形式,而不是在整个系统中。
我有哪些选项?
我是否可以对 Symofny 表单字段显示已通过选项的方式进行精细控制?
从 Symfony 2.7 开始,您可以使用带有回调的 choice_label
选项来动态创建您选择的标签:
$builder->add('name', 'choice', array(
'choices' => ...,
'choice_label' => function ($choice) {
return $choice->name.$choice->id;
},
));
此示例假定您的选择是具有 public $id
和 $name
属性的对象。
你可以试试这样的东西吗? :
$formChoices = [];
foreach ($choices as $key => $entity) {
$formChoices[$entity->getId()] = sprintf('%s %s', $entity->getName(), $entity->getId());
}
$formOptions = [
...
'choices' => $formChoices,
];
可以根据entity field documentation 2.6
使用属性选项$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'property' => 'customToString',
));
只需确保 属性 名称与方法名称匹配
/**
* @return string
* Here you print the attributes you need
*/
public function customToString()
{
return sprintf(
'%s,
$this->$name . $this->$id,
);
}