Validation de la case à cocher "Accepter TOS" de CakePHP
j'essaie d'avoir une case à cocher "Accepter TOS".
Si la Case est pas vérifié!--6-->, je veux mettre un Message Flash.
comment je fais ça?
Mon Avis:
<?php
echo $form->create('Item', array('url' => array_merge(array('action' => 'find'), $this->params['pass'])));
echo $form->input('Search', array('div' => false));
echo $form->submit(__('Search', true), array('div' => false));
echo $form->checkbox('tos', array('label' => false, 'value'=>1)).' Agree TOS';
echo $form->error('tos');
echo $form->end();
?>
Mon Modèle:
var $check = array(
'tos' => array(
'rule' => array('comparison', 'equal to', 1),
'required' => true,
'allowEmpty' => false,
'on' => 'index',
'message' => 'You have to agree TOS'
));
6 réponses
cela semble fonctionner pour moi. J'espère que ça aidera.
modèle:
'tos' => array(
'notEmpty' => array(
'rule' => array('comparison', '!=', 0),
'required' => true,
'message' => 'Please check this box if you want to proceed.'
)
vue:
<?php echo $this->Form->input('tos', array('type'=>'checkbox', 'label'=>__('I confirm I have read the <a href="/privacy-statement">privacy statement</a>.', true), 'hiddenField' => false, 'value' => '0')); ?>
Modèle
'agreed' => array(
'notempty' => array(
'rule' => array('comparison', '!=', 0),//'checkAgree',
'message' => ''You have to agree TOS'',
'allowEmpty' => false,
'required' => true,
'last' => true, // Stop validation after this rule
'on' => 'signup', // Limit validation to 'create' or 'update' operations
),
),
View
<?php echo $this->Form->input('agreed',array('value'=>'0'),array('type'=>'checkbox', 'label'=>'Agree to TOS')); ?>
en gros, vous ajoutez la règle "notEmpty" pour ce champ à l' public $validate
tableau du modèle.
de cette façon, une erreur se déclencher sur Model->validates()
si la case n'est pas cochée.
peut-être un peu de sur-charge dans votre cas, mais si vous l'utilisez plus souvent essayez une approche sèche (ne vous répétez pas). vous pouvez également utiliser un comportement pour cela d'utiliser cette énergie propre et sans perturber trop avec le modèle/contrôleur:
// view form
echo $this->Form->input('confirmation', array('type'=>'checkbox', 'label'=>__('Yes, I actually read it', true)));
et dans le contrôleur action
// if posted
$this->Model->Behaviors->attach(array('Tools.Confirmable'=>array('field'=>'confirmation', 'message'=>'My custom message')));
$this->Model->set($this->data);
if ($this->Model->validates()) {
// OK
} else {
// Error flash message here
}
1.x: https://github.com/dereuromark/tools/blob/1.3/models/behaviors/confirmable.php
pour 2.x: https://github.com/dereuromark/cakephp-tools/blob/2.x/Model/Behavior/ConfirmableBehavior.php
3.x: https://github.com/dereuromark/cakephp-tools/blob/master/src/Model/Behavior/ConfirmableBehavior.php
détails: http://www.dereuromark.de/2011/07/05/introducing-two-cakephp-behaviors/
je crois que vous avez besoin d'essayer de l'enregistrer dans votre modèle pour attraper votre tos règles. Je devrais faire quelque chose comme =
if(!$mymodel->save()){
// catch error tos.
}
$this->ModelName->invalidFields()
renvoie un tableau de champs qui ont échoué la validation.
vous pouvez essayer et rechercher ceci pour le tos
champ, et afficher un message si la clé existe.
~non testé (Je ne suis pas sûr de la structure exacte de la invalidFields
tableau de retour.
$failed_fields = $this->ModelName->invalidFields();
if(array_key_exists('tos', $failed_fields)) {
$this->Session->setFlash('Please accept the terms and conditions');
}
Vous n'avez même pas besoin d'avoir une règle de validation pour les tos, il suffit de vérifier cela au contrôleur avant d'enregistrer les données.
if($this->data['Model']['tos']==1){ // save data }else{ //set flash }