Ich verwende eine Entität und diese Entität erben von einer anderen Entität. Bis auf eine Sache funktioniert alles gut. Es scheint, dass die serverseitige Validierung in den Basis-Entitätsfeldern "verloren" ist.Einschränkungsprüfung geht nach Entitätsvererbung verloren
geerbt Klasse:
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* TicketBase
* @ORM\MappedSuperclass
*/
class TicketBase
{
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
* @Assert\NotBlank()
*/
private $title;
/* other fields */
Dann:
use AppBundle\Repository\TicketRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* Ticket
*
* @ORM\Table(name="cheval_ticket")
* @ORM\Entity(repositoryClass="AppBundle\Repository\TicketRepository")
*/
class Ticket extends TicketBase
{
/* only specific fields here */
Danach kann ich kein Problem dort irgendwelche meiner TicketBase Felder in meinem Ticket Einheit verwenden, aber wenn ich ein Formular auf Ticket erstellen , Ich habe keine Validierung der Server-Seite für Ticket :: title, so dass ich eine Verletzung der Integritätsbedingung erhalte, wenn der Titel leer ist.
Fehle ich etwas, damit meine Validierung funktioniert?
Dank
EDIT:
Controller-Aktion:
/**
* @Route("/tickets/{uniqid}/{contactId}", name="contact_tickets")
*/
public function ticketsAction(Request $request, $contactId = null, $uniqid = null)
{
$em = $this->getDoctrine()->getManager();
$contact = $em->getRepository("AppBundle:Contact")
->findOneBy(array(
'id' => $contactId,
'uniqid' => $uniqid
));
if ($contact === null) {
return $this->go('contact_index');
}
$form = $this
->createForm(ContactTicketsType::class, $contact, ['method' => 'POST'])
->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->setTicketsPrice($contact);
$this->setTicketsNbJours($contact);
$this->save($contact);
$this->setTicketsCodeId($contact);
return $this->go('payement_index', [
'contactId' => $contact->getId(),
'uniqid' => $contact->getUniqid(),
]
);
}
}
Mein Kontakt Unternehmen diese Beziehung mit Ticket hat:
/**
* @ORM\OneToMany(targetEntity="Ticket", mappedBy="contact", cascade={"remove", "persist"})
*/
private $tickets;
Und mein ContactTicketsType:
das Sinn macht, natürlich, aber ich änderte meine Eigenschaften geschützt und haben genau die gleiche result ... Übrigens, selbst wenn meine Titeleigenschaft privat wäre, könnte ich über meine erweiterte Entität darauf zugreifen und sie ändern ... Ich verstehe nicht, was schief läuft. – ThEBiShOp
Haben Sie versucht, den Validator stattdessen auf die getTitle-Methode zu setzen? Wie beschrieben in [Symfony Dokumentation] (https://symfony.com/doc/2.7/validation.html#getters) – OlivierC
Ich habe gerade versucht, aber keine Änderung – ThEBiShOp