2017-04-12 5 views
1

MY LoginControllerクラスはUserControllerから拡張されています。私はUserControllerの1つのメソッドをオーバーライドしたい。すべてうまくいきますが、$ this-> render( 'index')は子クラスのビューを呼び出します。私は親クラスのビューを呼びたいと思う。私はparent :: render( 'index')を使ってみましたが、tahtはうまく動作しません。ここに私のコードですレンダリング子クラスの親クラスビュー

<?php 
namespace frontend\controllers; 
use Yii; 
use mdm\admin\models\form\Login; 
use mdm\admin\models\form\PasswordResetRequest; 
use mdm\admin\models\form\ResetPassword; 
use mdm\admin\models\form\Signup; 
use mdm\admin\models\form\ChangePassword; 
use mdm\admin\models\User; 
use mdm\admin\models\searchs\User as UserSearch; 
use yii\web\Controller; 
use yii\filters\VerbFilter; 
use yii\filters\AccessControl; 
use yii\web\NotFoundHttpException; 
use yii\base\UserException; 
use yii\mail\BaseMailer; 
use mdm\admin\controllers\UserController; 

class LoginController extends UserController 
{ 

    public function actionLogin() 
    { 
     //parent::actionLogin(); 
     if (!Yii::$app->getUser()->isGuest) { 
      return $this->goHome(); 
     } 

     $model = new Login(); 
     if ($model->load(Yii::$app->getRequest()->post()) && $model->login()) { 
      return $this->goBack(); 
     } else { 
      return parent::render('login', [ 
        'model' => $model, 
      ]); 
     } 
    } 
} 

私は取得していますエラーが enter image description here

ですが、私の意見では、それは子クラスでそれを見ているのではなく、親クラスビューを呼び出すべきであるということです。私はここで何が欠けていますか?

答えて

2

からのパスを使用します。ビュー名は、単一のスラッシュ/で始まる場合

、ビューファイルのパスがでビュー名を付けることによって形成されています。現在アクティブなモジュールのビューパスです。アクティブなモジュールがない場合、@app/views/ViewNameが使用されます。たとえば、現在アクティブなモジュールがuserの場合、/user/create@app/modules/user/views/user/create.phpに解決されます。アクティブなモジュールがない場合、ビューファイルのパスは@app/views/user/create.phpになります。

だから使用:

return $this->render('@mdm/admin/views/user/login', ['model' => $model]); 
+0

ベンダフォルダにある親クラスのビューファイルではなく、フロントエンド/ビューでファイルを探しています – james

+0

正解、正解です。 – Bizley

+0

フロントエンドではなくベンダーのフォルダにあります。そして、完全なパスを与えたり、フロントエンドのビューファイルを複製することは間違いなく機能します。しかし、私が欲しいのは、現在のクラスのコンテキストでレンダリングを呼び出す$のようなもので、私は親クラスのコンテキストでレンダリングを呼び出したい。出来ますか? – james

2

ビューは、通常、クラス別に整理されていません..あなたは...

ログインビュー用など

 return $this::render('login', [ 
       'model' => $model, 
     ]); 

かという別のビュー名のために必要なビューを呼び出す必要がありますので:(views/your_controller/my_new_view_login.phpでmy_new_view_loginを)

 return $this::render('my_new_view_login', [ 
       'model' => $model, 
     ]); 
+0

ビューファイルは、ベンダーのフォルダ内にあるが、あなたのソリューションを試みることによって、それはまだフロントエンドでそれを探す/ビュー – james

2

ファイルを表示するにはフルパスを使用する必要があります。それは拡張子がいた場合は、Yii 2 Guideから別名

return $this->render('@mdm/admin/views/user/login', ['model' => $model]); 
+0

ビューファイルは、ベンダーのフォルダ内にあるが、あなたのソリューションをしようとすることによって、それまだフロントエンド/ビューでそれを探します – james

+0

フルパスを使用する必要がありますが、ベースモジュールの名前空間から絶対パスを使用する必要があります。私は答えを編集しました。 – wormi4ok

関連する問題