Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Zusätzlich zu den von Symfony bereitgestellten Constraint-Klassen stellt brandbox die weitere Constraints zur Verfügung. Eine Übersicht der verfügbaren Kriterien finden sie hier.

Info

Durch brandbox bereitgestellte Constraints dürfen ausschließlich über die Datenmodellierung oder den @constraint [Constraint] Syntax genutzt werden. Der Standard-Symfony-Syntax wird nicht unterstützt.

...

Über den Programmcode können Kriterien pro Datenbankspalte oder für das gesamte Datenbankobjekt festgelegt werden. Für ein Kriterium welches für ein ganzes Datenbankobjekt gelten soll wird ein anderer Syntax genutzt.

Codeblock
languagephp
titleKriterien pro Datenbankspalte
<?php

declare(strict_types=1);

/**
 * In diesem Beispiel wird die Klasseneigenschaft $property 
 * mit drei Kriterien für die Validierung versehen.
 *
 * 1: IsCombinedUnique(...) prüft die Eindeutigkeit der Kombination aus den definierten Spalten.
 *
 * 2. NotBlank() erfordert einen gültigen Wert in $property. 
 *               Werte welche null entsprechen sind verboten.
 *
 * 23. Length(...) erfordert das der Wert mindesten 3 und 
 *                maximal 255 Zeichen umfassen darf. 
 *                Ein Wert welcher null entspricht ist 
 *                ohne NotBlank() ebenfalls gültig.
 *
3 * 4. Regex(...) legt einen regulären Ausdruck fest welcher 
 *               mit dem Wert von $property geprüft wird. 
 *               Sollte der Wert null entsprechenden wird 
 *               er ohne NotBlank() als gültig angesehen.
 */

namespace Brandbox\SampleCore\Sample\Plugin\Lib\Entity {

	use Brandbox\Framework\Component\Doctrine;

	/**
	 * @constraint IsCombinedUnique(columns="property,something")
	 * 
	 * [Deklaration als Doctrine-Entity]
	 */
	class Sample extends Doctrine\Definition\EntityAbstract
	{
		/**
		 * @constraint NotBlank()
		 * @constraint Length(min=3, max=255)
		 * @constraint Regex(pattern="/^[a-z]+$/Ui")
		 *
		 * [@Column...-Deklaration]
		 */
		public string $property = 'example';

		/**
		 * [@Column...-Deklaration]
		 */
		public string $something = 'strange';
	}
}


Codeblock
languagephp
titleEin benutzerdefiniertes Kriterium für ein Datenbankobjekt
<?php

declare(strict_types=1);

/**
 * In diesem Beispiel wird eine Validierungsmethode für das Datenbankobjekt definiert.
 * Wird eine Validierung auf diesem Objekt ausgeführt wird die Methode callback() aufgerufen.
 * Dort findest eine speziell für dieses Datenbankobjekt erforderliche Prüfung statt.
 * Im Fehlerfall wird eine entsprechende Fehlermeldung erzeugt.
 */

namespace Brandbox\SampleCore\Sample\Plugin\Lib\Entity {

	use Brandbox\Framework\Component\Doctrine;

	use /** @noinspection PhpUnusedAliasInspection */ Symfony\Component\Validator\Constraints;
	use Symfony\Component\Validator\Context\ExecutionContextInterface;

 	/**
	 * [Deklaration als Doctrine-Entity]
	 */
	class Sample extends Doctrine\Definition\EntityAbstract 
	{
		/**
		 * [@Column...-Deklaration]
		 */
		public string $username;

		/**
		 * [@Column...-Deklaration]
		 */
		public string $password;

		/**
         * [@Column...-Deklaration]
         */
		public string $email;

		/**
		 * @Constraints\Callback
		 */
		public function callback(ExecutionContextInterface $context): void 
		{
			$required = $this->username . '@example.com';

			if(0 !== strcmp($required, $this->email)) {
				$context
					->buildViolation('You must provide a correct email address.')
					->atPath('email')
					->addViolation()
				;
			}
		}
	}
}

...