0

私はローカルホストでTwigをテストしてきました...ここのコードはこの質問と同じですが、クエリは異なります:

     <?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とSmartyを比較していたので、存在しないレコードをクエリして、Twigのエラー処理がどのようなものかを確認することにしました。次のエラーメッセージが表示されます。

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を初めて使用し、彼らのサイトからの最新のビルドを使用しています。

4

1 に答える 1

3

エラーはテンプレートには存在しませんが、これらのテンプレートを生成しているコードには存在するため、Twigエラーは発生しません。

PHPには$data、その変数が存在しないため、の値を配列内に配置する際の問題があります。

twigがエラーを処理する方法を確認したい場合は、テンプレート内の存在しない変数にアクセスする必要があります。たとえば{{ notExisting }}、現在のテンプレートを入力します。


TwigはPHPで解析例外をスローすることでエラーを処理しているとすでに言えます。Twigによってスローされたすべての例外は拡張されていTwig_Errorます。これらをキャッチするには、try { ... } catch (\Twig_Error $e) { ... }ブロックを使用します。

さらに、Twigは3つの異なるタイプの例外をスローできます。

  • Twig_Error_Syntaxテンプレートの解析中にエラーが発生した場合(たとえば、不正な形式のタグを使用した場合)にスローされます。
  • Twig_Error_LoaderTwigがファイルをロードできない場合にスローされます。これは、render()メソッドを使用している場合、またはTwigでいくつかのファイル機能を使用している場合に発生する可能性があります(例{% extends ... %})。
  • Twig_Error_RunTime実行時にエラーが発生した場合にスローされます(たとえば、拡張機能内のエラー)。
于 2013-02-26T22:57:30.667 に答える