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'
               ));
10
demandé sur grosseskino 2011-07-16 18:16:26

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')); ?>
17
répondu Invincible 2013-03-20 12:40:48

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')); ?>
1
répondu Fury 2016-01-13 00:00:23

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/

1
répondu mark 2016-01-13 00:36:59

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.
}
0
répondu papachan 2011-07-16 14:28:53

$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');
}
0
répondu Ross 2011-07-16 14:29:00

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
  }
0
répondu Anh Pham 2011-07-17 01:16:23