标签: symfony-forms

访问 PHP 数组对象受保护的属性

我正在尝试在 Symfony2 中上传多个文件。我正在尝试访问以下请求对象,但无法获取参数属性。如何将文件一一上传。

我得到的错误:

致命错误:无法访问第 66 行 /var/www/File/src/Webmuch/FileBundle/Entity/File.php 中受保护的属性 Symfony\Component\HttpFoundation\FileBag::$parameters

请求对象:

Symfony\Component\HttpFoundation\FileBag Object
(
    [parameters:protected] => Array
        (
            [file] => Array
                (
                    [0] => Symfony\Component\HttpFoundation\File\UploadedFile Object
                        (
                            [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
                            [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => FLB1.jpg
                            [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
                            [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 13584
                            [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
                            [pathName:SplFileInfo:private] => /tmp/phpzdaQgW
                            [fileName:SplFileInfo:private] => phpzdaQgW
                        )

                    [1] => Symfony\Component\HttpFoundation\File\UploadedFile Object
                        (
                            [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
                            [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => FLB2.gif
                            [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/gif
                            [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 5193
                            [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
                            [pathName:SplFileInfo:private] => /tmp/phpNUXho7
                            [fileName:SplFileInfo:private] => phpNUXho7
                        )

                )

        )

)
Run Code Online (Sandbox Code Playgroud)

请帮我弄清楚这个对象的访问。另外如果有人有更好的方法在 Symfony2 中上传文件。

php symfony-forms symfony

5
推荐指数
1
解决办法
8608
查看次数

Symfony Form / FormBuilder:如何向多个表单字段添加选项或属性

我想向大多数字段添加样式表类属性,但不是全部。

公共函数 buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('name_short', null, ['attr' => ['class' => 'rtl']] )
        ->添加('name_long')
        ->添加('个人资料教育')
        ->添加('个人资料工作')
        ->添加('个人资料政治')
        ->添加('推特')
        ->添加('脸书')
        ->添加('网站')
    ;
}

['attr' => ['class' => 'rtl']]有没有比向每个字段添加属性更简单的方法?寻找类似循环字段并在将字段添加到构建器后设置属性的内容。

感谢您的指点。

symfony-forms symfony

5
推荐指数
1
解决办法
2963
查看次数

单元测试自定义 Symfony 表单类型

我想对自定义的验证进行单元测试FormTypeInterface

我有一个自定义表单类型设置如下:

class HiddenFieldType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'text', [
            'constraints' => [
                new NotBlank([
                    'message' => 'hiddenfield-invalid'
                ])
            ]
        ]);
    }

    public function getName()
    {
        return 'hiddenfield';
    }
}
Run Code Online (Sandbox Code Playgroud)

我想通过实例化表单对象来测试约束是否成立。从Symfony 文档中,我想出了这个:

public function testValidation()
{
    $formData = [
        'name' => null // blank value
    ];

    $hiddenFieldType = new HiddenFieldType();
    $form = $this->factory->create($hiddenFieldType);

    // submit the data to the form directly
    $form->submit($formData);

    var_dump($form->isValid()); die;
}

// factory is set …
Run Code Online (Sandbox Code Playgroud)

php unit-testing symfony-forms symfony

5
推荐指数
0
解决办法
857
查看次数

Symfony3 + Select2 AJAX - 禁用选项验证

我有一个带有 ChoiceType 字段的 Symfony3 表单。它使用带有 AJAX 数据源的 Select2。这一点工作正常。然而,当表单被提交时,Symfony 验证开始并抱怨:

This value is not valid  
Run Code Online (Sandbox Code Playgroud)

我想这是因为通过 AJAX 选择的选择不存在于表单类型的“选择”键中。

我对 Symfony 比较陌生。有人可以指出我正确的方向以禁用现场验证吗?

validation symfony-forms symfony select2

5
推荐指数
1
解决办法
2917
查看次数

Symfony Form 将变量选项从 Collection 传递到 FormType

我有一个集合类型:

->add('tipi', CollectionType::class, array(
                'entry_type' => TipiType::class,
                'allow_add' => true,
                'prototype' => true,
                'mapped' => false,
                'entry_options' => array(
                    'required' => true,
                    'label' => false,
                )
            ))
Run Code Online (Sandbox Code Playgroud)

扩展此表单类型:

->add('tipi', EntityType::class, array(
      'label' => 'Tipo',
      'class' => 'AppBundle:Tipi',
      'attr' => array('class' => 'form-control'),
      'query_builder' => function (EntityRepository $er) {
          return $er->createQueryBuilder('t')
                    ->innerJoin('t.requests', 'r')
          ;
      },
  ));
Run Code Online (Sandbox Code Playgroud)

在第一种表单类型中,我有一个从控制器发送的选项,如下所示:

$idRequest = $request->get('id');
$form = $this->createForm(RequestsType::class, $requests, array(
    'id_request' => $idRequest
));
Run Code Online (Sandbox Code Playgroud)

在第一个中我可以使用它,但在子 FormType 中则不能。我会在集合类型中传递这个变量。我怎样才能做到这一点?

$form = $this->createForm(new YourForm($options), $class);
Run Code Online (Sandbox Code Playgroud)

php forms symfony-forms symfony

5
推荐指数
0
解决办法
1384
查看次数

Symfony pre_submit 更改字段顺序

鉴于以下表单类型,我如何在提交之前呈现我的第二个字段?我试过了,$form->remove但我总是会收到这个错误:

Warning: Illegal offset type in isset or empty
Run Code Online (Sandbox Code Playgroud)

不太确定如何解决这个问题。

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('survey', EntityType::class, [
            'class' => SurveyManager::class,
            'attr' => [
                'class' => 'field-change',
            ],
        ])
        ->add('submit', SubmitType::class, [

        ])
        ->addEventListener(
            FormEvents::PRE_SUBMIT,
            function (FormEvent $event) {
                $form = $event->getForm();

                $data = $event->getData();
                $modifier = $data['survey'];
                $form->add('headquarter', EntityType::class, [
                    'class' => HeadQuarterManager::class,
                    'query_builder' => function (HeadQuarterManagerRepository $er) use ($modifier) {
                        return $er->getHeadquarter($modifier);
                    }, …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

5
推荐指数
1
解决办法
654
查看次数

Symfony3在类型文件中创建没有实体的表单

我在我的控制器中创建了一个表单,如下所示:

$data = array ();
$formBuilder = $this->createFormBuilder ( $data );
$formBuilder->add( 'Field1', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    ),
            ) )
            ->add ( 'Field2', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    )
...);
$form = $formBuilder->getForm ();
Run Code Online (Sandbox Code Playgroud)

我试图将我的表单创建放在一个类型文件中。我是这样做的,但没有创建表单,我无法在视图中显示表单字段。我不明白为什么。

#in ControlController
$data = array ();
$formBuilder= $this->createFormBuilder(ControlType::class, $data);
$form = $formBuilder->getForm ();

#in ControlType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add( 'Field1', NumberType::class, array(
                    'constraints' => array(
                            new NotBlank(),
                    ),
            ) )
            ->add ( 'Field2', NumberType::class, array(
                    'constraints' …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

5
推荐指数
1
解决办法
6252
查看次数

使用自定义验证约束检查数据库中是否存在条目

所以在我的 Symfony 应用程序中,我有一个名为Post.

我的帖子实体具有以下属性: post_startpost_end等等。

实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="post")
 */
class Post
{

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

    /**
     * @var DateType
     * @ORM\Column(type="date")
     */
    private $post_start;

    /**
     * @var DateType
     * @ORM\Column(type="date")
     * @Assert\GreaterThanOrEqual(propertyPath="post_start")
     */
    private $post_end;

.....
}
Run Code Online (Sandbox Code Playgroud)

形式:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add(
            'post_start',
            DateType::class,
            [
                'widget' => 'single_text',
                'format' => 'dd.MM.yyyy',
                'required' => true,
                'attr' => [
                    'class' …
Run Code Online (Sandbox Code Playgroud)

php validation symfony-forms symfony

5
推荐指数
1
解决办法
2214
查看次数

Symfony UniqueEntity 在更新现有实体时显示错误

我有一个相当简单的实体UniqueEntity验证:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping\ManyToOne;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity("email", message="Email already in use")
 * 
 *
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=180, unique=true)
     */
    private $email;
Run Code Online (Sandbox Code Playgroud)

表单(故意删除所有其他表单字段)

namespace App\Form;

use App\Entity\Company;
use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony doctrine-orm symfony-validator

5
推荐指数
1
解决办法
1025
查看次数

多文件验证:“此值应为字符串类型”

我正在尝试在文件上传表单(表单扩展的验证)上使用 Symfony 验证器,但收到此错误消息:

messageTemplate: "这个值应该是字符串类型。" 来自 Symfony\Component\Validator\ConstraintViolation

上传在没有验证器的情况下运行良好,我无法弄清楚此消息的来源。

这是我的 FormType,以文档为例进行了基本验证:

    {
        $builder
            ->add('file', FileType::class, [
                'label' => 'Choisir un fichier',
                'mapped' => false,
                'multiple' => true,
                'constraints' => [
                    new File([
                        'maxSize' => '1024k',
                        'mimeTypes' => [
                            'application/pdf',
                            'application/x-pdf',
                        ],
                        'mimeTypesMessage' => 'Please upload a valid PDF document',
                    ])
                ],
            ])
        ;
    }
Run Code Online (Sandbox Code Playgroud)

如果我删除maxSize,mimeTypes和/或mimeTypesMessage参数,我仍然有同样的问题。

我不能在实体上使用注释(映射选项设置为false)。

validation file-upload symfony-forms symfony symfony4

5
推荐指数
1
解决办法
520
查看次数