我正在尝试使用Checkbox“同意TOS”。
如果复选框未选中,我想发布一条Flash消息。
我该怎么做?
我的观点:
<?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'
));
答案 0 :(得分:17)
这似乎对我有用。希望它会有所帮助。
模特:
'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 :(得分:1)
基本上,您将此字段的规则“notEmpty”添加到模型的public $validate
数组中。
这样,如果未选中复选框,则会在Model->validates()
上触发错误。
// 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.x中: 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/
答案 2 :(得分: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')); ?>
答案 3 :(得分:0)
我相信你需要尝试将它保存到你的模型中以捕捉你的tos规则。我应该做类似=
的事情if(!$mymodel->save()){
// catch error tos.
}
答案 4 :(得分: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');
}
答案 5 :(得分:0)
你甚至不必拥有tos的验证规则,只需在保存数据之前在控制器上检查一下。
if($this->data['Model']['tos']==1){ // save data }else{ //set flash }