Чистый способ передачи переменной в частичное представление - PullRequest
2 голосов
/ 18 января 2012

Я ищу чистый способ передачи переменных в частичные представления. Рассмотрим следующий пример кода:

В моем контроллере я делаю:

$this->view->articles = $arrayWithArticles;
$this->render('articles.phtml');

В моем article.phtml представлении, которое я делаю:

foreach($this->articles as $article) {
    // show article

    $this->render('comments.phtml');
}

В другом контроллере я делаю:

$this->view->products = $arrayWithProducts;
$this->render('products.phtml');

В моем products.phtml представлении, которое я делаю:

foreach($this->products as $product) {
    // show product

    $this->render('comments.phtml');
}

Как вы можете видеть, я использую то же (частичное) представление comments.phtml для отображения комментариев о написанных статьях, а также о продуктах. «Комментарии», которые я хочу отобразить, находятся в $article->comments и $product->reviews. Частичное представление потребуется для их отображения.

Что бы было чистым способом передать их в частичное представление. Я действительно не хочу делать:

$this->comments = $article->comments;
$this->render('comments.phtml');

Потому что это может стать трудной задачей для отслеживания (то есть установка одинаковых переменных вида в обоих контроллерах, как в виде). ​​

Есть ли чистое решение для передачи переменных в частичные представления?

1 Ответ

1 голос
/ 18 января 2012

Что ж, я думаю, что добавления параметра к вашему render() методу будет достаточно. Может быть что-то вроде ...

$this->renderSubView($fileName, $data);

Тогда в renderSubView() вы можете делать все, что вам нужно, с массивом и возвращать визуализированное частичное представление. Таким образом, вам не нужно повторно объявлять переменную в представлении, просто передавайте данные, соответствующие этому конкретному фрагменту, когда он отображается.

...