2016-08-08 2 views
0

사용자 시도의 유효성을 검사하기 위해 자체 로그인 양식을 쓰고 있습니다. 내 코드는 다음과 같습니다.Yii2 : 사용자 정의 로그인 폼이 작동하지 않습니다.

LoginForm.php : 인덱스

namespace common\models; 

use Yii; 
use yii\base\Model; 
use common\models\User; 

class LoginForm extends Model{ 

    public $username; 
    public $password; 
    public $rememberMe = true; 
    public $verification; 

    private $user; 

    public function rules(){ 
     return [ 
      [['username','password'],'trim'], 
      [['username','password'],'required','message'=>'Nothing Input Yet'], 
      ['username','validateUsername'], 
      ['rememberMe', 'boolean'], 
      ]; 
    } 

    public function validateUsername($attribute, $params){ 
     $user = User::find()->where(['username'=>$this->$attribute])->asArray()->one(); 
     if(!$user || md5($this->password)!=$user['password']){ 
       $this->addError($attribute,'Username/Password Error'); 
      }else{ 
       $this->user = $user; 
      } 
    } 
} 

코드 : 상관없이 여기에

<div class="container"> 
<?=Html::beginForm('','post',['enctype'=>'multipart/form-data','class'=>'form-signin'])?> 

     <h2 class="form-signin-heading">Please sign in</h2> 
     <?=Html::label('Username','username',['class'=>'sr-only'])?> 
     <?=Html::input('text','username',$model->username,['id'=>'username','class'=>'form-control','placeholder'=>'Username','autofocus'=>true])?> 
     <?=Html::error($model,'username',['class'=>'error'])?> 
     <?=Html::label('Password','password',['class'=>'sr-only'])?> 
     <?=Html::input('password','password',$model->password,['id'=>'inputPassword','class'=>'form-control','placeholder'=>'Password'])?> 
     <?=Html::error($model,'password',['class'=>'error'])?> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" value="remember-me"> Remember me 
      </label> 
     </div> 
     <?=Html::submitButton('Login',['class'=>'btn btn-lg btn-primary btn-block'])?> 

<?=Html::endForm()?> 
</div> 

namespace backend\controllers; 

use yii\web\Controller; 
use common\models\LoginForm; 
use Yii; 


class LoginController extends Controller{ 

    public $layout = 'login' ; 

    public function actionIndex(){ 

     $model = new LoginForm(); 

     if($model->load(Yii::$app->request->post()) && $model->validate()){ 
      return $this->redirect(['site/index']); 
     }else{ 
      echo "bad"; 
     } 

     return $this->render('index',['model'=>$model]); 
    } 

} 

이제 내 문제는 LoginController.php입니다 내가 입력 공백으로두면 양식을 제출 한 후 응답이 없습니다. "나쁜"출력 만 표시하십시오. 모든 코드를 검사했는데 어디서 잘못되었는지 알 수 없습니다. LoginForm 모델의 오류 메시지도 아닙니다. 예 : '아무 것도 입력하지 않음'.

ps : 출구라고하는 방법이있을 수 있지만 아직 시도하지 않은 것으로 나타났습니다. 내 고유 코드를 먼저 다음 기본 제공 방법으로 수정하고 싶습니다.

첨부 된 결과 출력 그림. enter image description here

답변

0

$model->validate() 에 대한 검사는 유효성 검사 규칙 일부 문제가있을 수

$model->load(\Yii::$app->request->post()); 

    if ($model->validate()) { 
    var_dump('validation ok'); 

    } else { 
     // validation failed: $errors is an array containing error messages 
     $errors = $model->errors; 
    } 

시도

public function rules(){ 
    return [ 
     [['username','password'],'trim'], 
     [['username','password'],'required','message'=>'Nothing Input Yet'], 
     ['username','validateUsername'], 
     ['rememberMe', 'boolean'], 
     [['verification'], 'safe'], 
     ]; 
} 
+0

안녕하세요, 컨트롤러에 오류 코드를 추가하고 빈 Array()를 반환합니다. 그리고 내 모델을 다시 확인하고, 오류를 찾을 수 없으며, 실수가 있는지 찾을 수 있습니까? 고맙습니다. – newbrant

+0

var_dump (\ Yii :: $ app-> request-> post())를 시도하고 제출 된 값이 ok인지 확인하십시오. – scaisEdge

+0

더하기, Yii2 디버그 구성 요소를 사용하여 페이지가 $ _POST를 올바른 입력으로 제출하는 것 같습니다. 그러나 출력 페이지의 리다이렉트 나 에러 메시지에 아무런 반응이 없습니다. ** 업데이트 ** : post()에 var_dump를 사용하고 실제로 입력을 검색합니다. 그러나 여전히 출력이 없습니다. – newbrant

1

Yii2 사용자 구성 요소의 기본 방법을 가지고 검증을 위해 안전한 추가 login이라는 사용자 세션을 생성합니다. 해당 기능은 Yii::$app->user->login($user)에 액세스 할 수 있습니다.

여기에 추가 된 메소드가 추가 된 클래스가 있습니다.

// may be doing it after validating 
namespace common\models; 

use Yii; 
use yii\base\Model; 
use common\models\User; 

class LoginForm extends Model{ 

public $username; 
public $password; 
public $rememberMe = true; 
public $verification; 

private $user; 

public function rules(){ 
    return [ 
     [['username','password'],'trim'], 
     [['username','password'],'required','message'=>'Nothing Input Yet'], 
     ['username','validateUsername'], 
     ['rememberMe', 'boolean'], 
     ]; 
} 

public function validateUsername($attribute, $params){ 
    $user = User::find()->where(['username'=>$this->$attribute])->asArray()->one(); 
    if(!$user || md5($this->password)!=$user['password']){ 
      $this->addError($attribute,'Username/Password Error'); 
     }else{ 
      $this->user = $user; 
     } 
} 
} 

// adding this below method 
public function login(){ 
if($this->user && Yii::$app->user->login($this->user)) return true; 
return false; 

} 

컨트롤러에서 새 메서드를 호출합니다.

if($model->load(Yii::$app->request->post()) && $model->validate() && $model->login()){ 
     return $this->redirect(['site/index']); 
} 

는 설정에 User 클래스 user 내부 구성 요소를 추가하는 것을 잊지 마십시오.

+0

코드를 보내 주셔서 감사합니다. ** config/main.php **에서 ** User ** 구성 요소가 사용 가능하다는 것을 확인했으나 동일한 결과, 응답 또는 오류 메시지가 표시되지 않습니다. 하지만 var_dump (... post())는 입력을 보여줄 수 있습니다. – newbrant

+0

클래스에 로그인 메소드를 추가하고 컨트롤러에서도 호출 했습니까? –

+0

예, 그렇지만 같은 오류가 발생하고 전혀 출력이 안되며 ** scaisEdge ** 지점에서 멈추었습니다 ** $ model-> load (Yii :: $ app-> request-> post()) ** false이고 다음 단계를 처리 할 수 ​​없습니다. – newbrant

관련 문제