4

開発中のシンプルなWebサイトにSlimフレームワークを使用しており、Twigテンプレートエンジンも使用したいと考えています。

Slim、Slim Extras、Twigをインストールしましたが、index.phpファイルには次の内容が含まれています。

<?php

/* Require and initialize Slim and Twig */
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
require 'Twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register();

$app = new \Slim\Slim(array(
    'view' => new \Slim\Extras\Views\Twig()
));

/* Application routes */
$app->get('/', function () {
    $pageTitle = 'hello world';
    $body = 'sup world';

    $app->view()->setData(array('title' => $title, 'body' => $body));
    $app->render('index.html');
});

/* Run the application */
$app->run();

ただし、これによりエラーが発生します。Fatal error: Call to a member function view() on a non-object in C:\xampp\htdocs\index.php on line 18

TwigをSlimで適切に使用する方法がわからないことを認めます。ディレクトリ構造とTwigのロード方法に関するStackOverflowの投稿に従いましたが、ビューにカスタムデータを追加する方法がわからず、Twigのビューファイルをどこに保存する必要があるのか​​わかりません。

私はグーグルで検索しましたが、多くの情報は古いバージョンのSlimに関するものであり、Slimのドキュメント自体が不足しています。

ありがとう!

4

2 に答える 2

15

これは単純なphpエラーです。スコープにインポートされていないクロージャ内の変数にアクセスしようとしています。次のように修正してください。

$app->get('/', function () use ($app) {
    // $app will work here
});
于 2013-01-30T08:51:25.310 に答える
2

新しいスリムフレームワーク(2.2以降)のレイアウトは、コンポーザーコンポーネントとして提供されます。また、Twigのドキュメントは、オブジェクトに何をどのように説明するかについては少しあいまいです。単純なファイルシステム環境を初期化する方法を理解するのに少し時間がかかりました。誰かがこの質問を踏んだらそれが役立つことを願っています:

例:

作業中/現在のフォルダには、次のフォルダ/ファイルがあります。

templates
    home_page.html
vendor
    slim
    twig
    .
    .
index.php
composer.json

TemplatesTwigのテンプレートファイルを配置するvendor場所であり、コンポーネントが存在するフォルダー(Slim、Twig ...残り)でindex.phpあり、Slimアプリケーションでありcomposer.json、コンポーザーの制御ファイルです。

私の初期化は次のようになります。

    <?php
    require_once 'vendor/autoload.php';
    // require 'Slim/Slim.php'; (old way)
    \Slim\Slim::registerAutoloader();

    $loader = new Twig_Loader_Filesystem('./templates');
    $twig = new Twig_Environment($loader /* ,array(twig config) */);

    $app = new \Slim\Slim();

ローダー付きのTwig_Loader_Filesystemに注意してください(Twigsの最初の例では何が問題なのかを理解するのに少し時間がかかりました$loader = new Twig_Loader_String();。あることを書き、別のことを行うことを期待しているという事実を見つけるまで、ファイルからレンダリングされません。

レンダリングは次のようになります。

$template = $twig->loadTemplate('home_page.html');
echo $template->render( array( /* values for template */ ) );

また:

echo $twig->render('home_page.html',array( /* values for template */ ) );

次のことを忘れないでください:function(/ * params * /)use($ app、$ twig) astwigobject。

セキュリティ:Slimはファイルシステムに存在するフォルダをカバー/保護しないため、.htmlよりも.phpテンプレートを作成する方が安全であることに注意してください。たとえば、apacheはSlimにまったく相談せずにファイルを直接送信するか、テンプレートをWebから配置します。スペース。

于 2014-04-02T12:58:57.500 に答える