Ich habe ein Problem mit einem Formular senden. Ich habe eine persönliche Einschränkung, die vom Wert eines Attributs meiner Entität abhängt (Attribut ist nicht in meiner Form). Der Wert muss festgelegt werden, wenn ich auf eine bestimmte Übergabeschaltfläche klicke (ich habe mehrere Übergabeschaltflächen).Validator ist abhängig von Submit-Taste und Attributwert
Mein Problem ist, dass mein Validator nicht angewendet wird.
Beispiel:
Entity:
/**
* @MyPersonnalConstraint()
*/
class Test
{
private $id;
private $text;
private $text2;
private $state;
}
Formtype
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('text', TextType::class)
->add('text2', TextType::class)
->add('Submit1', SubmitType::class)
->add('Submit2', SubmitType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Test::class,
]);
}
MyPersonnalConstraintValidator
public function validate($value, Constraint $constraint)
{
if ($value->getState("X")) { //<-- "X" is set only if "Submit2" is clicked
if($value->getText2() === null || $value->getText2() === ""){
$this->context->buildViolation($constraint->message)
->atPath('text2')
->addViolation();
}
}
}
Wenn ich auf Submit2 Knopf klicken muss ich tun $test->setState("X")
.
Ich kann kein verwenden, da mein Formular nicht übergeben wird und boolescher 'angeklickt' Wert immer falsch ist, wenn Sie auf 'Senden2' klicken.
Und
In meinem Controller nach handleRequest($request)
Methode, die ich isClicked
auf meiner Taste fangen können, aber es ist zu spät für Formulardaten ändern (setState("X"))
vorgelegt und $form->isValid()
ist immer wahr.
Controller:
$form->handleRequest($request);
if ($form->get('Submit2')->isClicked()) {
$form->getData()->setState("X");
}
if ($form->isSubmitted() && $form->isValid()) {
//Already valid
}
der Dank für Ihre Lichter!