树枝和错误信息 - 这是正常的吗?

时间:2013-02-26 22:43:02

标签: twig

我一直在localhost上测试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和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的新手,并使用他们网站上的最新版本,这是相关的。

1 个答案:

答案 0 :(得分:2)

您没有收到Twig错误,因为模板中不存在错误,而是生成这些模板的代码中存在错误。

PHP遇到了将$data的值放在数组中的问题,因为该变量不存在。

如果要查看twig如何处理错误,则需要访问模板内的非现有变量。例如,将{{ notExisting }}放在当前模板中。


我已经可以说Twig通过在PHP中抛出解析异常来处理错误。 Twig抛出的所有异常都在扩展Twig_Error。要捕获这些,请使用try { ... } catch (\Twig_Error $e) { ... }块。

此外,Twig可以抛出3种不同类型的异常:

    解析模板时发生错误时会抛出
  • Twig_Error_Syntax。(例如,使用格式错误的标签)。
  • 当Twig无法加载文件时,抛出
  • Twig_Error_Loader。使用render()方法或在Twig中使用某些文件功能时可能会发生这种情况(例如{% extends ... %})。
  • 运行时发生错误时抛出
  • Twig_Error_RunTime(例如扩展内的错误)。