图片。 Symfony 4 中每种域语言的 buildForm 中的文本字段和文本区域
Image. textfield and textarea in buildForm for every domain language in Symfony 4
好的,另一个问题。有点难解释所以提前抱歉。
我有一个名为 SlideContent
的实体,它主要存储 id
、slide
(与名为 SlideshowSlide
的实体的关系)、language
(与名为 Language
的实体的关系)、title
和 content
.
我还有一个名为 Domain
的实体。这也与 Language
有关(因为每个 Domain
都有一种语言)。
每个 User
都可以拥有一个或多个 Domain
他们拥有的权利。如果您拥有 Domain
的权利,您显然拥有 Domain
的 Language
的自动权利。
现在,我需要做的是,为 User
拥有的每个 Language
在 table
中添加一个 tr
。在那个 tr
中,它需要将 Language
中的 base64img
显示为图像,标题的输入字段和内容的文本区域。我更喜欢以 class.
的形式使用它
我尝试了以下方法:
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($options['user']->getDomains() as $domain)
{
$builder->add('titles[' . $domain->getLanguage()->getId() . ']', TextType::class);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'user' => null
));
}
但我收到以下错误:
The name "titles[2]" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
是否可以如我所愿?我知道我可能必须在我的模板中为 base64img
再做一个 foreach 并在 tr
中添加所有内容,但是我怎样才能在索引数组输入字段方面实现我想要的?
原则上你的方法是可以的,但是字段名称只能包含提到的字符(见你的错误信息)。 (一个简单明显的原因是,这种方法可能避免了命名冲突)
为了避免这种情况,但要将其写入结果数据object/array,您可以这样做:
foreach ($options['user']->getDomains() as $domain)
{
$builder->add('titles_' . $domain->getLanguage()->getId(), TextType::class, [
'property_path' => 'titles['.$domain->getLanguage()->getId().']',
]);
}
有关详细信息,请参阅 property_path
option。
本质上如此:使表单字段名称有效,并且仍然获得与其他方式相同的 属性 路径。
如果需要在模板中访问:
form['titles_'~language.id]
(取决于您的表单命名方式和语言变量)
好的,另一个问题。有点难解释所以提前抱歉。
我有一个名为 SlideContent
的实体,它主要存储 id
、slide
(与名为 SlideshowSlide
的实体的关系)、language
(与名为 Language
的实体的关系)、title
和 content
.
我还有一个名为 Domain
的实体。这也与 Language
有关(因为每个 Domain
都有一种语言)。
每个 User
都可以拥有一个或多个 Domain
他们拥有的权利。如果您拥有 Domain
的权利,您显然拥有 Domain
的 Language
的自动权利。
现在,我需要做的是,为 User
拥有的每个 Language
在 table
中添加一个 tr
。在那个 tr
中,它需要将 Language
中的 base64img
显示为图像,标题的输入字段和内容的文本区域。我更喜欢以 class.
我尝试了以下方法:
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($options['user']->getDomains() as $domain)
{
$builder->add('titles[' . $domain->getLanguage()->getId() . ']', TextType::class);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'user' => null
));
}
但我收到以下错误:
The name "titles[2]" contains illegal characters. Names should start with a letter, digit or underscore and only contain letters, digits, numbers, underscores ("_"), hyphens ("-") and colons (":").
是否可以如我所愿?我知道我可能必须在我的模板中为 base64img
再做一个 foreach 并在 tr
中添加所有内容,但是我怎样才能在索引数组输入字段方面实现我想要的?
原则上你的方法是可以的,但是字段名称只能包含提到的字符(见你的错误信息)。 (一个简单明显的原因是,这种方法可能避免了命名冲突)
为了避免这种情况,但要将其写入结果数据object/array,您可以这样做:
foreach ($options['user']->getDomains() as $domain)
{
$builder->add('titles_' . $domain->getLanguage()->getId(), TextType::class, [
'property_path' => 'titles['.$domain->getLanguage()->getId().']',
]);
}
有关详细信息,请参阅 property_path
option。
本质上如此:使表单字段名称有效,并且仍然获得与其他方式相同的 属性 路径。
如果需要在模板中访问:
form['titles_'~language.id]
(取决于您的表单命名方式和语言变量)