php - Yii - getActiveFormWidget() 在核心中返回错误类型?

标签 php yii yii-cformmodel yii-cform

我只是想创建一个非 AJAX 注册表单。

当我通过 CForm 提交时,PHP 说 error() 正在非对象上调用。我检查了发生错误的源文件,并(使用 var_dump(get_class($parent->getActiveFormWidget()));)发现 getActiveFormWidget() 返回一个 CFormInputElement,没有定义 error()。

我认为这与CForm::activeForm有关,但默认为 CActiveForm

我确实尝试了'enableAjaxValidation'=>false

我不明白什么?我怀疑我一路上误解了一些东西。

CFormInputElement::renderError():

public function renderError()
{
    $parent=$this->getParent();

    // $parent->getActiveFormWidget() returns object that does not define error()

    return $parent->getActiveFormWidget()->error($parent->getModel(), $this->name, $this->errorOptions, $this->enableAjaxValidation, $this->enableClientValidation);
}

型号:

class RegisterFormModel extends CFormModel {

    public $email;
    public $password;
    public $password_confirm;

    public function rules()
    {
        return array(
            array('email, password, password_confirm', 'required'),
            array('password','compare','compareAttribute'=>'password_confirm'),
            array('password, password_confirm','length','min'=>'6','max'=>'20'),
            array('email', 'email'),
            array('email', 'length', 'max'=>256)
        );
    }

    public function attributeLabels()
    {
        return array(
            'email'=>'Email',
            'password'=>'Password',
            'password_confirm'=>'Confirm Password',
        );
    }
}

查看:

<div class="form">
<?php echo $form; ?> 
</div><!-- form -->

Controller 操作:

class RegisterAction extends CAction
{
    public function run()
    {
        $register_model = new RegisterFormModel;

        $controller = $this->getController();

        $form = new CForm(array(
            'title'=>'Register',
            'enableAjaxValidation'=>false,
            'elements'=>array(
                'email'=>array(
                    'type'=>'text',
                    'maxlength'=>256,
                ),
                'password'=>array(
                    'type'=>'password',
                    'minlength'=>6,
                    'maxlength'=>32,
                ),
                'password_confirm'=>array(
                    'type'=>'password',
                    'minlength'=>6,
                    'maxlength'=>32,
                ),
            ),

            'buttons'=>array(
                'register'=>array(
                    'type'=>'submit',
                    'label'=>'Register',
                ),
            ),
        ), $register_model);

        if($form->submitted('register', true) && $form->validate())
        {
            // ...
        }
        else
        {
            $controller->render('register', array('model'=>$register_model, 'form'=>$form));    
        }
    }    
}

最佳答案

嗯,我从未见过像您向我们展示的那样使用 CForm。

我建议您使用事件表单小部件,

http://www.yiiframework.com/wiki/195/implementing-a-registration-process-using-the-yii-user-management-module/

并且您需要在 CFormModel 中定义所有这些字段。这样您就能够为它们提供适当的验证。

关于php - Yii - getActiveFormWidget() 在核心中返回错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384733/

相关文章:

php - 如何在 php 中的 google analytic api v4 中使用不完全精确的运算符创建动态段?

php - 我的代码是否使用最佳方式来读取 php 中的标准输入?

php - API 平台中的自定义操作不会 Autowiring 实体

php - Solr 不显示所有索引数据

PHP 允许的内存大小 内存大小耗尽

php - 从 GET/POST 预填充 Yii 表单

php - 在 php 5.3 版本上将 mysql 类转换为 mssql 类

css - 蓝图/Yii 表格颜色

Yii - Cactiveform、cform、表单生成器 - 困惑

php - CModel 对比 CFormModel 对比 CActiveRecord