Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

277
Visualizações
Yii1: Controlador::beforeRender en Yii2

Estoy migrando una aplicación antigua desarrollada en Yii1 a Yii2.

Solía tener una matriz en el controlador que almacenaba todas las variables que necesitaría enviar a la interfaz como JavaScript:

 public $jsVars; public function toJSObject($params){ $this->jsVars = array_merge($this->jsVars, $params); } private function printJSVarsObject(){ //convert my php array into a js json object }

Cuando necesitaba exponer una variable en Javascript, simplemente usaba $this->toJSObject, en la Vista o en el Controlador.

Luego, en el controlador también solía tener:

 public function beforeRender($view){ $this->printJSVarsObject(); }

En Yii2, tuve que configurar el componente Vista con una Vista personalizada y luego adjuntar un evento:

 namespace app\classes; use yii\base\Event; use yii\helpers\Json; Event::on(\yii\web\View::className(), \yii\web\View::EVENT_END_BODY, function($event) { $event->sender->registerJSVars(); }); class View extends \yii\web\View { public $jsVars = []; public function addJsParam($param){ $this->jsVars = array_merge($this->jsVars, $param); } public function registerJSVars() { $this->registerJs( "var AppOptions= " . Json::htmlEncode($this->jsVars) . ";", View::POS_END, 'acn_options' ); } }

Pero, tener el evento fuera de la clase me parece raro. Además, mientras esté en el controlador, no podré usar mi enfoque anterior con este método.

Obviamente, me estoy perdiendo algo, o mi enfoque es simplemente incorrecto.

¿Cómo hacen eso?

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si está intentando acceder a las propiedades del controlador desde una vista (¡vea los comentarios anteriores!), Puede usar;

 $this->context

para devolver una instancia del controlador utilizado actualmente desde el archivo de vista. Entonces, para acceder a su método beforeRender() , simplemente usaría

 $this->context->beforeRender()
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda