2016-04-12 23 views
0

FosuServerBundle kullanarak bir Kullanıcıya bağlantıları olan 2 varlıklı bir projem var. İşte bir varlıktır: özel validator alan boş değilken çağrılmadı

AgriHealth\AhpBundle\Entity\Vet: 
    properties: 
     firstname: 
      - NotBlank: ~ 
      - Length: 
       min: 2 
       max: 100 
       minMessage: "Your first name must be at least {{ limit }} characters long" 
       maxMessage: "Your first name cannot be longer than {{ limit }} characters long" 
     lastname: 
      - NotBlank: ~ 
      - Length: 
       min: 2 
       max: 100 
       minMessage: "Your last name must be at least {{ limit }} characters long" 
       maxMessage: "Your last name cannot be longer than {{ limit }} characters long" 
     mobile: 
      - Length: 
       min: 2 
       max: 15 
       minMessage: "Your phone number must be at least {{ limit }} characters long" 
       maxMessage: "Your phone number cannot be longer than {{ limit }} characters long" 
     email: 
      - AgriHealth\AhpBundle\Validator\Constraints\UniqueEmailAll: ~ 
      - Email: 
       message: The email "{{ value }}" is not a valid email. 
       checkMX: true 
      - NotBlank: ~ 
     clinic: 
      - NotBlank: ~ 

boş bir formu göndermek

, doğrulayıcı denir:

AgriHealth\AhpBundle\Entity\Vet: 
    type: entity 
    oneToOne: 
     user: 
      targetEntity: User 
      joinColumn: 
       name: user_id 
       referencedColumnName: id 
    table: vet 
    id: 
     id: 
      type: integer 
      generator: { strategy: AUTO } 
    fields: 
     firstname: 
      type: string 
      length: 100 
     lastname: 
      type: string 
      length: 100 
     mobile: 
      type: string 
      length: 15 
      nullable: true 
     email: 
      type: string 
      length: 80 
     user_id: 
      type: integer 

eposta zaten kullanımda olmadığını kontrol etmek için, ben özel bir doğrulayıcı oluşturduk. E-posta alanına herhangi bir değer gönderdiğimde, hiç çağrılmıyor.

public function createAction(Request $request) 
{ 
    $entity = $this->getNewVet(); 
    $entity->setDoctrine($this->getDoctrine());//@todo needs to happen before handle requests NEEDS TEST 
    $entity->setContainer($this->getContainer()); 
    $form = $this->createCreateForm($entity); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 

     $em = $this->getDoctrine()->getManager(); 
     if ($entity->getUser()){//@todo NEEDS TEST 
      if (sizeof($entity->getClinics())){ 
       $entity->getUser()->setRoles(array('ROLE_CLINIC_ADMIN')); 
      }else{ 
       $entity->getUser()->setRoles(array('ROLE_VET')); 
      } 

     } 
     $em->persist($entity); 
     $em->flush(); 
     return $this->redirect($this->generateUrl('vet')); 
    } 

    return $this->render('AgriHealthAhpBundle:Vet:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

    private function createCreateForm(Vet $entity) 
    { 
     $vetType = new VetType(); 
     $vetType 
      ->setUser($this->getUser()) 
      ->setClinicQueryBuilder($this->getClinicRepository()->createQueryBuilder('c')) 
      ->setSecurityContext($this->get('security.context')); 
     $form = $this->createForm($vetType, $entity, array(
      'action' => $this->generateUrl('vet_create'), 
      'method' => 'POST', 
     )); 

     $form->add('submit', 'submit', array('label' => 'Create')); 

     return $form; 
    } 

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('firstname', 'text', array(
      'help' => '', 
      'required' => true, 
      'label' => 'First Name' 
     )) 
     ->add('lastname', 'text', array(
      'help' => '', 
      'required' => true, 
      'label' => 'Last Name' 
     )) 
     ->add('mobile', 'text', array(
      'help' => '' 
     )) 
     ->add('email', 'text', array(
      'help' => 'Only one address please', 
      'required' => true 
     )); 
    if ($this->getSecurityContext()->isGranted('ROLE_CLINIC_ADMIN')) { 
     $builder 
      ->add('clinic', 'entity', array(
       'class' => 'AgriHealthAhpBundle:Clinic', 
       'query_builder' => $this->getClinicQueryBuilder() 
      )) 
      ->add('clinics', 'entity', array(
       'class' => 'AgriHealthAhpBundle:Clinic', 
       'query_builder' => $this->getClinicQueryBuilder(), 
       'multiple' => true, 
       'attr' => array(
        'size' => 25 
       ), 
       'required' => false, 
       'label' => 'Controls Clinics' 
      )); 
    } 
} 

