Bonjour,
Je viens vers vous aujourd'hui pour parler des validations.
En effet, j'ai développé une très grande majorité de mon code et, lors de ma démonstration auprès du client, celui-ci m'a fait remarqué que mes formulaires n'étaient pas soumis à validation...
J'ai donc essayé les validators proposés par CakePHP 3 et me heurte à un mur: je n'arrive pas à comprendre comment ceux-ci fonctionnent !
Voici mon problème.
J'ai dans ma base de données une table clients :
CREATE TABLE IF NOT EXISTS `clients` (
`idClient` int(11) NOT NULL AUTO_INCREMENT,
`nomClient` varchar(50) NOT NULL,
`prenomClient` varchar(50) NOT NULL,
`telClient` char(14) NOT NULL,
`mailClient` varchar(150) NOT NULL,
`contactClient` varchar(5) NOT NULL,
`numAdresse` int(11) NOT NULL,
`typeAdresse` varchar(50) NOT NULL,
`autreAdresse` varchar(150) DEFAULT NULL,
`cpAdresse` varchar(5) NOT NULL,
`villeAdresse` varchar(100) NOT NULL,
`typeClient` int(11) NOT NULL,around PRIMARY KEY (`idClient`)
)
J'ai également un contrôleur Clients et une fonction ajouter() :
<?php
namespace App\Controller;
use Cake\Validation\Validator;
class ClientsController extends AppController{
public function ajouter(){
#VALIDATOR
$validator = new Validator;
$validator
->requirePresence('nomClient', 'create')
->notEmpty('nomClient', 'Renseignez un nom pour le client')
->requirePresence('numAdresse', 'create')
->notEmpty('numAdresse', 'Renseignez un numAdresse pour le client');
/*S'occupe de l'ajout + redirection*/
$clients = $this->Clients->newEntity($this->request->data());
if($this->request->is('post')){
if($clients->errors()){
$this->Flash->error(__('Impossible d\'ajouter le client.'));
}
else{
$clients = $this->Clients->patchEntity($clients, $this->request->data);
if($this->Clients->save($clients)){
$this->Flash->success(__('Le client a été sauvegardé.'));
return $this->redirect(['controller'=>'Objets','action'=>'ajouter']);
}
$this->Flash->error(__('Impossible d\'ajouter le client.'));
}
}
$this->set('clients',$clients);
}
}
Et j'ai également une vue ajouter.ctp :
<?php
echo $this->Form->create($clients);
echo "<h3 id='addclientitle'>Client</h3>";
echo $this->Form->input('nomClient', ['label'=>'Nom', 'id'=>'addClt']);
echo $this->Form->input('prenomClient', ['label'=>'Prénom', 'id'=>'addClt']);
echo "<label>Type</label>";
echo $this->Form->select(
'typeClient',[
"1"=>"Particulier",
"2"=>"Pro",
"3"=>"Collectivité"
],
['empty' =>'Choisissez']
);
echo "<h3 id='addclientitle'>Adresse</h3>";
echo $this->Form->input('numAdresse', ['label'=>'Numéro',
'id'=>'addClt',
'style'=>'width:10%;margin-left:20%;']);
echo $this->Form->input('typeAdresse', ['label'=>'Type de voie (chemin, rue...)', 'id'=>'addClt']);
echo $this->Form->input('autreAdresse', ['label'=>'Extension (bis, ter...)', 'id'=>'addClt']);
echo $this->Form->input('cpAdresse', ['label'=>'Code postal',
'id'=>'addClt',
'style'=>'width: 20%;margin-left:20%;']);
echo $this->Form->input('villeAdresse', ['label'=>'Ville', 'id'=>'addClt']);
echo "<h3 id='addclientitle'>Contact</h3>";
echo $this->Form->input('telClient', ['label'=>'Téléphone', 'id'=>'addClt']);
echo $this->Form->input('mailClient', ['label'=>'Mail', 'id'=>'addClt']);
echo $this->Form->label("Moyen de contact");
echo $this->Form->select(
'contactClient',[
"SMS"=>"SMS",
"Mail"=>"Mail",
"Appel"=>"Appel"
],
['empty' =>'Choisissez']
);
echo "<ul id='nav'><li>";
echo $this->Form->submit('Ajouter', ['class'=>'button']);
echo "</li></ul>";
echo $this->Form->end();
Mon problème est que lorsque j'ajoute un client, en ne remplissant pas les champs nomClient et numAdresse, l'ajout a quand même lieu! Je n'ai pas de message m'indiquant de renseigner les informations manquantes...
Si quelqu'un s'y connaît en Validations et pensent pouvoir m'aider, ce serait génial :)
J'ai utilisé la solution la plus propre avec validationDefault() et tout fonctionne comme je le voulais ! Merci antograssiot :)