Twig как правильно использовать? Добрый вечер! Создаю не особо большой проект, решил использовать ООП и twig. Только для того чтобы Front end и Back end лежали в отдельности. Структура сайта очень прост, есть левый сайдбар (динамический) где выводится меню и основной контент где текст тоже динамический. Для вывода контента создал класс articles, который выводит на свой шаблон articles.tpl a для меню класс menu который выводит на шаблон menu.tpl и этот шаблон подключается
И через render делаю вывод. //Объект для вывода меню $menu_object = new menu; $menu=$menu_object->view() echo $template->render(array('title'=>'Мой сайт', 'articles'=>$articles, 'menu_pages'=>$menu)); И вопрос, внутри класса articles создать объект(ы) для вывода меню и отправить на вывод это нормально? Если нет то как можно вывести чтоб не было дублирование кода.
Да, создание объектов внутри класса articles для вывода меню не является хорошей практикой, так как это нарушает принципы ООП и приводит к повторному использованию кода.
Чтобы избежать дублирования кода, можно использовать композицию объектов. В вашем случае, вы можете создать объект меню вне класса articles и передать его в конструктор класса articles или используйте зависимость через метод внутри класса для передачи объекта меню вместо создания нового объекта внутри.
Пример:
$menu_object = new menu; $articles = new articles($menu_object); $articles_content = $articles->view(); echo $template->render(array('title'=>'Мой сайт', 'articles'=>$articles_content, 'menu_pages'=>$menu_object->view()));
В классе articles вы можете использовать переданный объект меню для вывода меню вместо создания нового объекта:
class articles { private $menu; public function __construct($menu) { $this->menu = $menu; } public function view() { // Ваш код для вывода контента $menu_content = $this->menu->view(); return $content; } }
Таким образом, вы избежите дублирования кода и соблюдете принципы ООП.
Да, создание объектов внутри класса articles для вывода меню не является хорошей практикой, так как это нарушает принципы ООП и приводит к повторному использованию кода.
Чтобы избежать дублирования кода, можно использовать композицию объектов. В вашем случае, вы можете создать объект меню вне класса articles и передать его в конструктор класса articles или используйте зависимость через метод внутри класса для передачи объекта меню вместо создания нового объекта внутри.
Пример:
$menu_object = new menu;$articles = new articles($menu_object);
$articles_content = $articles->view();
echo $template->render(array('title'=>'Мой сайт', 'articles'=>$articles_content, 'menu_pages'=>$menu_object->view()));
В классе articles вы можете использовать переданный объект меню для вывода меню вместо создания нового объекта:
class articles {private $menu;
public function __construct($menu) {
$this->menu = $menu;
}
public function view() {
// Ваш код для вывода контента
$menu_content = $this->menu->view();
return $content;
}
}
Таким образом, вы избежите дублирования кода и соблюдете принципы ООП.