2016-08-08 22 views
0

私は自分のログインフォームを作成してユーザーの試行を検証しています。 ここに私のコードです。Yii2:カスタマイズされたLoginFormが動作していません

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> 

ここでは、今、私の問題は、どんなI入力、ではありませんLoginController.php

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]); 
    } 

} 

ですそれを空白のままにしておけば、フォームを提出しても応答がありません。 「悪い」出力のみを表示します。 私はすべてのコードをチェックして、どこが間違っているかを知ることができませんでした。 LoginFormモデルからのエラーメッセージさえありません。例:「何も入力しない」

ps:exitと呼ばれる方法があるかもしれませんが、まだ試していないことがわかりました。自分のコードを最初にプロセスの次の組み込みメソッドに修正したいと思っています。

結果出力画像を添付しました。 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デバッグコンポーネントを使用して確認します。しかし、出力ページのリダイレクトやエラーメッセージには反応しません。 ** update **: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

コードのおかげで、ちょうど試して** User **コンポーネントが** config/main.php **で有効になっていることを確認しましたが、同じ結果、応答もエラーメッセージもありません。 var_dump(... post())は入力を表示できます。 – newbrant

+0

クラスにログインメソッドを追加しましたが、コントローラでも呼び出されましたか? –

+0

はい、同じエラーですが、全く出力がありません** ** $ model-> load(Yii :: $ app-> request-> post())**が返すような** scaisEdge ** falseであり、次のステップを処理できません。 – newbrant

関連する問題