标签: symfony-forms

Symfony2数据转换器,获取异常消息

我已经创建了自己的数据转换器,正如专门的食谱中所解释,这是我的逆向转换:

public function reverseTransform($val)
{
    // ...
    // My logic here
    // ...

    // If $val is not valid
    throw new TransformationFailedException(
        'My custom error message'
    );
}
Run Code Online (Sandbox Code Playgroud)

问题是:如何获取"自定义错误消息"?我想将它显示为我的表单字段的错误消息.我怎么做?

谢谢!

data-binding symfony-forms symfony

2
推荐指数
1
解决办法
1634
查看次数

修改控制器内的请求

在Symfony中,很容易在控制器中获取请求:

$request = $this->container->get('request');
Run Code Online (Sandbox Code Playgroud)

现在,我认为这是一个不好的做法...但是可以修改该请求,这意味着,例如在绑定之前修改隐藏表单字段的值:

$requestModifiedWithNewValueForHiddenFormField = $request;
// modify the request
// ....
$this->bind($requestModifiedWithNewValueForHiddenFormField);
Run Code Online (Sandbox Code Playgroud)

我想我应该使用dataTransformer,但在这种情况下,我想对修改请求有你的意见......

symfony-forms symfony

2
推荐指数
1
解决办法
3494
查看次数

如何禁用symfony 2.3中特定按钮的html5验证

我有一个带有三个按钮的表单.一个用于添加对象,一个用于删除,一个用于编辑对象.

我现在想要使用Symfony 2.3中引入的新表单按钮在add-button中禁用html5-validation.这是可能的还是我必须创建一个新的按钮类型?我怎么能这样做?

php validation html5 symfony-forms symfony

2
推荐指数
1
解决办法
3982
查看次数

将参数从实体传递给query_builder

我有一个实体

Product:
  name # string
  country # entity
  categories #entity many-many
Run Code Online (Sandbox Code Playgroud)

我有一个该实体的表格

ProductType:名称类别

现在我需要按国家/地区筛选类别,但我不想在我构建表单时显示国家/地区参数

//...
$entity = new Entity\Product();
$entity->setCountry($this->getUser()->getProfile()->getCountry());
$form = $this->createForm(new Form\ProductType(), $entity);

return array('form' => $form->createView());
Run Code Online (Sandbox Code Playgroud)

我希望在ProductType类中按国家/地区筛选类别,如何实现此目的?

我如何将$ country值传递给查询构建器?

//...
->add('categories', 'entity', array(
  'class' => 'MyBundle:Category',
  'query_builder' => function(EntityRepository $er) {
    return $er->createQueryBulder('c');
  }
)
Run Code Online (Sandbox Code Playgroud)

php forms symfony-forms symfony

2
推荐指数
1
解决办法
2083
查看次数

Symfony2表单 - 访问父表单的数据

如何访问子表单中父表单的数据?

例如,有产品和类别.产品和类别是多对多的.如果我想编辑类别的所有产品.每个产品的可编辑数据取决于类别.

是否可以通过使用Symfony Forms来实现这一目标?

现在我看不到任何可能性,因为产品没有关于当前类别的信息(因为关系是多对多).

forms symfony-forms symfony

2
推荐指数
1
解决办法
1495
查看次数

如何使用Symfony Forms将事件侦听器添加到动态添加的字段

我正在使用事件侦听器来动态修改表单.我想为动态添加的字段添加另一个事件监听器.我不知道如何实现这一目标.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('first_field','choice',array(
        'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
    ));

    $builder->addEventListener(FormEvents::PRE_SET_DATA, array($this, 'preSetData'));
    $builder->get('first_field')->addEventListener(FormEvents::POST_SUBMIT, array($this, 'postSubmit'));
}

public function preSetData(FormEvent $event)
{
    $form = $event->getForm();
    $form->add('second_field','choice',array(
        'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
    ));
    //Some how add an event listener to this field

}

