Dlaczego nikt nie wspomina o tym, że można go sprawdzić w instancji FormBuilder za pomocą klucza "ograniczenia" ?? Przede wszystkim, przeczytaj dokumentację Using a Form without a Class
'constraints' =>[
new Assert\Email([
'message'=>'This is not the corect email format'
]),
new Assert\NotBlank([
'message' => 'This field can not be blank'
])
],
Działa dobrze z symfony 3,1
Przykład:
namespace SomeBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Validator\Constraints as Assert;
class DefaultController extends Controller
{
/**
* @Route("kontakt", name="_kontakt")
*/
public function userKontaktAction(Request $request) // access for all
{
$default = array('message' => 'Default input value');
$form = $this->createFormBuilder($default)
->add('name', Type\TextType::class,[
'label' => 'Nazwa firmy',
])
->add('email', Type\EmailType::class,[
'label' => 'Email',
'constraints' =>[
new Assert\Email([
'message'=>'This is not the corect email format'
]),
new Assert\NotBlank([
'message' => 'This field can not be blank'
])
],
])
->add('phone', Type\TextType::class,[
'label' => 'Telefon',
])
->add('message', Type\TextareaType::class,[
'label' => 'Wiadomość',
'attr' => [
'placeholder' => 'Napisz do nas ... '
],
])
->add('send', Type\SubmitType::class,[
'label' => 'Wyślij',
])
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
// data is an array with "name", "email", and "message" keys
$data = $form->getData();
// send email
// redirect to prevent resubmision
var_dump($data);
}
return $this->render('SomeBundle:Default:userKontakt.html.twig', [
'form' => $form->createView()
]);
}
}
Wynik:
Zobacz funkcja dokumentowania o dostępnej va typy pokrywek. http://api.symfony.com/3.1/Symfony/Component/Validator/Constraints.html
Jeśli chcesz sprawdzić, jakie są dostępne klucze inne niż wiadomości, przejdź do dokumentacji pod adresem:
http://symfony.com/doc/current/reference/constraints/Email.html
lub przejdź do:
YourProject \ dostawcy \ symfony \ Symfony \ src \ Symfony \ Komponent \ Walidator \ Ograniczenia \ Email.php
stamtąd będziesz mógł zobaczyć, co jeszcze jest dostępne.
public $message = 'This value is not a valid email address.';
public $checkMX = false;
public $checkHost = false;
public $strict; "
Należy również pamiętać, że tworzone i sprawdzane formy wewnątrz sterownika, który nie jest najlepszym rozwiązaniem i powinien być używany tylko do form, które nigdy nie będzie ponownego użycia gdziekolwiek indziej w aplikacji.
Najlepszą praktyką jest tworzenie formularzy w oddzielnym katalogu w ramach YourBundle/Form. Przenieś cały kod do nowej klasy ContactType.php. (Nie zapomnij zaimportować tam klasę FormBuilder gdyż nie przedłuży kontroler i nie będą miały dostępu do tej klasy poprzez „$ to”)
[wewnątrz klasy contactType:]
namespace AdminBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Validator\Constraints as Assert;
[wewnątrz kontroler:]
use YourBundle/Form/ContactType;
// use ...
//...
$presetData = []; //... preset form data here if you want to
$this->createForm('AdminBundle\Form\FormContactType', $presetData) // instead of 'createFormBuilder'
->getForm();
// render view and pass it to twig templet...
// or send the email/save data to database and redirect the form
Merci Ahmed .... –
Należy zauważyć, że validateValue jest przestarzałe od Symfony 2.5 i zamiast tego należy użyć sprawdzania poprawności. –
Usługa walidatora jest nieaktualna od wersji 2.5, do usunięcia w wersji 3.0. Validator \ RecursiveValidator powinien być użyty zamiast: –