2017-04-12 89 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