Как указать Content-type при использовании Recess framework с Smarty - PullRequest
0 голосов
/ 13 января 2012

В настоящее время я использую среду PHP Recess с движком шаблонов Smarty. В моем контроллере у меня есть код, похожий на:

/**
* !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 в Ответе пуст.

Как указать тип содержимого в Recess при использовании Smarty? Я попытался добавить заголовок ('Content-type: text / html') к методу в контроллере, но это не работает.

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 03 марта 2012

Я хотел бы видеть код SmartyView в углублении / framework / views.Этот класс должен иметь метод canRespondWith (), который будет проверять, может ли представление отвечать определенным MIMEType.Например:

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));
    /* ... */
}

Посмотрите в recess / http / MimeTypes.class.php, чтобы увидеть, как xml ответит правильными заголовками.Вам также нужно заглянуть в свой SmartyView, чтобы увидеть, какой mimetype вы возвращаете, чтобы увидеть, какой заголовок будет установлен.

...