Utiliser des constantes de classe dans les annotations Doctrine

Publié le 07/11/2019 • Mis à jour le 07/11/2019


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

C'est une petite astuce permettant d'éviter de mettre en dur des valeurs dans les annotations Doctrine. Par exemple, c'est utile lorsque on a une contrainte de taille qui peut être partagée parmi plusieurs champs et entités. On peut aussi utiliser ces constantes pour créer les contraintes de formulaire. Veuillez noter qu'elles doivent être publiques sous peine d'avoir une erreur.


<?php

declare(strict_types=1);

// src/Entity/ArticleType.php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Repository\ArticleTypeRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity(repositoryClass=ArticleTypeRepository::class)
 *
 * @ApiResource(
 *   attributes={"pagination_enabled"=false},
 *   normalizationContext={"groups"={"strangebuzz.fr"}},
 *   itemOperations={"get"},
 *   collectionOperations={"get"}
 * )
 */
class ArticleType extends BaseEntity
{
    public const LABEL_MAX_LENGTH = 50; // must be public!

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected ?int $id = null;

    /**
     * @ORM\Column(name="label", type="string", length=App\Entity\ArticleType::LABEL_MAX_LENGTH, nullable=false)
     *
     * Or the short notation is possible in this case:
     * #@ORM\Column(name="label", type="string", length=ArticleType::LABEL_MAX_LENGTH, nullable=false)

 Plus sur Stackoverflow   Lire la doc  Snippet aléatoire