0

私は現在、Smarty テンプレート エンジンで PHP Recess フレームワークを使用しています。私のコントローラーには、次のようなコードがあります。

/**
* !View Smarty
* !RespondsWith Smarty
* !Prefix Views: templates/, Routes: /
*/

class XHomeController extends Controller {

    /** !Route GET */
    function index()
    {
            $this->title = "Some title...";
    }

}

そして、対応する Smarty ビューでは、{$title}いつものように を参照します。

ビューは、Android ブラウザー (私の 2.3 Nexus One、3.2 タブレット、および Android エミュレーター) を除くすべてのブラウザーで正しくレンダリングされます。Smarty ビューがレンダリングされ、Content-type なしでブラウザーに送信されているという事実に問題を突き止めたと思います。

http://web-sniffer.net/を使用すると、レスポンスの Content-type が空であることがわかります。

Smarty を使用する場合、Recess で Content-type を指定するにはどうすればよいですか? コントローラーのメソッドに header('Content-type: text/html') を追加しようとしましたが、うまくいきません。

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

0

リセス/フレームワーク/ビューで SmartyView コードを確認したいと思います。そのクラスには、ビューが特定の MIMEType で応答できるかどうかを検証する canRespondWith() メソッドが必要です。例えば:

class XmlView extends AbstractView {

    public function canRespondWith(Response $response) {
            return 'xml' === $response->request->accepts->format();
    }
}

これが true を返す場合、XmlView が使用されます。AbstractView クラスでは、sendHeaders() メソッドが Content-Type を設定します。

protected function sendHeadersFor(Response $response) {
    header('HTTP/1.1 ' . ResponseCodes::getMessageForCode($response->code));

    $format = $response->request->accepts->format();
    header('Content-Type: ' . MimeTypes::preferredMimeTypeFor($format));
    /* ... */
}

'xml' が正しいヘッダーでどのように応答するかを確認するには、recess/http/MimeTypes.class.php を調べてください。また、SmartyView を調べて、返される MIME タイプを確認し、どのヘッダーが設定されるかを確認する必要があります。

于 2012-03-03T11:40:40.967 に答える