2013-02-26 9 views
0

Я тестировал Twig на локальном хосте ... код здесь такой же, как и в this question но запрос отличается:Сообщения об ошибках и сообщения об ошибках - это нормально?

 <?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 vs 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 и использую последнюю сборку со своего сайта, это актуально.

ответ

2

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

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

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


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

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

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