2017-04-12 87 views
1

我的LoginController類是從UserController擴展而來的。我想ovverride UserController的一種方法。一切正常,但$ this-> render('index')調用子類的視圖。我想調用父類的視圖。我曾嘗試使用parent :: render('index'),但是它也不工作。這裏是我的代碼在子類中呈現父類視圖

<?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

Yii 2 Guide

如果視圖名稱與單斜線/開始,該視圖的文件路徑與前綴視圖名稱形成查看當前活動模塊的路徑。如果沒有活動模塊,將使用@app/views/ViewName。例如,/user/create將被解析爲@app/modules/user/views/user/create.php,如果當前活動的模塊是user。如果沒有活動模塊,則視圖文件路徑將爲@app/views/user/create.php

所以使用:

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

它仍然在前端/視圖中查找文件,而不是查看供應商文件夾中的父類的文件 – james

+0

正確的,已更正的答案。 – Bizley

+0

它不在前端,而是在供應商文件夾中。而通過完整的路徑或複製前端的視圖文件肯定會奏效。但是我想要的是$ this,它調用當前類上下文中的渲染,並且我想在父類上下文中調用渲染。可能嗎? – james

2

視圖通常不會被班組織..所以你應該叫你所需要的視圖..

例如,用於登錄查看

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

或另一個名爲視圖名稱:在my_new_view_login(views/your_controller/my_new_view_login.php

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

的視圖文件是在供應商的文件夾,但試圖通過您的解決方案仍然尋找它在前端/視圖 – james

2

您需要使用完整路徑才能查看文件。如果它是一個擴展,使用路徑從別名

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

的視圖文件是在供應商的文件夾,但試圖通過您的解決方案是仍然在前端/視圖中查找 – james

+0

您仍然需要使用完整路徑,但是使用基本模塊名稱空間中的絕對路徑。我編輯了答案。 – wormi4ok