webmaxx
(Webmaxx)
February 27, 2015, 11:32am
1
Приветствую.
Как можно поменять/добавить переменные, передаваемые во view, в событии "View::EVENT_BEFORE_RENDER"?
Есть простой экшен:
public function testAction()
{
...
return $this->render('test', [
'foo' => 'test',
'bar' => 123,
]);
}
В каком нибудь месте есть перехват события:
\Yii::$app->view->on(View::EVENT_BEFORE_RENDER, function($event) {
// Как бы тут поменять переменные "$foo" и/или "$bar" или добавить свои?
});
В объекте $event есть параметр $params с этими переменными. Но толку их менять никакого. Ни на что не влияет.
Есть возможность передать во view переменную так:
$event->sender->params['key'] = 'value';
После чего в шаблоне обращаться к ней через:
$this->params['key']
Но это не то, чего хотелось бы. Главное, нужна возможность менять уже переданные во view переменные.
mihail_dev
(Mihail Cucer)
March 3, 2015, 10:31pm
2
нет это не возможно
if ($this->beforeRender($viewFile, [b]$params[/b])) {
Yii::trace("Rendering view file: $viewFile", __METHOD__);
$ext = pathinfo($viewFile, PATHINFO_EXTENSION);
if (isset($this->renderers[$ext])) {
if (is_array($this->renderers[$ext]) || is_string($this->renderers[$ext])) {
$this->renderers[$ext] = Yii::createObject($this->renderers[$ext]);
}
/* @var $renderer ViewRenderer */
$renderer = $this->renderers[$ext];
$output = $renderer->render($this, $viewFile, $params);
} else {
$output = $this->renderPhpFile($viewFile, [b]$params[/b]);
нет возможности заменить переменные
если переменные будут объектами то можно переконфигурировать их
$event->sender->params['key']->some = 'value';
webmaxx
(Webmaxx)
March 5, 2015, 8:45am
3
Блин. Была надежда, да сплыла. Благодарствую.
jilizart
(Jilizart)
March 7, 2015, 6:14pm
4
Одним из решений можно сделать класс со статическими переменными и им оперировать внутри экшена и внутри обработчка события. Ну и в шаблоне соответственно его же и использовать.