标签: symfony-forms

Symfony2选择形式分裂在树枝上

好的,所以我有一个有两个选项的选择表

$builder->add('type', 'choice', array(
    'label' => 'User type',
    'choices' => array('1' => 'Customer', '2' => 'Supplier'),
    'expanded' => true,
    'multiple' => false,
    'required' => false,
));
Run Code Online (Sandbox Code Playgroud)

我想使用twig在视图中拆分选项来得到这样的东西:

{{ form_widget(form.type/choice_1/) }}
some html stuf
{{ form_widget(form.type/choice_2/) }}
Run Code Online (Sandbox Code Playgroud)

任何sugestions?

forms symfony-forms symfony twig

3
推荐指数
1
解决办法
1万
查看次数

Symfony 1.4形式模板

我正在安装Symfony 1.4,我们需要重新设计以匹配新的公司品牌.新皮肤的要求之一是单选按钮具有以下语法 -

<label><input name="foo" type="radio" value="bar" id="foo_bar"><span></span></label>
Run Code Online (Sandbox Code Playgroud)

但是单选按钮的默认Symfony代码是 -

<input name="foo" type="radio" value="bar" id="foo_bar">
Run Code Online (Sandbox Code Playgroud)

我可以更改模板在哪里添加附加元素以包围输入标记?我通过代码搜索了高低,我似乎无法找到生成此代码的位置.

提前致谢!

symfony1 symfony-1.4 symfony-forms

3
推荐指数
1
解决办法
3132
查看次数

可捕获的致命错误:无法将类的对象转换为字符串

我定义了这个实体:

namespace CategoryBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * @ORM\Entity
 * @ORM\Table(name="category")
 */
class Category {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     * 
     */
    protected $id;

    /**
     *
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    protected $name;

    /**
     *
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $parent;

    /**
     *
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    protected $description;

    /**
     *
     * @ORM\Column(type="integer")
     */
    protected $age_limit;

    /**
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(name="created", type="datetime")
     */
    protected $created;

    /**
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(name="modified", type="datetime")
     */ …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony symfony-2.3

3
推荐指数
1
解决办法
1万
查看次数

Symfony2 形成部分绑定

如果未提交相应的表单输入,我会遇到 symfony2 表单的问题,该表单会通过 null 覆盖我的实体数据。

下面是一个例子:

表格类型:

$builder
    ->add('customerid', 'text')
    ->add('field1', 'text')
    ->add('field2', 'text')
    ...
Run Code Online (Sandbox Code Playgroud)

控制器 :

$customer = new Customer();
$customer->setId('the customerID');
$customerForm = $this->createForm(new CustomerType(), $customer);
if ($request->getMethod() == 'POST') {
    $customerForm->bind($request);
    ...
}
Run Code Online (Sandbox Code Playgroud)

在视图中,我不呈现 customerid 文本字段。仅提交其他字段。

提交表单后,$customerForm->bind($request); 即使没有为其提交空值,也会通过 null 覆盖先前设置的 customerID。

如果未呈现输入字段,有没有办法不覆盖该值?

这里似乎是同样的问题:https : //github.com/symfony/symfony/issues/1341 提交了补丁,但我没有找到有关如何使用它的文档。

谢谢

php forms symfony-forms symfony

3
推荐指数
1
解决办法
2437
查看次数

symfony2使用ajax模拟多个提交按钮

有一个2.3的新功能有多个提交按钮,
但我发送我的表格与ajax

$.post("{{ path('order_ad_banner') }}",
        $('#adOrderForm').serialize() + "&" + $.param({url: "{{ url }}"}),
        function (data) {
            $('#formWindow').html(data);
        }
    );
Run Code Online (Sandbox Code Playgroud)

这是我的按钮:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
       ....
        ->add('step2submit', 'submit', array('validation_groups' => array("order step 2")))
        ->add('step3submit', 'submit')
        ->add('step4submit', 'submit')
    ;
}
Run Code Online (Sandbox Code Playgroud)

如何使用带有ajax的'step2submit'按钮模拟提交?

编辑:找到解决方案 - >在发布之前向表单添加隐藏字段

