gpt4 book ai didi

php - CActiveForm 及其行为没有名为 "getErrors"的方法或闭包。

转载 作者:搜寻专家 更新时间:2023-10-31 21:08:58 24 4
gpt4 key购买 nike

您好,我是 yii 框架的新手,目前正在尝试通过数据库身份验证建立登录。但是我反复收到这个错误

CException

CActiveForm and its behaviors do not have a method or closure named "getErrors".

谁能帮我解决这个问题

这是 Controller

<?php

class SiteController extends Controller

{

public function actions()
{
return array(

'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),

'page'=>array(
'class'=>'CViewAction',
),
);
}
public function actionIndex()
{

$this->render('index');
}


public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}


public function actionContact()
{
$model=new ContactForm;
if(isset($_POST['ContactForm']))
{
$model->attributes=$_POST['ContactForm'];
if($model->validate())
{
$name='=?UTF-8?B?'.base64_encode($model->name).'?=';
$subject='=?UTF-8?B?'.base64_encode($model->subject).'?=';
$headers="From: $name <{$model->email}>\r\n".
"Reply-To: {$model->email}\r\n".
"MIME-Version: 1.0\r\n".
"Content-Type: text/plain; charset=UTF-8";

mail(Yii::app()->params['adminEmail'],$subject,$model->body,$headers);
Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.');
$this->refresh();
}
}
$this->render('contact',array('model'=>$model));
}


public function actionLogin()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
$form->attributes=$_POST['LoginForm'];
if($form->validate() && $form->login()) $this->redirect(Yii::app()->user->returnUrl);
}

$this->render('login',array('form'=>$form));
}

public function actionLogout()
{
Yii::app()->user->logout();
$this->redirect(Yii::app()->homeUrl);
}

这是模型

<?php

class LoginForm extends CFormModel

{
public $email;
public $password;


private $_identity;

public function rules()
{
return array(
array('email, password', 'required'),
array('email', 'email'),
array('password', 'authenticate'),
);
}
public function attributeLabels()
{
return array('email'=>'Email Address');
}
public function authenticate($attribute,$params)
{
if(!$this->hasErrors()) // we only want to authenticate when no input errors
{
$identity=new UserIdentity($this->email,$this->password);
$identity->authenticate();
switch($identity->errorCode)
{
case UserIdentity::ERROR_NONE:
Yii::app()->user->login($identity);
break;
case UserIdentity::ERROR_USERNAME_INVALID:
$this->addError('email','Email address is incorrect.');
break;
default: // UserIdentity::ERROR_PASSWORD_INVALID
$this->addError('password','Password is incorrect.');
break;
}
}
}
public function login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->username,$this->password);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
else
return false;
}

这里是风景

<?php
/* @var $this SiteController */
/* @var $model LoginForm */
/* @var $form CActiveForm */

$this->pageTitle=Yii::app()->name . ' - Login';
$this->breadcrumbs=array(
'Login',
);
?>
<h1>Login</h1>

<p>Please fill out the following form with your login credentials:</p>

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>

<p class="note">Fields with <span class="required">*</span> are required.</p>
<div>
<?php echo CHtml::beginForm(); ?>

<?php echo CHtml::errorSummary($form); ?>

<div>
<?php echo CHtml::activeLabel($form,'email'); ?>
<?php echo CHtml::activeTextField($form,'email') ?>
</div>

<div>
<?php echo CHtml::activeLabel($form,'password'); ?>
<?php echo CHtml::activePasswordField($form,'password') ?>
</div>

<div>
<?php echo CHtml::submitButton('Login'); ?>
</div>

<?php echo CHtml::endForm(); ?>

结束小组件(); ?>

最佳答案

如果您包含更多错误会更好 - 例如它发生在哪一行以及哪个文件中,或者充其量是整个跟踪..从我在你的代码中读到的内容来看,你似乎覆盖了 $form 变量,它实际上保存了你的模型。在 SiteController 中,您使用 LoginForm 模型初始化变量 $form。然后在 View 中你做了这个错误的调用:

    <?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
?>

因此,在所有 CHtml 调用中,您将一个小部件而不是模型变量放入函数中

由于您没有以任何特定方式使用小部件的输出,因此删除 $form = $this->widget... 并仅将其保留为 $this->widget.. 或将变量替换为新变量。

  <?php $myWidget = $this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
?>

关于php - CActiveForm 及其行为没有名为 "getErrors"的方法或闭包。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035950/

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