Symfony 4 - Can't create Entity

377 views Asked by At

I'm using Sonata Admin for the first time, I followed doc online and my admin works well, except I have an error when I try to create elements via my admin:

Failed to create object: App\Entity\HomeBlockElement

I have my HomeBlockElement

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\HomeBlockElementRepository")
 * @ORM\Table(name="home_block_element")
 */
class HomeBlockElement
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(name="home_element_id",type="integer")
     */
    private $id;

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

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

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

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

    /**
     * @var string
     *
     * @ORM\Column(name="home_element_media", type="text")
     */
    protected $media;

    /**
     * @var bool
     *
     * @ORM\Column(name="home_element_published", type="boolean")
     */
    protected $published = false;


    public function getId(): ?int
    {
        return $this->id;
    }

    /**
     * @return string
     */
    public function getTitle(): ?string
    {
        return $this->title;
    }

    /**
     * @param string $title
     * @return HomeBlockElement
     */
    public function setTitle(?string $title): HomeBlockElement
    {
        $this->title = $title;

        return $this;
    }

    /**
     * @return string
     */
    public function getTextLink(): ?string
    {
        return $this->textLink;
    }

    /**
     * @param string $textLink
     * @return HomeBlockElement
     */
    public function setTextLink(?string $textLink): HomeBlockElement
    {
        $this->textLink = $textLink;

        return $this;
    }

    /**
     * @return string
     */
    public function getShoppingLink(): ?string
    {
        return $this->shoppingLink;
    }

    /**
     * @param string $shoppingLink
     * @return HomeBlockElement
     */
    public function setShoppingLink(?string $shoppingLink): HomeBlockElement
    {
        $this->shoppingLink = $shoppingLink;

        return $this;
    }

    /**
     * @return string
     */
    public function getMarketingEtiquette(): ?string
    {
        return $this->marketingEtiquette;
    }

    /**
     * @param string $categoryLink
     * @return HomeBlockElement
     */
    public function setMarketingEtiquette(?string $marketingEtiquette): HomeBlockElement
    {
        $this->marketingEtiquette = $marketingEtiquette;

        return $this;
    }

    /**
     * @return bool
     */
    public function isPublished(): bool
    {
        return $this->published;
    }

    /**
     * @param bool $published
     * @return Page
     */
    public function setPublished(bool $published): HomeBlockElement
    {
        $this->published = $published;

        return $this;
    }
}

And my HomeBlockElementAdmin:

<?php

namespace App\Admin;

use App\Entity\Page;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;

final class HomeBlockElementAdmin extends AbstractAdmin
{
    protected $datagridValues = array(
        '_sort_order' => 'ASC',
        '_sort_by' => 'title',
    );

    /**
     * @param $object
     * @return string|null
     */
    public function toString($object): ?string
    {
        return $object instanceof Page && $object->getTitle()
            ? $object->getTitle()
            : 'Nouveau bloc élément';
    }

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->with('Contenu')
            ->add('published', CheckboxType::class, ['required' => false, 'label' => 'Publier'])
            ->add('title', TextType::class, ['required' => true, 'label' => 'Titre'])
            ->add('marketingEtiquette', TextType::class, ['required' => false, 'label' => 'Etiquette Marketing'])
            ->add('textLink', TextType::class, ['required' => true, 'label' => 'Texte'])
            ->add('shoppinglink', TextType::class, ['required' => true, 'label' => 'Lien'])
            ->end();
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        unset($this->listModes['mosaic']);

        $listMapper
            ->addIdentifier('title')
            ->addIdentifier('marketingEtiquette')
            ->addIdentifier('textLink')
            ->addIdentifier('shoppinglink')
            ->addIdentifier('published')
        ;
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
            ->add('title')
            ->add('marketingEtiquette')
            ->add('textLink')
            ->add('shoppinglink')
            ->add('published');
    }

    /**
     * @param RouteCollection $collection
     */
    protected function configureRoutes(RouteCollection $collection)
    {
        $collection
            ->remove('delete')
            //->remove('create')
            ->add('move', $this->getRouterIdParameter() . '/move/{position}');
    }

}

I then defined this in my services.yaml

admin.element:
    class: App\Admin\HomeBlockElementAdmin
    arguments: [~, App\Entity\HomeBlockElement, ~]
    tags:
        - { name: sonata.admin, manager_type: orm, label: 'Element blocs', group: 'app.admin.group.home' }

I've updated the data base with php bin/console doctrine:schema:update to make it match with my code and everything worked fine.From what I saw on the Internet, the error is related to SQL but I can't see where the error comes from. In the breadrcumb from the error I can see:

PDOException > PDOException > NotNullConstraintViolationException > ModelManagerException

So the error is because something is null when it shouldn't? But the only thing that is required is the id, and it should be generated automatically... I don't know what to do

0

There are 0 answers