Соответствует ли решение заданию?Создайте объект класса View, удовлетворяющий следующим требованиям:

Задание:

  1. Создайте объект класса View, удовлетворяющий следующим требованиям:
  2. Конструктор не имеет аргументов (а может быть вообще не нужен никакой конструктор)
  3. Есть метод assign($name, $value), чья задача - сохранить данные, передаваемые в шаблон по заданному имени (используйте защищенное свойство - массив для хранения этих данных)
  4. Есть метод display($template), который отображает указанный шаблон с заранее сохраненными данными
  5. Метод render($template), который аналогичен методу display(), но не выводит шаблон с данными в браузер, а возвращает его

Решение:

Файл: index.php

<?php

require __DIR__ . '/src/View.php';
$view = new View;
$view->assing('title', 'Главная страница');
$view->assing('h1', 'Привет!');
$view->assing('p', 'МИР');
$view->render(__DIR__ . '/templates/index.php');
//$view->display(__DIR__ . '/templates/index.php');

Файл: /templates/index.php


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?php echo $this->data['title']; ?></title>
</head>
<body>
   <h1><?php echo $this->data['h1']?></h1>
    <p><?php echo $this->data['p']?></p>
</body>
</html>

Файл: /src/View.php

<?php

class View
{
    protected $data = [];

    public function assing($name, $value){
         $this->data[$name] = $value;
    }

    public function display(string $template){
        echo require $template;
    }

    public function render(string $template){
        ob_start();
        require  $template;
        return ob_end_flush();
    }
}

Ответы (1 шт):

Автор решения: Ivan Dudarev
<?php

include $view->display('template');

Инклюд здесь явно не нужен. Должно быть просто $view->display('template');

Метод assign() должен назначать переменной шаблона какое-то значение. Например, если сделать $view->assign('title', 'Главная'); должен назначить заголовок страницы Главная

Метод render() в целом правильно, но в него нужно передавать полный путь файла.

Метод display() по идее должен выглядеть как-то так:

<?php
class View
{
    // ...

    public function display($template)
    {
        echo $this->render($template);
    }
    
    // ...
}
→ Ссылка