2012-02-06 2 views
3

Я привык работать с Zend Framework, где я могу сделать частичный рендеринг. В этом рендере вызывается соответствующее действие, и я получаю вывод из рендера.Провести несколько действий (с представлениями) в Yii

Теперь, есть ли способ сделать что-то подобное с YII тоже? Я делаю запрос к контроллеру/действию, который является отчетом нескольких расчетов. Поскольку комбинация вычислений не является одинаковой для каждого отчета, я создал контроллер для каждого расчета. Каждый контроллер имеет действие, называемое отчет, где выполняются вычисления. В этом действии отчета используются данные из базы данных. Есть ли способ создать страницу с несколькими видами? (по одному для каждого расчета)

ответ

3

Имейте одну функцию контроллера, в которой он вызвал другую функцию, чтобы получить различные вычисления, чтобы получить данные, затем проанализируйте это в шаблоне, где вы сможете разобрать их на частичные.

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

public function actionCal() 
{  
    $data = array(); 
    $data['finance'] = $this->financeCal(); 
    $data['holiday'] = $this->holidayCal();        
    $this->render('calculation', array('data'=>$data)); 
} 

Ввиду

<?php $this->renderPartial('//cal/_finance_summary', array('financeData'=>$data['finance'])); ?> 
    <?php $this->renderPartial('//cal/_holioday_summary', array('holidayData'=>$data['holiday'])); ?> 
+0

Интересно. Разные вычисления находятся в одном контроллере в вашем примере кода? Могу ли я использовать их в нескольких контроллерах? Как? – koko

+0

Да, вы могли бы написать многоразовые функции, которые могут использоваться несколькими контроллерами. Например, новое действие также может вызвать $ this-> holidayCal(); для получения требуемой информации для этого контроллера. –

+0

Я сделал некоторое переосмысление моей проблемы, и я думаю, что вычисления должны идти в модели. Не в действии контроллера. – koko

1

У вас есть renderPartial в Yii, так что это не должно быть проблемой. Просто структурируйте свои методы (действия) таким образом, чтобы вы могли их повторно использовать. PS: третий параметр renderPartial позволяет получить возвращаемый результат вместо печати.

+0

Я попробовал его с renderPartial от Yii, но, похоже, я не прошел через действие. Приложение покажет мне только рендер, не обработав действие. Или я ошибаюсь? (Скажите, пожалуйста, я ошибаюсь, поэтому моя проблема решена: -p) – koko

0

Я просто добавил public property $data мой класс базового контроллера. Затем в каждом действии я использую $this->data для отправки переменных в представления. И если мне нужно отобразить некоторый файл вида из другого файла вида, я также использую $this->data

0

Также вы можете использовать виджеты Yii для этой цели.

Смежные вопросы