Zend Framework 'AjaxContent' и проблема сегментации отклика - PullRequest
1 голос
/ 19 февраля 2009

Я использую jquery в Zend Framework, это мое первое испытание. Через я уже выяснил еще один вопрос , что я могу изменить ответ, изменив контекст следующим образом:

$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('myaction', 'html');
$ajaxContext->initContext();

Теперь это очень помогло, но новая проблема показала:

Моя страница состоит из различных responseSegment, и когда я отвечаю на Ajax-запрос, изменяя Context, мои другие ResponseSegment также «думают», что отправляют Ajax, но это не так. Фронт-контроллер запрашивает viewscript.ajax.phtml ... что неправильно, это должен быть viewscript.phtml (существует).

1 Ответ

1 голос
/ 19 февраля 2009

Тем временем я выяснил, как решить эту проблему, и, поскольку я думаю, что другие столкнутся с такой же проблемой в будущем, я отвечу на свой вопрос здесь:

В моем ActionSetup.php (или bootstrap.php, если настройка действия не разделена) мне нужно было убедиться, что действия помещаются только в стек действий, если запрос не был XmlHttpRequest.

Единственное, чего не хватало, это оператора if:

if (!$request->isXmlHttpRequest())

Все выглядит так:

/**
 * Front Controller plugin to set up the action stack.
 *
 */
class Project_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        if (!$request->isXmlHttpRequest())
        {
            $front = Zend_Controller_Front::getInstance();
            if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack'))
            {
                $actionStack = new Zend_Controller_Plugin_ActionStack();
                $front->registerPlugin($actionStack, 97);
            } else
            {
                $actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
            }

            $menuAction = clone ($request);
            $menuAction->setActionName('menu')
            ->setControllerName('index');
            $actionStack->pushStack($menuAction);

            $userlogAction = clone ($request);
            $userlogAction->setActionName('userlog')
            ->setControllerName('index');
            $actionStack->pushStack($userlogAction);

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