/** 
* @param OptionsResolverInterface $resolver 
*/ 
public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AgriHealth\AhpBundle\Entity\Vet' 
    )); 
} 

/** 
* @return string 
*/ 
public function getName() 
{ 
    return 'agrihealth_ahpbundle_vet'; 
} 

services.yml: Diğer doğrulayıcı kurulumları bir dizi denedim

services: 
    agri_health.twig.form_extension: 
     class: AgriHealth\AhpBundle\Twig\FormExtension 
     tags: 
      - { name: twig.extension } 
    agri_health.form_type_extension: 
      class: AgriHealth\AhpBundle\Form\Extension\FormTypeExtension 
      tags: 
       - { name: form.type_extension, alias: form } 
    validator.unique.unique_email_all_validator: 
     class: AgriHealth\AhpBundle\Validator\Constraints\UniqueEmailAllValidator 
     tags: 
      - { name: validator.constraint_validator, alias: unique_email_all } 

, bunların hiçbiri kontrol edilecek gibi görünüyor: Burada

denetleyicisinden kodudur

AgriHealth\AhpBundle\Entity\Vet: 
    properties: 
     email: 
      - UniqueEntity: 
       repositoryMethod: checkFosUserEmail 

      - AgriHealth\AhpBundle\Validator\Constraints\UniqueEmailAll: ~ 
      - Email: 
       message: The email "{{ value }}" is not a valid email. 
       checkMX: true 
      - NotBlank: ~ 
     clinic: 
      - NotBlank: ~ 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
       fields: email 
       message: 'This port is already in use on that host.' 

constraints: 
    - FOS\UserBundle\Validator\Unique: 
     property: usernameCanonical 
     message: 'This username already exists. Please choose another one.' 

AgriHealth\AhpBundle\Entity\User: 
    properties: 
     email_canonical: 
      - UniqueEntity: ~ 
+0

Symfony 'UniqueEntity' doğrulayıcı var, bunu kullanmak yerine özel bir doğrulayıcı yazabilir. http://symfony.com/doc/current/reference/constraints/UniqueEntity.html bkz – ghanbari

+0

ben bu e-posta değil bir – jdog

+0

açıklandığı gibi başarıyla bir hizmet olarak doğrulayıcı kayıtlı ekleyen [buradan] 2 varlıkları, benzersizdir doğrulamak gerekir (http://symfony.com/doc/current/cookbook/validation/custom_constraint.html#constraint-validators-with-dependencies)? – Matteo

cevap

0

Buaslında beni bir varlık içindeki kullanıcı nesnesi oluşturarak neden oldu.

o doğrulama kırar gibi bu besbelli kötü bir uygulamadır!

1

Herhangi bir doğrulama grubu belirtmezseniz, bu sizin için çalışmalıdır:

AgriHealth\AhpBundle\Entity\Vet: 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
      fields: email_canonical 
      repositoryMethod: YOUR_REPOSITORY_METHOD 
      errorPath: email 
+0

. Belki kontrol cihazımda bir sorun var? – jdog

+0

@jdog Form oluştururken doğrulama grupları belirtir misiniz? – ghanbari

+0

Hayır, hiçbirini belirtmiyorum, sorgulamak için form oluşturma kodu eklediniz – jdog

İlgili konular