public function postSubmit(FormEvent $event)
{
    $form = $event->getForm()->getParent();
    $form->add('second_field','choice',array(
        'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
    ));
    //Some how add an event listener to this field
}
Run Code Online (Sandbox Code Playgroud)

我只是使用函数$builder中的buildForm函数来添加事件监听器,second_field但因为在最初生成表单时该字段不存在会抛出错误.

如果我尝试通过执行以下操作在第一个事件侦听器中添加新事件侦听器:

$form->get('second_field')->addEventListener(...)
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

Call to undefined method …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony-2.3

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

未定义的方法Symfony\Component\Form\FormBuilder :: createView()

我收到错误:

Call to undefined method Symfony\Component\Form\FormBuilder::createView() 
Run Code Online (Sandbox Code Playgroud)

对于以下代码

public function searchAction(Request $request, $type) {

    $filters = new Filters();

    $form = $this->createFormBuilder($filters)
        ->setAction($this->generateUrl('project_search'))
        ->add('name', 'text');

    if($type == 'extra') {
        $form->add('job', 'text');
    }


    $form->add('send', 'submit', array('label' => "Envoyer"))
        ->getForm();


    return $this->render('Bundle:Controller:search.html.twig', array(
        'form' => $form->createView(),
    ));
}
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我添加了一个新的输入$form->add('job', 'text');.我怎样才能解决这个问题 ?

forms symfony-forms symfony symfony-2.3

2
推荐指数
1
解决办法
4124
查看次数

如何通过使用EntityType表单类型来避免复选框列表中的空值?

我有一个这样的表单字段:

$form->add('tags', EntityType:class, array(
    'class' => Tags::class,
    'multiple' => true,
    'expanded' => true,
    'required' => true,
));
Run Code Online (Sandbox Code Playgroud)

这提供了一个很好的复选框列表,我需要确保在提交表单后至少选择了一个选项,但即使required选项true不起作用,我尝试使用NotBlank()NotNull()约束,也不起作用(即表单)已验证).

如何通过使用EntityType表单类型来避免复选框列表中的空值?

symfony-forms symfony symfony-validator

2
推荐指数
1
解决办法
143
查看次数

为所有Symfony表单类型设置默认值

是否可以为所有Symfony FormType设置默认值?

我们目前正在开发基于Symfony(3.3)的API后端。在前端,我们将实体作为对象,如下所示:{"id": 1, "username": "foo" ..... }

如果我们想更新实体,我们将对象JSON.stringfy并将其发送到服务器。

但是,如果我们通过将请求绑定到我们的实体,$form->submit($request) 则会收到错误消息(“此表单不应包含额外的字段。”),因为我们在FormTypes中没有(也不想使用!)“ id”。

所以我们必须在每个FormType中都设置allow_extra_fieldstrue

public function setDefaultOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(['allow_extra_fields' => true]);
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将其配置为所有FormType的默认值(而无需扩展自定义FormType或类似的东西)?

default symfony-forms symfony

2
推荐指数
1
解决办法
182
查看次数

Symfony4 Forms - 带有两个choice_label的EntityType

我是symfony和symfony形式的新手.

我有一个带有EntityType的表单,如下所示:

->add('customer', EntityType::class, [
    'label' => 'Kunde: ',
    'class' => Customer::class,
    'choice_label' => 'Name',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('c')
            ->select('CONCAT(c.firstname, " ", c.surname) AS Name');
    }
])
Run Code Online (Sandbox Code Playgroud)

但我现在得到一个错误/警告:

Warning: spl_object_hash() expects parameter 1 to be object, string given

在此输入图像描述


客户实体:

/**
 * @ORM\Entity(repositoryClass="App\Repository\CustomerRepository")
 */
class Customer
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
     private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="firstname", type="string", length=50, nullable=false)
     */
    private $firstname;

    /**
     * @var string
     *
     * @ORM\Column(name="surname", type="string", …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony4

2
推荐指数
1
解决办法
2271
查看次数