CActiveForm 及其行为没有名为“getErrors”的方法或闭包。

2024-03-05

你好,我对 yii 框架很陌生,目前正在尝试通过数据库身份验证建立登录。但我反复收到此错误

C异常

CActiveForm 及其行为没有名为的方法或闭包 “获取错误”。

任何人都可以帮我吗?

这是控制器

<?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你初始化变量$formLoginForm模型。 然后在视图中你做出了这个错误的调用:

    <?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,
            ),
        )); 
  ?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CActiveForm 及其行为没有名为“getErrors”的方法或闭包。 的相关文章

  • Drupal:需要上传文件吗?

    由于某种原因 当我尝试要求上传文件时 我的表单中断了 这是它的代码 form id upload form form form id array type gt fieldset description gt t This is a uti
  • 如何使用 WhatsAPI 官方在 PHP 中从 WhatsApp 发送消息?

    我正在尝试使用 WhatsApi 官方库通过 WhatsApp 从 php 文件发送消息 我已经将库移到了我的 Apache Web 服务器中的一个文件夹中 调用测试 如下所示 文件whatsapp php 是这样的
  • PHP Reflection:如何知道方法/属性/常量是否从特征继承?

    我想从列表中排除特征的所有继承方法 在类中未被覆盖的那么如何知道一个类成员是否继承自trait呢 是的 我可以这样检查 if trait gt hasMethod methodName ref gt getTraitAliases meth
  • WooCommerce |如何删除“缺货”可变价格范围

    我正在开发一个 WooCommerce 网站 该网站包含许多可变产品和用户角色 这些产品和用户角色会动态影响显示的价格 我需要创建一个代码片段 将其添加到我的functions php 文件中 以仅显示库存商品的可变产品价格范围 并根据用户
  • 身份验证器 LOGIN 返回预期响应代码 235,但收到代码“535”,并显示消息“535 身份验证数据不正确”

    您好 我正在尝试在 laravel 中发送电子邮件 但是当尝试发送时 它会生成以下错误 并且邮件未发送 但在本地主机上一切正常 没有任何问题 Failed to authenticate on SMTP server with userna
  • 将 UTC 日期转换为 PHP 本地时间

    我使用以下方法将 UTC 日期存储到数据库中 utc gmdate M d Y h i s A 然后我想将保存的 UTC 日期转换为客户端的本地时间 我怎样才能做到这一点 Thanks 如果客户端指的是浏览器 那么您首先需要从浏览器将时区名
  • 如何 POST 从 PHP 创建的 HTML 表数据

    while row mysql fetch array res echo tr echo td td tr
  • 使用 PHP 读取 cookie

    我正在尝试读取我用 javascript 设置的 cookie 特别是 jQuery Cookie 插件 然后我用 PHP 读取它以将其写入数据库 由于某种原因 cookie 是在页面加载时创建的 但在页面刷新之前并不 存在 这意味着我正在
  • ASP.NET Core 1.0 Web API 中的简单 JWT 身份验证

    我正在寻找最简单的方法来设置使用 JWT 在 ASP NET Core 又名 ASP NET 5 中进行身份验证的 Web API 服务器 这个项目 博客文章 http www codeproject com Articles 369657
  • Zend Framework - 需要从视图访问 GET 参数

    我正在使用 Zend 框架 我需要的是在我的视图中构造一个 url 通常 在常规 php 代码中 我只需使用全局 GET 获取 GET 变量 然而 对于 Zend 我将其设置为清理 URI 如下所示 ac 列表 过滤器 作品 页面 2 好像
  • 将自定义参数传递给登录页面 Identity Server 4 中使用的 returnUrl

    我正在使用 IdentityServer4 为使用混合流的客户端实现身份验证服务器 我成功地实现了自己的用户存储以及自己的客户 赠款和资源存储库 当用户想要登录时 客户端会将其重定向到我的身份验证服务器 如果未登录 则会显示登录页面 此时
  • 如何在 PHP >= 5.4 的特征中重载类构造函数

    在 PHP 5 中 我可以重载构造函数 以及任何其他方法 但是如果我得到这样的代码 class Base public function construct a b echo a b public function sayHello ech
  • PHP 中如何处理重复的表单输入?

    我有一个通过电子邮件发送 php 脚本的表单 网站的上下文使我有必要在用户单击按钮时添加重复的表单字段 如何正确处理表单输入 例如 我有一个车辆表单 当用户单击 添加车辆 时 我会附加几个车辆表单组的副本 这些表单输入具有相同的 名称 并且
  • CodeIgniter 3 - 在控制器中支持 API 和 Web 请求?

    我目前正在使用 CodeIgniter3 应用程序 并为标准的类似博客系统奠定了基础 该结构是标准 CI 用户请求页面 页面加载控制器方法 控制器方法从其模型调用任何相关的数据库函数 然后加载视图 不过 我还希望能够通过 API 访问此视图
  • 为什么这个基本的 imagejpeg() resizer 返回黑色图像?

    EDIT 感谢您的所有回答 特别是 Mailerdaimon 他注意到我没有在imagecopyresampled功能 我不再得到黑色图像 但我仍然得到一些黑色部分 所以我认为我的比例公式应该更新 如果我上传横向图像 新图像的高度小于 17
  • 使用 Oracle Wallet 身份验证从 Spring-jdbc 连接到 Oracle DB

    我将 Spring jdbc 与 org apache commons dbcp BasicDataSource 结合使用 使用用户名和密码进行连接 我想使用BasicDataSource 因为我只有一个连接 我有这个代码
  • PHP清晰度卷积矩阵

    我正在使用一个卷积矩阵 http www php net manual en function imageconvolution php为了锐度PHP GD我想改变清晰度 level 我会去哪里做出改变如果我想做到的话或多或少尖锐 imag
  • 在 Codeigniter 中显示来自连接的数据

    我正在使用简单的联接从两个数据库中提取数据 这是模型中的连接 function com control this gt db gt select this gt db gt from comments this gt db gt join
  • Paypal Rest API - 来自批准 URL 的令牌生命周期

    我使用 Paypal Rest API 我的问题是 有多长token来自批准 URL 有效吗 我想将此令牌 也包含我的令牌 存储到数据库并生成带有我的令牌的链接 稍后 如果我单击此链接 将我的令牌替换为 paypal 令牌 我想重定向到 p
  • PHP mysql 选择连接

    我有这个功能 以某种形式显示自动建议 function searchbyId params input strtolower params input len strlen input limit isset params limit in

随机推荐