我如何在树枝模板中显示 ChoiceType 键
How do i display a ChoiceType key in a twig template
假设我正在使用 symfony 表单生成器构建以下表单:
$builder->add('version', ChoiceType::class, [
'choices' => [
'Wheezy' => 7,
'Jessie' => 8,
'Stretch' => 9
]
])
稍后我需要从树枝模板访问它,例如显示 table:
...
<td>{{ entity.version }}</td>
<td>{{ entity.foo }}</td>
<td>{{ entity.bar }}</td>
...
如果我这样做,我最终得到的版本等于 7、8 或 9 ,并且我不想执行以下操作,这显然会破坏它的目的:
$builder->add('version', ChoiceType::class, [
'choices' => [
'Wheezy' => "Wheezy",
'Jessie' => "Jessie",
'Stretch' => "Stretch"
]
])
如何在不将其映射到我的模板中的情况下执行此操作?我也真的很想避免做一个完整的实体,对于这么少的条目来说太过分了。我很确定或者至少我希望 symfony 已经捆绑了一些东西来处理这种情况,谢谢。
您要么需要这样做,但它会在您的数据库中使用更多 space:
$builder->add('version', ChoiceType::class, [
'choices' => [
'Wheezy' => "Wheezy",
'Jessie' => "Jessie",
'Stretch' => "Stretch"
]
]);
或者在你的实体中处理,例如:
class Entity {
const VERSIONS = [
'Wheezy' => 7,
'Jessie' => 8,
'Stretch' => 9
];
// code
public function getVersion($string = false) {
if ($string && \in_array($this->version, self::VERSIONS))
return \array_search($this->version, self::VERSIONS);
return $this->version;
}
}
在您的表单生成器中,您只需将选项设置为版本的实体列表。
$builder->add('version', ChoiceType::class, [
'choices' => Entity::VERSIONS
]);
最后在模板中将 getter $string 值设置为 true
...
<td>{{ entity.version(true) }}</td>
<td>{{ entity.foo }}</td>
<td>{{ entity.bar }}</td>
...
默认情况下,getter getVersion 的行为将照常进行,如果将 $string 布尔参数设置为 true,它会将值呈现为字符串
编辑:
您没有添加任何有关 PHP 版本的信息,因此我假设您至少使用 7.0 版,因此使用 return 类型声明。另请注意,您至少需要 PHP 5.6 才能将数组用作常量值。
假设我正在使用 symfony 表单生成器构建以下表单:
$builder->add('version', ChoiceType::class, [
'choices' => [
'Wheezy' => 7,
'Jessie' => 8,
'Stretch' => 9
]
])
稍后我需要从树枝模板访问它,例如显示 table:
...
<td>{{ entity.version }}</td>
<td>{{ entity.foo }}</td>
<td>{{ entity.bar }}</td>
...
如果我这样做,我最终得到的版本等于 7、8 或 9 ,并且我不想执行以下操作,这显然会破坏它的目的:
$builder->add('version', ChoiceType::class, [
'choices' => [
'Wheezy' => "Wheezy",
'Jessie' => "Jessie",
'Stretch' => "Stretch"
]
])
如何在不将其映射到我的模板中的情况下执行此操作?我也真的很想避免做一个完整的实体,对于这么少的条目来说太过分了。我很确定或者至少我希望 symfony 已经捆绑了一些东西来处理这种情况,谢谢。
您要么需要这样做,但它会在您的数据库中使用更多 space:
$builder->add('version', ChoiceType::class, [
'choices' => [
'Wheezy' => "Wheezy",
'Jessie' => "Jessie",
'Stretch' => "Stretch"
]
]);
或者在你的实体中处理,例如:
class Entity {
const VERSIONS = [
'Wheezy' => 7,
'Jessie' => 8,
'Stretch' => 9
];
// code
public function getVersion($string = false) {
if ($string && \in_array($this->version, self::VERSIONS))
return \array_search($this->version, self::VERSIONS);
return $this->version;
}
}
在您的表单生成器中,您只需将选项设置为版本的实体列表。
$builder->add('version', ChoiceType::class, [
'choices' => Entity::VERSIONS
]);
最后在模板中将 getter $string 值设置为 true
...
<td>{{ entity.version(true) }}</td>
<td>{{ entity.foo }}</td>
<td>{{ entity.bar }}</td>
...
默认情况下,getter getVersion 的行为将照常进行,如果将 $string 布尔参数设置为 true,它会将值呈现为字符串
编辑: 您没有添加任何有关 PHP 版本的信息,因此我假设您至少使用 7.0 版,因此使用 return 类型声明。另请注意,您至少需要 PHP 5.6 才能将数组用作常量值。