2017-08-05 2 views
0

J'ai étendu la classe de contrôleur "dektrium/yii2-user" comme ci-dessous, maintenant je veux avoir $authItems dans le fichier de vue rendu de la classe parent, comment dois-je passer cette variable?Passer le paramètre pour voir l'action de la classe étendue

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(); 


    } 
} 

sa principale méthode est de classe

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

Répondre

0

Une solution pourrait être ne prononcez pas le parent :: actionRegister(); et ajoutez le code directement dans votre actionRegister et durent ajouter les autItems aux paramètres

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

quel chemin doit être vu dans la méthode de rendu? ce point de vue dévers recogonize i changé ' retour $ this-> render ('utilisateur/enregistrement/inscription', [ 'modèle' => $ model, 'module' => Module $ this->, ' authItems '=> $ authItems, ]); ' mais ne fonctionne pas – moh

+0

où est votre vue de registre? .. où vous avez placé votre vue de registre? dans quel répertoire? – scaisEdge

+0

@scaisEdhe il est dans les vues/utilisateur/enregistrement/répertoire + vue est overrided dans le fichier de configuration web.php comme ' 'view' => [ 'thème' => [ 'pathMap' => [ ' @ dektrium/user/views '=>' @ app/views/user ' ], ], '],' – moh

0

tableau de fonction render je ferais quelque chose comme ceci:

Ajouter une variable membre à votre classe étendue, telle comme:

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(); 


    } 
} 

Ensuite, dans votre classe parent, faire un test pour voir si cette variable est définie comme:

public function actionRegister() 
{ 

    //......... 

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