• Почему не работает код в задаче гостевая книга на php?

    Skiphog
    @Skiphog
    Crutch developer
    Метод render() в классе View работает не так, как вы этого ожидаете.

    Когда вы подключаете шаблон, то в данном случае там доступен только $this, а $this - это сам объект View.
    Поэтому получить массив персон вы можете только через $this->data['persons'] и никакой $persons там естественно нет.
    т.е. в шаблоне работать будет только так
    //...
    foreach ($this->data['persons'] as $person) {
      echo $person['lastName'];
    //  ...
    }

    Понимаете?

    Для того, что был доступ в шаблоне именно к переменной $persons, вам надо импортировать её в методе render() с помощью функции extract() или через присваивание переменной переменной
    public function render(string $template) 
    {
      ob_start();
      // функция импорта
      extract($this->data, EXTR_OVERWRITE);
      include $template;
      $content = ob_get_contents();
      ob_end_clean();
    
      return $content;
    }

    Либо через переменные переменных

    public function render(string $template) 
    {
      ob_start();
      // Импорт
      foreach($this->data as $key => $value) {
       // Переменные переменных $$
        $$key = $value;
      }
      include $template;
      $content = ob_get_contents();
      ob_end_clean();
    
      return $content;
    }

    В том и другом случае результат одинаковый.

    И тогда в шаблоне вы уже сможете работать непосредственно с $persons
    Ответ написан
    2 комментария
  • Почему не работает код в задаче гостевая книга на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    По порядку:
    Браузер выдает следующую ошибку:
    Во первых не браузер, а сервер, а браузер ее только отображает. Во вторых это уведомление и предупреждение, а не ошибка.
    Далее, если ваш $view->assign('persons', $data); работает верно - значит в индексе ДО этого места в дата ничего нет. Что легко проверить с помощью вар_дамп. И если там не пусто - что-то в вашем вью работает криво, или не так как вы предполагаете, читайте документацию к данному методу.
    Ответ написан
    4 комментария