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 -->
コントローラのアクション:
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));
}
}
}