var input = $("<input>").attr("type", "hidden").attr("name",     'adOrder[step2submit]').val("");
    $('#adOrderForm').append(input);
    $.post("{{ path('order_ad_banner') }}",
            $('#adOrderForm').serialize() + "&" + $.param({url: "{{ url }}"}),
            function (data) {
                $('#formWindow').html(data);
            }
    );
Run Code Online (Sandbox Code Playgroud)

jquery form-submit symfony-forms symfony symfony-2.3

3
推荐指数
1
解决办法
1542
查看次数

来自控制器的CSRF令牌

我有一个控制器发布表格.

public function myPostAction(Request $request)
{
    $form = $this->createForm('my_form', $my_object);
    $form->handleRequest($request);
#...
Run Code Online (Sandbox Code Playgroud)

我可以看到我的CSRF令牌作为参数发布

my_form [_token] => lH38HTm5P0Cv3TOc4-9xi2COx-cZ670mpJ_36gR8ccI

我只需要阅读它

$form->get('_token')
Run Code Online (Sandbox Code Playgroud)

这告诉我

儿童"_token"不存在.

我怎样才能得到这个令牌?

csrf symfony-forms symfony

3
推荐指数
2
解决办法
7942
查看次数

如何从子表单获取 Symfony3 父表单的值?

我有一个带有嵌入表单的父表单。在嵌入(子)表单中,我希望创建一个下拉字段,其中包含从数据库查询的另一个实体的选项。作为查询的一部分,我需要引用父实体,但不确定如何从子表单类访问该父对象。

例如,父级是$subscriber实体。就我而言,父表单实际上不显示与订阅者相关的任何属性,仅允许您添加或删除子实体表单。每个子表单必须具有如上所述的字段,但选择需要限制为订阅者已经与之建立关系的值。

但这就是我的问题所在。如何$subscriber从子窗体中使用的代码访问下面的变量?:

$builder->add('otherEntity', EntityType::class, array(
    'class' => "AppBundle:YetAnotherEntity",
    'label' => "Other Entity",
    'query_builder' => $this->manager->getRepository("AppBundle:OtherEntity")->getOtherEntityBySubscriber($subscriber)
 ));
Run Code Online (Sandbox Code Playgroud)

它又在我的存储库中调用此函数:

public function getOtherEntityBySubscriber($subscriber)
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT o FROM AppBundle:OtherEntity o JOIN n.subscriberOtherEntity so WHERE o.subscriber = :subscriber'
        )
        ->setParameter("subscriber", $subscriber)
        ->getResult();
}
Run Code Online (Sandbox Code Playgroud)

在 jbafford 的建议之后:我尝试了您的第一个选项,但我的问题是我的父表单调用的类型CollectionType::class不是我的自定义类型...因为我计划制作一个可以添加多个子项目的表单。我无法将任何自定义选项传递给CollectionType. 我是否需要扩展CollectionType以创建能够接受额外选项的自己的类型?

我的父表单如下所示:

$builder->add('child', CollectionType::class, array(
  "entry_type" => ChildType::class,
  "allow_add" => true,
  "by_reference" => false,
  "allow_delete" => true)
);
Run Code Online (Sandbox Code Playgroud)

如果我将订阅者添加为上面的选项,我会收到一个错误,基本上说它不是有效的选项。我尝试让我的 ChildType 扩展 CollectionType 但我不认为这是我需要做的,并收到一条错误消息:

表单的视图数据应该是类 AppBundle\Entity\Child …

symfony-forms symfony

3
推荐指数
1
解决办法
9174
查看次数

Symfony 3通过重定向传递对象

我目前正在学习Symfony表格.而我遇到麻烦的代码并没有按照我想要的方式工作.我要做的是让用户向我的默认控制器提交数据,并且该数据是有效的,将其重定向到另一个方法,以便我可以执行诸如将数据提交到数据库之类的操作.

我遇到的问题是将数据传递给另一个命名路径,该数据是一个带有简单名称和日期字段的任务对象.

以下是我编写的一些代码,它只是一种基本形式,作为一种类结构.

TaskType.php

namespace AppBundle\Entity\Forms;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;

use AppBundle\Entity\Forms\Task;

use Symfony\Component\OptionsResolver\OptionsResolver;


