无法更改 CakePHP 2.3 中的默认错误消息
Posted
技术标签:
【中文标题】无法更改 CakePHP 2.3 中的默认错误消息【英文标题】:Can't change default error messages in CakePHP 2.3 【发布时间】:2013-01-19 02:32:07 【问题描述】:在我的 Cakephp 项目中,我想显示错误消息,但它不起作用。
当我提交时,我希望它显示一条错误消息,例如:“此字段为必填项”,但默认显示“请填写此字段”。我改变了消息,但它并没有从核心改变。
我的视图、模型和控制器代码如下:
add_district.ctp
:
<div class="pg_title txtLeft">Add District</div>
<?php echo $this->Form->create('Admins', array('action' => 'add_district'));?>
<table>
<tbody>
<tr>
<td><label>District Name<span class="red required">*</span></label></td>
<td><?php echo $this->Form->input('District.district_name',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px;')); ?></td>
</tr>
<tr>
<td colspan="2" align="right" style="padding-right: 113px;"><input type="reset" value="Reset"> | <?php echo $this->Form->submit('ADD', array('div' => false));?></td>
</tr>
</tbody>
</table>
<?php print $this->Form->end();?>
<div class="clear"></div>
型号:District.php
<?php
App::uses('AppModel', 'Model');
/**
* Admin Login Model
*
*/
class District extends AppModel
public $name='District';
public $usetables='districts';
public $validate = array(
'district_name' => array(
'rule' => 'notEmpty',
'allowEmpty' => false,
'message' => 'This field is required'));
?>
而我的控制器代码是 (AdminController.php
):
public function add_district()
$this->layout='common';
$this->District->create();
$this->District->set($this->data);
if(empty($this->data) == false)
if($this->District->save($this->data))
$this->Session->setFlash('District Added Successfully.');
$this->redirect('add_district');
else
$this->set('errors', $this->District->invalidFields());
【问题讨论】:
这可能与您的问题没有直接关系,但是您为您的Form指定了错误的模型;echo $this->Form('Admins', .....);
应该是 echo $this->Form('District', .....);
【参考方案1】:
“请填写此字段”的消息来自浏览器本身,而不是来自 CakePHP。
所以 Firefox 和 Chrome(可能还有其他浏览器?)会自动检查标记为必填的字段,然后当您提交表单时,甚至在将该表单数据发送到服务器之前,如果未填写必填字段,浏览器会给你默认的弹出消息:“请填写此字段”。
这是浏览器的默认行为,与您的代码无关。如果您想检查您的 Cake 错误消息是否正常,请在 Safari 中尝试(从 6.0.2 版开始,它似乎没有“自动检测必填字段”功能)。在 Safari 中,您应该得到您自己的 CakePHP 错误消息。
您还可以通过将表单本身的 autovalidate 属性传递为 false 来防止在浏览器中检查错误 - 请参阅 Disable validation of html5 form elements
【讨论】:
【参考方案2】:实际上 CakePHP 是通过 FormHelper 添加 HTML5 required="required"
属性来触发的。以前的 CakePHP 版本没有这样做。如果您愿意,可以通过将 'required' => false
添加到表单输入属性数组来防止这种情况发生。
【讨论】:
【参考方案3】:问题在于浏览器验证。 至少在 Chrome 上,如果输入字段设置为“必填”,您会感到沮丧。它在 Safari 上似乎没有问题。
即使您从模型中添加 'required'=>false,它仍然可能不起作用。
我所做的是在 View 上运行,我添加了 'required'=>'false'
例如我有一个用户视图和一个 add.ctp
echo $this->Form->input('fname', array('label' => 'First Name','required'=>'false'));
在那之后,一切都解决了。但是我必须在所有输入字段上都这样做才能使蛋糕验证起作用。
【讨论】:
【参考方案4】:在 add_district.ctp 中写入
<?php echo $this->Form->create('Admins', array('action' => 'add_district', 'novalidate' => true));?>
我想这会解决你的问题。
【讨论】:
以上是关于无法更改 CakePHP 2.3 中的默认错误消息的主要内容,如果未能解决你的问题,请参考以下文章