Twig и сообщения об ошибках - это нормально?

Я тестировал Twig на localhost ... код здесь такой же, как в этом вопросе но запрос другой:

     <?php
// include and register Twig auto-loader
include 'Twig/Autoloader.php';
Twig_Autoloader::register();

// attempt a connection
try {
  $dbh = new PDO('mysql:dbname=world;host=localhost', 'root', 'mypass');
} catch (PDOException $e) {
  echo "Error: Could not connect. " . $e->getMessage();
}

// set error mode
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// attempt some queries
try {
  // execute SELECT query
  // store each row as an object
  $sql = "SELECT manufacturer, model, modelinfo FROM automobiles WHERE id = '4' ";
  $sth = $dbh->query($sql);
  while ($row = $sth->fetchObject()) {
    $data[] = $row;
  }

  // close connection, clean up
  unset($dbh); 

  // define template directory location
  $loader = new Twig_Loader_Filesystem('templates');

  // initialize Twig environment
  $twig = new Twig_Environment($loader);

  // load template
  $template = $twig->loadTemplate('cars.html');

  // set template variables
  // render template
  echo $template->render(array (
    'data' => $data
  ));

} catch (Exception $e) {
  die ('ERROR: ' . $e->getMessage());
}
?>

У меня 3 записи; Я решил запросить несуществующую запись, чтобы увидеть, на что похожа обработка ошибок Twig, когда я сравнивал Twig и Smarty - из интереса и для проекта. Появляется это сообщение об ошибке:

Notice: Undefined variable: data in /Applications/MAMP/htdocs/mysite/twigtesting.php on line 42

Наверняка должно появиться уведомление «Данные не найдены» или я здесь ошибаюсь? Неопределенные переменные данные относятся к:

      // set template variables
  // render template
  echo $template->render(array (
    'data' => $data
  ));

Почему это происходит? Я новичок в Twig и использую последнюю сборку с их сайта, если это актуально.


person avenas8808    schedule 26.02.2013    source источник


Ответы (1)


Вы не получите ошибку Twig, потому что ошибка существует не в шаблонах, а в коде, который генерирует эти шаблоны.

PHP не может поместить значение $data в массив, потому что эта переменная не существует.

Если вы хотите увидеть, как twig обрабатывает ошибки, вам нужно получить доступ к несуществующей переменной внутри шаблона. Например, добавление {{ notExisting }} в текущий шаблон.


Я уже могу сказать, что Twig обрабатывает ошибки, выбрасывая исключения синтаксического анализа в PHP. Все исключения, создаваемые Twig, расширяют Twig_Error. Чтобы поймать их, используйте блок try { ... } catch (\Twig_Error $e) { ... }.

Кроме того, Twig может выдавать 3 разных типа исключений:

  • Twig_Error_Syntax выдается, когда возникает ошибка при синтаксическом анализе шаблона (например, при использовании неверно сформированного теги).
  • Twig_Error_Loader выдается, когда Twig не может загрузить файл. Это может произойти при использовании метода render() или при использовании некоторых функций файла в Twig (например, {% extends ... %}).
  • Twig_Error_RunTime выдается, когда возникает ошибка во время выполнения (например, ошибка внутри расширений ).
person Wouter J    schedule 26.02.2013