class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder
        ->add('task', TextType::class)
        ->add('dueDate', DateType::class, array('label' => 'Register'))
        ->add('save', SubmitType::class)
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => Task::class,
    ));
}
Run Code Online (Sandbox Code Playgroud)

DefaultController.php

...

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use AppBundle\Entity\Forms\TaskType;


use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

...

/**
 * @Route("/", name="homepage")
 */
public …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony-3.2

3
推荐指数
1
解决办法
1793
查看次数

创建没有数据库的Symfony 4表单

我是symfony的新手,想要创建一个简单的联系表单,获取提交的值并将其作为电子邮件发送.我不想在数据库中保存任何内容.

我按照此页面上的文档:https://symfony.com/doc/current/form/without_class.html

我使用上面的代码创建了一个新页面/操作:

/**
 * @Route("/contact", name="page_contact")
 */
public function contact(Request $request)
{
    $defaultData = ['message' => 'Type your message here'];
    $form = $this->createFormBuilder($defaultData)
        ->add('name', TextType::class)
        ->add('email', EmailType::class)
        ->add('message', TextareaType::class)
        ->add('send', SubmitType::class)
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // data is an array with "name", "email", and "message" keys
        $data = $form->getData();
    }

    return $this->render('Shop/contact.html.twig', [
        'form' => $form
    ]);
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

Symfony\Component\Form\Exception\InvalidArgumentException:
Could not load type "Doctrine\DBAL\Types\TextType": class does not implement "Symfony\Component\Form\FormTypeInterface".

  at vendor/symfony/form/FormRegistry.php:89
  at …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony4

3
推荐指数
1
解决办法
1863
查看次数

Symfony 表单 - Choicetype - 错误“数组到字符串转换”

我正在使用 FosUserBundle 运行 Symfony 3.4。我定制了注册表以获得Roles包含的内容:

<?php

    $form->add('roles', ChoiceType::class, array(
        'choices' => array(
            'user' => 'ROLE_USER',
            'admin' => 'ROLE_ADMIN'
        ),
        'label' => 'Role :',
        'expanded' => true,
        'multiple' => true
    ));
Run Code Online (Sandbox Code Playgroud)

然后现在可以通过 2 个新复选框在注册表中选择角色......但我想用<select>标签显示它。当我将expanded选项设置false为选择时,但如果我将multiple选项设置为 FALSE,则会出现错误:

数组到字符串的转换

有什么想法可以解决我的问题吗?

编辑:下面是堆栈跟踪:

Symfony\Component\Debug\Exception\ContextErrorException:
Notice: Array to string conversion

  at vendor\symfony\symfony\src\Symfony\Component\Form\ChoiceList\ArrayChoiceList.php:73
  at Symfony\Component\Form\ChoiceList\ArrayChoiceList->Symfony\Component\Form\ChoiceList\{closure}(array('ROLE_USER'))
  at call_user_func(object(Closure), array('ROLE_USER'))
     (vendor\symfony\symfony\src\Symfony\Component\Form\ChoiceList\ArrayChoiceList.php:158)
  at Symfony\Component\Form\ChoiceList\ArrayChoiceList->getValuesForChoices(array(array('ROLE_USER')))
     (vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataTransformer\ChoiceToValueTransformer.php:32)
  at Symfony\Component\Form\Extension\Core\DataTransformer\ChoiceToValueTransformer->transform(array('ROLE_USER'))
     (vendor\symfony\symfony\src\Symfony\Component\Form\Form.php:1104)
  at Symfony\Component\Form\Form->normToView(array('ROLE_USER'))
     (vendor\symfony\symfony\src\Symfony\Component\Form\Form.php:350)
  at Symfony\Component\Form\Form->setData(array('ROLE_USER'))
     (vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper.php:49)
  at Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper->mapDataToForms(object(User), object(RecursiveIteratorIterator))
     (vendor\symfony\symfony\src\Symfony\Component\Form\Form.php:383)
  at Symfony\Component\Form\Form->setData(object(User))
     (vendor\friendsofsymfony\user-bundle\Controller\RegistrationController.php:70) …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony-3.4

3
推荐指数
2
解决办法
3951
查看次数