model
확장되는이 CActiveRecord
있고 .NET을 사용하여 해당 모델에 몇 가지 오류를 추가 한다고 가정 해 보겠습니다 $this->addError("foo", "Bar is broken");
.
이제 브라우저가 다음과 같이 AJAX 요청을 보낼 때 모델의 유효성을 검사한다고 가정 해 보겠습니다.
if(isset($_POST['ajax']) && $_POST['ajax']==='user-login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
내 질문은 다음과 같습니다. ¿ $model->getErrors()
유효성 검사 오류를 처리하는 Yii 코드 CActiveForm
가 클라이언트 측 코드를 수정하지 않고도 오류를 가져와 표시하도록 오류 ( 배열 반환)를 브라우저에 보내려면 어떻게 해야합니까?
=========== 편집 =========
로그인보기 :
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'usuarios-login-form',
'enableAjaxValidation'=>true,
)); ?>
<div class="row flush">
<div class="4u">
<?php echo $form->labelEx($model,'correo', array(
'class'=>'pull-right'
)); ?>
</div>
<div class="4u">
<?php echo $form->textField($model,'correo'); ?>
</div>
<div class="4u">
<?php echo $form->error($model,'correo', array(
'class'=>'pull-left alert'
)); ?>
</div>
</div>
<div class="row flush">
<div class="4u">
<?php echo $form->labelEx($model,'password', array(
'class'=>'pull-right'
)); ?>
</div>
<div class="4u">
<?php echo $form->passwordField($model,'password'); ?>
</div>
<div class="4u">
<?php echo $form->error($model,'password', array(
'class'=>'pull-left alert'
)); ?>
</div>
</div>
<div class="row flush">
<div class="4u"> </div>
<div class="8u">
<div class="pull-left infotxt">Los campos con <span class="required">*</span> son obligatorios.</div>
</div>
</div>
<div class="row flush">
<div class="4u"> </div>
<div class="8u">
<?php echo CHtml::submitButton('Iniciar sesion', array(
'class'=>'button alt pull-left loginbtn'
)); ?>
</div>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
제어 장치:
public function actionLogin()
{
$model=new Usuarios('login');
// if it is ajax validation request
if(isset($_POST['ajax']) && $_POST['ajax']==='usuarios-login-form')
{
echo CActiveForm::validate($model);
echo $model->login()->getErrors();
Yii::app()->end();
}
if(isset($_POST['Usuarios']))
{
$model->attributes=$_POST['Usuarios'];
if($model->validate() && $model->login()){
if(Yii::app()->user->getState('type')=='Admin'){
$this->redirect(array("admin"));
}elseif(Yii::app()->user->getState('type')=='User'){
$this->redirect(array("perfil"));
}
//$this->redirect(Yii::app()->user->returnUrl);
}else{
echo "adadasd";
echo $model->login();
}
}
$this->render('login',array('model'=>$model));
}
Usuarios 클래스의 로그인 방법 :
public function login(){
$identity = new UserIdentity($this->correo, $this->password);
$res = $identity->authenticate();
if($res == UserIdentity::ERROR_NONE){
Yii::app()->user->login($identity, 3600*24*7);
}else if($res == UserIdentity::ERROR_USERNAME_INVALID){
$this->addError("correo", "El usuario no existe");
}else if($res == UserIdentity::ERROR_PASSWORD_INVALID){
$this->addError("password", "La contraseña es incorrecta");
}else{
$this->addError("", "Error desconocido");
}
return $this;
}
모델에서 beforeValidate()
오류를 재정의 하고 논리를 확인할 수 있습니다.
protected function beforeValidate()
{
if($this->foo == 'broken') // check your logic
{
$this->addError("foo", "Bar is broken");//error on foo attribute
return false;
}
return parent::beforeValidate(); // keep the chain
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다