我有2个实体,Product和Product_Types.
这是他们之间的关系:
manyToOne:
product:
targetEntity: Product
joinColumn:
name: product_id
referencedColumnName: id
Run Code Online (Sandbox Code Playgroud)
当我添加新产品时,我希望能够使用相同的表单向此产品添加类型.
->add('productColor', 'collection', array("type" => new ProductColorType(), "allow_add" => true, 'prototype' => true))
Run Code Online (Sandbox Code Playgroud)
这就是我嵌入表单的方式.
'data_class'是为ProductType和ProductTypesType设置的,当我添加一个带有类型的新产品时,一切都很好,除了一件事,symfony/doctrine没有设置'product_id'列,所以之间没有任何关系我的产品及其类型.
有没有办法用Symfony 2表单在标签内添加HTML?
我想要:
<label for="myfield"><span class="photo">My label</span></label>
Run Code Online (Sandbox Code Playgroud)
我怎么写呢?这些想法都没有像预期的那样正常运作:
<span class="photo">{{ form_label(form.myfield) }}</span>
Run Code Online (Sandbox Code Playgroud)
要么
{{ form_label(form.myfield, '<span class="photo">'~myfield~'</span>') }}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助,A
我正在使用Sf2的表单构建器构建表单.
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('firstName')
->add('lastName')...
Run Code Online (Sandbox Code Playgroud)
实体有很多字段,我想把它们放在jQuery UI标签中.但在twig模板中,我想使用单个命令
<form action="#" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" value="Save"/>
</form>
Run Code Online (Sandbox Code Playgroud)
什么是最佳解决方案?
编辑**
为了更加坦诚:我有4个字段:firstName,lastName,birthDate,deathDate.我希望前两个字段位于第一个选项卡上,最后两个字段位于第二个选项卡上.我想继续像前面提到的那样渲染表单.
我有一个解决方案来创建我自己的字段,而不是连接到底层对象,它将呈现所需的html标签(h3,div等).
我正在努力扩展FosUserBundle注册表.我需要删除/取消设置用户名字段(因为我使用电子邮件作为用户名).
有没有办法从我扩展的表单中删除字段?
我已将用户的帐户区域拆分为不同的表单,然后在注册表单中,我将这些位一起拉出来,如下所示:
class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', 'email', array(
'label' => '* Email address:'
))
->add('account_personal', 'my_personalinfo_form', array(
'property_path' => 'account'
))
->add('account_contact', 'my_contactinfo_form', array(
'property_path' => 'account'
))
;
}
Run Code Online (Sandbox Code Playgroud)
问题是错误消息account_personal正在冒泡到表单的顶部.例如,如果在个人信息表单中将名字留空,请输入"请输入您的名字"."个人"和"联系"表单在自己的页面上以自己的形式正常工作.
错误消息account_contact很好,并显示在正确的字段旁边.
但是,如果我在->add上面交换两个位(account_contact首先是这样),那么问题就会反转; account_personal现在工作的错误消息在相应的字段旁边显示正常,但现在错误account_contact被冒泡到顶部!
任何建议非常感谢!
-----编辑-----
个人信息表:
class PersonalInfoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', 'text')
->add('first_name', 'text', array(
'required' => true,
'label' => …Run Code Online (Sandbox Code Playgroud) 我有一个包含复选框和"值字段"的表单.值字段可以是任何内容,文本框,复合字段,集合 - 任何东西.
表单可能如下所示,例如:
field_1_label enabled [x]
value [________]
field_2_label enabled [x]
value sub_field_1 [________]
sub_field_2 [________]
field_3_label enabled [x]
value [________]
Run Code Online (Sandbox Code Playgroud)
当"启用"字段包含时true,一切正常.当"enabled"字段包含时false,我想禁用值字段及其子字段的验证.
因此,当取消选中"启用"时,我将有效地忽略该字段.我仍然会在表单中显示它,但我不会存储数据,我当然不希望它经过验证.
有没有人建议我怎么做?具体来说,我在验证系统忽略值字段和任何潜在的子字段时遇到问题.
我创建了一个自定义字段类型,默认情况下为1字段.选择该字段值后,事件侦听器已订阅该字段并被触发.如果该字段的值与我声明的任意值匹配,则假设将另一个字段添加到表单中.
问题是事件被触发,我可以在事件监听器中添加字段之前和之后调试,但是在返回表单时不会呈现新字段.
这是我试图做的简化版本.是的,我确实已将自定义字段类型正确注册为服务.
主表格类型
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('first_name','text')
->add('custom_field','my_custom_fields');
}
Run Code Online (Sandbox Code Playgroud)
然后是自定义类型:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('field_1','entity',array(/*My entity settings*/));
$formModifier = function(FormInterface $form, $campaign) use($options) {
$form->add('field_2', 'entity',array(/*my entity options*/))
->add('Save','submit',array('attr'=>array('class'=>'btn btn-primary')));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($formModifier, $options) {
// this would be your entity
$entity = $event->getData();
//var_dump($entity); exit; // This gets Hit
if(!$entity || !($entity instanceof My\Entity\Class) ){return;}
$formModifier($event->getForm(), $entity);
}
}
);
$builder->get('field_1')->addEventListener(
FormEvents::POST_SUBMIT,
function(FormEvent $event) use ($formModifier, $options) …Run Code Online (Sandbox Code Playgroud) 我有Symfony\Component\Form\FormView对象.如何在没有Twig和框架的情况下渲染它?
具体来说,我想在Concrete5自定义块类型中使用Symfony Form.
我不清楚如何使用带有FOSRestBundle的Symfony表单组件来创建用于创建资源的POST端点.
这是我在POST控制器操作中得到的:
//GuestController.php
public function cpostAction(Request $request)
{
$data = json_decode($request->getContent(), true);
$entity = new Guest();
$form = $this->createForm(GuestType::class, $entity);
$form->submit($data);
if ($form->isValid()) {
$dm = $this->getDoctrine()->getManager();
$dm->persist($entity);
$dm->flush();
return new Response('', Response::HTTP_CREATED);
}
return $form;
}
Run Code Online (Sandbox Code Playgroud)
我所做的是:
application/json向端点发送POST请求(/guests);Guest)的表单实例;json_decode将请求提交给表单($form->submit($data)).我有的问题:
json_decode()将Request内容提交到表单之前,我是否真的需要手动处理内容?使用FosRestBundle可以以某种方式自动化此过程吗?application/x-www-form-urlencoded数据发送到控制器操作并通过以下方式处理:-
$form->handleRequest($request)
if ($form->isValid()) {
...
}
...
Run Code Online (Sandbox Code Playgroud)
我无法完成上述工作,表单实例从未提交过.
ParamConverter直接与验证器一起使用是否有任何优势- 这是一个想法:-
/**
* @ParamConverter("guest", converter="fos_rest.request_body")
*/
public function …Run Code Online (Sandbox Code Playgroud) 这个想法是首先验证是否所有必填字段都不为空。如果提供了所有必需的数据,则验证输入的值是否正确。组序列的通常情况。无论如何,即使所有字段均为空白,当我申请new GroupSequence(["Basic", "Strict"])该validation_groups选项时,该表格仍然有效。如果将validation_groups值设置为["Basic", "Strict"]表单,则可以正确验证但具有所有约束,这不是我想要的。我究竟做错了什么?
这是我的代码:
class MyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add("name", null, [
"constraints" => new NotBlank(["groups" => ["Basic"]])
])
->add("phone", MyPhoneType::class, [
"constraints" => [
new NotBlank(["groups" => ["Basic"]]),
new PhoneNumber(["groups" => ["Strict"])
]
])
->add("email", EmailType::class, [
"constraints" => [
new NotBlank(["groups" => ["Basic"]]),
new Email(["groups" => ["Strict"]]),
],
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
"validation_groups" => new GroupSequence(["Basic", …Run Code Online (Sandbox Code Playgroud) symfony-forms ×10
symfony ×9
concrete5 ×1
forms ×1
nested-forms ×1
php ×1
rest ×1
symfony-2.1 ×1
symfony-2.3 ×1
symfony-2.8 ×1
tabs ×1