Ho un'entità cliente che dispone solo di un campo di posta elettronica univoco. Sto cercando di modificare l'email di un cliente e la convalida funziona correttamente. Tuttavia ho questo nel mio controller:Symfony2: il mio modulo restituisce false da isValid() ma l'array vuoto per getErrors() dalla condizione di vincolo univoco
public function updateAction(Request $request, $id) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AcmeDemoBundle:Customer')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Customer entity.');
}
$editForm = $this->createForm(new CustomerType(), $entity);
$editForm->bind($request);
if ($editForm->isValid()) {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('ticket_result'));
}
var_dump($editForm->getErrors());
return $this->render('AcmeDemoBundle:Customer:edit.html.twig', array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
));
}
Il var_dump restituisce un array vuoto, ma il validatore imposta un errore di unico e le $editForm->isValid()
restituisce false. C'è un modo per verificare quello specifico errore nel controller durante la convalida, puoi anche spiegare perché restituisce un array di errore vuoto? Fondamentalmente, vorrei fornire l'opzione "Unisci" se viene visualizzato questo errore.
EDIT: qui è la FormType:
namespace Acme\DemoBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CustomerType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('email', 'email', array('required'=>true))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Acme\DemoBundle\Entity\Customer',
'cascade_validation' => true,
));
}
public function getName() {
return 'acme_demobundle_customertype';
}
}
E il modello ramoscello:
{% extends 'AcmeDemoBundle::layout.html.twig' %}
{% block body -%}
<h1>Customer edit</h1>
<form action="{{ path('customer_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}>
<input type="hidden" name="_method" value="PUT" />
{{ form_widget(edit_form) }}
<p>
<button type="submit">Edit</button>
</p>
</form>
{% endblock %}
Qui è la mia convalida:
Acme\DemoBundle\Entity\Customer:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
fields: email
message: "A customer under that email address already exists"
properties:
email:
- Email: ~
Il tipo di cliente ha qualche sottoforma? – nifr
mostra il tuo modello, plz – Ziumin
Ho aggiornato il post e aggiunto la convalida, modello e formtype –