2011-07-16 10 views
9

"同意するTOS"というチェックボックスを表示しようとしています。CakePHP "TOSに同意する"チェックボックスのバリデーション

チェックボックスがである場合、がチェックされていない場合は、Flash Messageを出したいと思います。

どうすればよいですか?

マイビュー:

<?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(); 
?> 

マイモデル:

var $check = array(
      'tos' => array(
       'rule' => array('comparison', 'equal to', 1), 
       'required' => true, 
       'allowEmpty' => false, 
       'on' => 'index', 
       'message' => 'You have to agree TOS' 
       )); 
+3

あなたのルール配列は '$ check'ではなく' $ validate'でなければなりません。 – lxa

+0

恐ろしいかもしれませんが、[確認可能な行動](http://www.dereuromark.de/tag/confirmable/)を活用することもできます。 – mark

答えて

0

私はあなたのTOSルールをキャッチするためにあなたのモデルにそれを保存してみてください必要があると考えています。 =

if(!$mymodel->save()){ 
// catch error tos. 
} 
0

$this->ModelName->invalidFields()は、検証に失敗したフィールドの配列を返します。

tosフィールドでこれを検索し、キーが存在する場合はメッセージを出力できます。

〜テストされていない(私は私の頭の上からinvalidFields戻り配列の正確な構造はよく分からない。

$failed_fields = $this->ModelName->invalidFields(); 

if(array_key_exists('tos', $failed_fields)) { 
    $this->Session->setFlash('Please accept the terms and conditions'); 
} 
0

あなたもちょうどことを確認し、TOSの検証ルールを持っている必要はありませんデータを保存する前に、コントローラで。

if($this->data['Model']['tos']==1){ 
    // save data 
    }else{ 
    //set flash 
    } 
1

基本的に、あなたは、モデルのpublic $validate配列に、この分野のルール「notEmpty」を追加します。 チェックボックスがオンになっていない場合、Model->validates()にエラーが発生します。

おそらくあなたのケースではオーバーヘッドがありますが、それを頻繁に使用するとDRY(自分自身を繰り返さない)アプローチを試してみてください。あなたも、これは、このきれいなモデル/コントローラとあまりテンパリングせずに使用するための動作を使用することができます。

// view form 
echo $this->Form->input('confirmation', array('type'=>'checkbox', 'label'=>__('Yes, I actually read it', true))); 

とコントローラのアクションに

// 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.1: https://github.com/dereuromark/tools/blob/1.3/models/behaviors/confirmable.php

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

詳細: http://www.dereuromark.de/2011/07/05/introducing-two-cakephp-behaviors/

+0

github link is dead – Ruben

+0

thx。分岐はリンクを修正しました。私はそれを訂正した。 – mark

16

これは私のために働いているようです。それが助けてくれることを願って。モデルで

:ビューで

  'tos' => array(
       'notEmpty' => array(
        'rule'  => array('comparison', '!=', 0), 
        'required' => true, 
        'message' => 'Please check this box if you want to proceed.' 
       ) 

<?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')); ?> 
1

モデル

'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 
     ), 
    ), 

ビュー

<?php echo $this->Form->input('agreed',array('value'=>'0'),array('type'=>'checkbox', 'label'=>'Agree to TOS')); ?> 
関連する問題