Yii2 Как вызвать действие контроллера из представления

У меня есть функция в контроллере, которая манипулирует данными так, как я хотел. Теперь я хочу вызвать эту функцию в файле index.php в файле view. Как я могу это сделать?

В моем контроллере

function actionTesting($params){
    .....
}

Как я могу назвать это в представлении, например..

<?php
   echo $this->testing($params);//Calling unknown method: yii\web\View::testing()
?>

person beginner    schedule 28.04.2015    source источник


Ответы (3)


Вы не должны вызывать действия контроллера из представления. Я думаю, что это нарушает шаблон MVC.

Насчет ошибки понятно, $this в представлении относится к yii\web\View, а не к контроллеру и метода testing там явно не существует.

Ранее уже задавался похожий вопрос, здесь возможное решение (кредиты для Manesh):

Yii::$app->runAction('controller/action', ['param1' => 'value1', 'param2' => 'value2']);

Этого недостаточно, чтобы просто вызвать действие контроллера как обычный вызов метода, потому что нужно применить некоторые события и т. д.

Я не рекомендую использовать этот подход, лучше перенести свою логику на компонент/модель в зависимости от ее типа.

person arogachev    schedule 28.04.2015

вы можете использовать это.

echo $this->context->testing($params); 

кредиты оригинальный вопрос Metacrawler ссылка

person Bloodhound    schedule 28.11.2015
comment
Этот короче, но все же является плохой практикой. - person arogachev; 18.05.2016
comment
И я не уверен, будут ли применяться события в этом случае. - person arogachev; 29.10.2016

ты можешь сделать вот так

 $parse = array(
   ...............
   'aliasName' => $this,
   ..............
);
return $this->render('viewFile',$parse);

и чем вы можете вызвать функцию, например

<?php echo $aliasName->testing($param) ?>
person Zean A.    schedule 31.10.2018