Как использовать Twig в MVC, в моделе?

Как правильно использовать шаблонизатор в mvc?
Twig->render и т.д, это должно быть в моделе?
  • Вопрос задан
  • 1504 просмотра
Решения вопроса 1
Модель, если простыми словами, это класс, описывающий структуру конкретной таблицы + гетеры и сеттеры. Отдавать страничку будет у вас контроллер. Я в своем проекте делаю так:
Класс, отвечающий за работу твига:
<?php
namespace View;

use Controller\Error;
use Twig_Environment;
use Twig_Loader_Filesystem;

class TwigView implements IView
{
    /**
     * @var Twig_Environment
     */
    private $twig;
    /**
     * @var Twig_Loader_Filesystem
     */
    private $loader;
    /**
     * @var string
     */
    private $template;
    /**
     * @var array
     */
    private $params;

    /**
     * @param string $template Имя шаблона
     * @param array $params Передаваемые параметры
     */
    public function __construct($template, $params)
    {
        $this->loader = new Twig_Loader_Filesystem(TEMPLATE_DIR);
        $this->twig = new Twig_Environment($this->loader);
        $this->template = $template;
        $this->params = $params;
    }

    /**
     * @return string
     */
    public function render()
    {
        try {
            return $this->twig->render($this->template, $this->params);
        } catch (\Twig_Error_Loader $e) {
            $error = new Error();
            $error->index404();
        }
    }
}

В контроллере (метод вывода всех пользователей системы):
public function index()
    {
        $this->isAuthorized('users');
        try {
            $twig = new TwigView('Users/ShowAllUsers.twig',
                [
                    'session' => $_SESSION,
                    'user' => $this->em->getRepository('Model\User')->getAll()
                ]
            );
            print $twig->render();
        } catch (DatabaseException $e) {
            $error = new Error();
            $error->index1010($e->getMessage());
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы