Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Flag "required" not working on fields of collection #1124

@jazithedev

Description

@jazithedev

Field type, from which system is generating collection form:

<?php
namespace Notimeo\BannersBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type;
use Vich\UploaderBundle\Form\Type\VichFileType;

/**
 * Class BannerType
 */
class BannerType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', Type\TextType::class, ['required' => true]);
        $builder->add('isPublished');
        $builder->add('imageFile', VichFileType::class, ['required' => true]);
        $builder->add('alt', Type\TextType::class, ['required' => true]);
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Notimeo\BannersBundle\Entity\Banner',
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'notimeo_bannersbundle_banners';
    }

    /**
     * @return string
     */
    public function getBlockPrefix()
    {
        return 'notimeo_bannersbundle_banners';
    }
}

And what I receive on browser by clicking add a new item:

capture 45

For the record, I don't have any @Assert\NotBlank() on banner category name. So why it's marked as "required"?

Config

easy_admin:
    entities:
        BannerCategory:
            class: Notimeo\BannersBundle\Entity\BannerCategory
            list:
                fields:
                    - name
            form:
                fields:
                    - name
                    - property: 'banners'
                      label: 'Banners'
                      type: 'collection'
                      type_options:
                          entry_type: 'Notimeo\BannersBundle\Form\Type\BannerType'
                          by_reference: false
                          error_bubbling: false

Model:

<?php

namespace Notimeo\BannersBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Symfony\Component\Validator\Constraints as Assert;
use Notimeo\UserBundle\Entity\User;

/**
 * Category
 *
 * @ORM\Table(name="banners_categories")
 * @ORM\Entity(repositoryClass="Notimeo\BannersBundle\Repository\BannerCategoryRepository")
 * @HasLifecycleCallbacks
 */
class BannerCategory
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    // ...

    /**
     * @Assert\Valid
     * @ORM\OneToMany(
     *     targetEntity="Banner",
     *     mappedBy="category",
     *     cascade={"persist","remove"},
     *     orphanRemoval=true
     * )
     * @var Banner[]
     */
    private $banners;
}
<?php

namespace Notimeo\BannersBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Symfony\Component\Validator\Constraints as Assert;
use Notimeo\UserBundle\Entity\User;

/**
 * Banners main class.
 *
 * @ORM\Table(name="banners")
 * @ORM\Entity(repositoryClass="Notimeo\BannersBundle\Repository\BannerRepository")
 * @Vich\Uploadable
 * @HasLifecycleCallbacks
 */
class Banner
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="alt", type="string", length=255)
     */
    private $alt;

    /**
     * @ORM\ManyToOne(targetEntity="BannerCategory", inversedBy="banners")
     * @ORM\JoinColumn(nullable=false)
     */
    private $category;

    /**
     * @ORM\Column(name="is_published", type="boolean")
     */
    private $isPublished;

    /**
     * @ORM\Column(name="image", type="string", length=255, nullable=true)
     * @var string
     */
    private $image;

    /**
     * @Vich\UploadableField(mapping="banners_images", fileNameProperty="image")
     * @Assert\NotBlank()
     * @Assert\File(
     *     maxSize="2000K",
     *     mimeTypes={
     *         "image/jpg", "image/gif", "image/jpeg", "image/png"
     *     }
     * )
     * @var File
     */
    private $imageFile;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions