gpt4 book ai didi

来自模型和 Controller 的 cakephp 验证

转载 作者:行者123 更新时间:2023-12-04 17:13:37 24 4
gpt4 key购买 nike

我已经在模型中进行了验证。另外,我在 Controller 中进行了一些验证以检查验证码。之后,应用程序不会显示模型验证错误。如果我注释 Controller 代码,模型验证工作正常并显示错误。两个都不行。。

型号代码(示例)

class User extends AppModel {

var $name = 'User';

var $validate = array(
'username' => 'notempty',
'firstname' => 'notempty'
);

}

Controller 代码
if (!empty($this->data)) {

$this->User->set($this->data);
$this->User->create();
$captcha = $this->Session->read('CAPTCHA_CODE');

if (strtolower($captcha) != strtolower($this->data['User']['captcha']))
{
$this->User->invalidate('captcha', __('Sorry, your entry did not match', true));
}

if ($this->User->save($this->data, array('validate' => 'only')))
{
if ($this->User->save($this->data, array('validate' => 'false'))) {
$this->Session->setFlash(__('Registered successfully', true));
$this->redirect('success');
}
}else {
$this->Session->setFlash(__('Please, try again.', true));
}

}

我已经更换了 if ($this->User->save($this->data, array('validate' => 'only')))线与 if ($this->User->validates()) ,那么它也不起作用。

请帮忙

最佳答案

您的代码应该适用于 if ( $this->User->validates() ) .您遇到问题的不正确行为是因为 Model::save()重置 Model::validationErrors成员,消除您的自定义验证错误。 Model::validates()没有,所以你的双重验证设置应该可以工作。

例如,在 CakePHP 1.2 下,以下功能正确。

模型:

class User extends AppModel
{
var $validate = array(
'my_other_field' => array(
'rule' => 'notEmpty',
'message' => 'This field should not be empty.'
)
);
}

Controller :
class UsersController extends AppModel
{
function add()
{
if (! empty($this->data)) {
$this->User->set( $this->data );

if ( 'foo' != $this->data['User']['my_field'] ) {
$this->User->invalidate( 'my_field', 'Should be "foo".' );
}

if ( $this->User->validates() ) {
$this->flash('Form validated correctly.'); exit;
}
}
}
}

看法:
<?php echo $form->create('User', array('action'=>'add')); ?> 
<?php echo $form->input('User.my_field', array('value'=>'bar')); ?>
<?php echo $form->input('User.my_other_field', array('value'=>'')); ?>
<?php echo $form->end('Submit'); ?>

按原样提交,表单验证错误出现在两个字段下方,一个来自 Controller 的验证逻辑,另一个来自模型的验证规则。

当然,更大的问题是通过让 Controller 处理一些数据验证来混淆 MVC 角色。你可能想考虑这样的事情:

Controller :
class UsersController extends AppController
{
function add()
{
if (! empty($this->data)) {

$captcha = $this->Session->read('CAPTCHA_CODE');
$this->User->setCaptchaCheck( $captcha );

if ( $this->User->save( $this->data, array('validate'=>true))) {
$this->Session->setFlash('Success');
$this->redirect('success',303,true);
}
}
}
}

模型:
class User extends AppModel
{
var $captchaCheck = '';

var $validates = array(
'captcha' => array(
'matchesCheck' => array(
'rule' => array( 'matchesCaptchaCheck', 'captchaCheck' ), // second value of array should match class member-name above
'message' => "CAPTCHAs don't match."
)
)
);

function matchesCaptchaCheck( $data, $checkVar )
{
$data = reset(array_values($data)); // I don't need to know the field name now.

return low($data) == low($this->{$checkVar});
}

function setCaptchaCheck( $captcha )
{
$this->captchaCheck = $captcha;
}
}

现在,您的 Controller 完全不知道您的模型如何验证其数据,甚至不知道数据的结构;并且您的表单验证都发生在模型中。

希望这可以帮助。

关于来自模型和 Controller 的 cakephp 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com