Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

273
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!