Установить контекст по умолчанию в Zend Framework на XML - PullRequest
3 голосов
/ 04 июня 2010

Я использую Zend Framework, и большая часть контроллера действий, который у меня есть, возвращает XML-ответ. Для этого мне нужно инициализировать переключение контекста и предоставить URL-суффикс «? Format = xml» для вызова каждого действия.

Есть ли способ сделать это по умолчанию? Так что мне не нужно добавлять этот суффикс к каждому URL?

С уважением, Андре.

Ответы [ 4 ]

7 голосов
/ 04 июня 2010

ДОПОЛНИТЕЛЬНО. ПРОЧИТАЙТЕ ВСЕ ОБ ЭТОМ!

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

Посмотрите ContextSwitch и AjaxContext

(Изменить) Предложить использовать:

В некоторых случаях вы можете захотеть использовать используемый контекст; например, вы можете захотеть разрешить контекст XML, только если переключение контекста активировано. Вы можете сделать это, передавая контекст initContext ():

$ contextSwitch-> initContext ( 'XML');

3 голосов
/ 04 июня 2010

Как насчет явной установки параметра format в методе init() вашего контроллера?

$this->getRequest()->setParam('format', 'xml');

... должен быть не такой ленивый способ сделать это, хотя ...

0 голосов
/ 08 августа 2013

Если вы не хотите устанавливать параметр в каждом контроллере init, вы также можете установить параметр в качестве параметра глобального маршрута. В вашей начальной загрузке вытащите экземпляр маршрутизатора и позвоните

$router->setGlobalParam('format', 'xml');

Или вы можете установить значения по умолчанию в определяемых вами маршрутах, или, возможно, если вы используете маршрутизатор по умолчанию в любом месте вашего URL, после именованных параметров /format/xml.

0 голосов
/ 22 декабря 2012

В качестве альтернативы, вы можете использовать что-то вроде следующего, чтобы установить значение по умолчанию, но все же разрешить устанавливать другие контексты через параметр "format":

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$currentContext = $ajaxContext->getCurrentContext();
if (empty($currentContext)) {
    $ajaxContext->initContext('xml');
}

Этот код может быть помещен в init () вашего контроллера, который установит контекст по умолчанию для всех действий. Он также может быть помещен в отдельные действия для установки контекста по умолчанию для каждого действия.

Обратите внимание, что вы также можете изменить имя параметра на что-то отличное от "format" следующим образом:

$ajaxContext->setContextParam('type');

Тогда вы можете вызвать ваше действие с помощью '/controller/action/type/xml'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...