我正在尝试为stripe-data使用的字段添加属性createBuilder.
这是我正在使用的代码:
$form = $this->formFactory->createBuilder(FormType::class, [
'action' => $this->router->generate('storeSubscription', ['id' => $store->getId()]),
'method' => 'POST',
])
->add('plan', PremiumType::class, [
'data_class' => PremiumFeaturesEmbeddable::class,
'data' => $store->getPremium(),
]);
if (null === $store->getBranchOf()->getStripeCustomer() || null === $store->getBranchOf()->getStripeCustomer()->getDefaultSource()) {
$form->add('credit_card', CreditCardStripeTokenType::class)
->add('company_data', CompanyType::class, [
'data_class' => Company::class,
'data' => $store->getBranchOf()
]);
// Remove unused data
$form->get('company_data')
->remove('brand')
->remove('primaryEmail')
->remove('description')
->remove('phoneNumber')
->remove('faxNumber')
->remove('save');
// Set data-stripe
$form->get('company_data')
->get('legalName')->setAttributes(['attr' => ['data-stripe', 'name']]);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,此代码的最后一行获取第一个copmany_data表单类型,然后获取该字段legalName:在此我想设置该属性stripe-data="name".
但是这段代码不起作用.
要添加我必须form_widget在Twig中使用的属性:
<div class="form-group">
{{ form_errors(form.company_data.legalName) }}
{{ form_label(form.company_data.legalName) }}
{{ form_widget(form.company_data.legalName, {'attr': {'class': 'form-control input-sm', 'data-stripe': 'name'}}) }}
</div>
Run Code Online (Sandbox Code Playgroud)
这样它就可以正常添加属性和属性.当然,我可以继续在Twig中设置这些属性,但我想在PHP中添加它们,但不明白为什么它不起作用.有人能够解释我如何解决问题吗?谢谢!
我尝试了什么
测试1
// Set data-stripe
$form->get('company_data')
->get('legalName')->setAttributes(['data-stripe', 'name']);
Run Code Online (Sandbox Code Playgroud)
测试2
// Set data-stripe
$form->get('company_data')
->get('legalName')->setAttribute('data-stripe', 'name');
Run Code Online (Sandbox Code Playgroud)
测试3
// Set data-stripe
$form->get('company_data')
->get('legalName')->setAttributes(['attr' => ['data-stripe', 'name']]);
Run Code Online (Sandbox Code Playgroud)
没有人工作.我不知道该怎么做.
如果您需要从任何现有字段添加/修改任何选项,请执行以下操作:
// to keep the current options
$options = $form->get('company_data')->get('legalName')->getConfig()->getOptions();
// add/change the options here
$options['attr']['data-stripe'] = 'name';
// re-define the field options
$form->get('company_data')->add('legalName', TextType::class, $options);
Run Code Online (Sandbox Code Playgroud)
这不会改变字段的顺序,只会改变它们的选项.对条件选项buildForm()和侦听器/ suscriber事件有用.
但是,如果改变方法可能会以其他方式解决.
首先,'add_stripe_name' => null为CreditCardStripeTokenType表单类型添加一个新的默认选项,并将此值传递给'legalName'字段选项定义:
// into CreditCardStripeTokenType::buildForm():
$legalNameOptions = array();
if ($options['add_stripe_name']) {
$legalNameOptions['attr']['data-stripe'] = $options['add_stripe_name'];
}
$builder->add('legalName', TextType::class, $legalNameOptions)
Run Code Online (Sandbox Code Playgroud)
因此'add_stripe_name'选项CreditCardStripeTokenType将是将属性添加到legalName字段的标志:
$builder->add('credit_card', CreditCardStripeTokenType::class, [
'add_stripe_name' => 'name', // <---- \o/
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3903 次 |
| 最近记录: |