传递参数以查看扩展类的操作

时间:2017-08-05 13:23:36

标签: yii2 yii2-advanced-app yii2-basic-app

我扩展了“dektrium / yii2-user”控制器的类,如下所示,现在我想在父类的渲染视图文件中有$authItems,我应该如何传递这个变量?

namespace app\controllers;
use app\models\AuthItem;
use dektrium\user\controllers\RegistrationController as BaseRegistrationController;
class RegistrationController extends BaseRegistrationController
{

    public function actionRegister()
    {
        $authItems = AuthItem::find()->all();

        return parent::actionRegister();


    }
}

它是主要类方法

 public function actionRegister()
    {
        if (!$this->module->enableRegistration) {
            throw new NotFoundHttpException();
        }

        /** @var RegistrationForm $model */
        $model = \Yii::createObject(RegistrationForm::className());
        $event = $this->getFormEvent($model);

        $this->trigger(self::EVENT_BEFORE_REGISTER, $event);

        $this->performAjaxValidation($model);

        if ($model->load(\Yii::$app->request->post()) && $model->register()) {
            $this->trigger(self::EVENT_AFTER_REGISTER, $event);

            return $this->render('/message', [
                'title'  => \Yii::t('user', 'Your account has been created'),
                'module' => $this->module,
            ]);
        }

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

2 个答案:

答案 0 :(得分:0)

解决方案可能是 不要调用parent :: actionRegister(); 并直接在actionRegister中添加代码 并最后将autItems添加到渲染函数数组参数

  class RegistrationController extends BaseRegistrationController
  {
      public function actionRegister()
      {
          $authItems = AuthItem::find()->all();

          // return parent::actionRegister();

          if (!$this->module->enableRegistration) {
                throw new NotFoundHttpException();
            }

            /** @var RegistrationForm $model */
            $model = \Yii::createObject(RegistrationForm::className());
            $event = $this->getFormEvent($model);

            $this->trigger(self::EVENT_BEFORE_REGISTER, $event);

            $this->performAjaxValidation($model);

            if ($model->load(\Yii::$app->request->post()) && $model->register()) {
                $this->trigger(self::EVENT_AFTER_REGISTER, $event);

                return $this->render('/message', [
                    'title'  => \Yii::t('user', 'Your account has been created'),
                    'module' => $this->module,
                ]);
            }

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

答案 1 :(得分:0)

我会做这样的事情:

将成员变量添加到扩展类,例如:

namespace app\controllers;
use app\models\AuthItem;
use dektrium\user\controllers\RegistrationController as BaseRegistrationController;
class RegistrationController extends BaseRegistrationController
{

    public $authitems;

    public function actionRegister()
    {
        $this->authitems = AuthItem::find()->all();

        return parent::actionRegister();


    }
}

然后在您的父类中,进行测试以查看是否设置了该变量,例如:

 public function actionRegister()
{

    //.........

    return $this->render('register', [
        'model'  => $model,
        'module' => $this->module,
        'authitems' => (isset($this->authitems)) ? $this->authitems : null;
    ]);
}