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 kodudurAgriHealth\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: ~
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
ben bu e-posta değil bir – jdog
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