Zend Framework 2, возвращает визуализированное содержимое представления внутри модели JSONPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Zend Framework 2, возвращает визуализированное содержимое представления внутри модели JSON

Сообщение Anonymous »

Я пытаюсь создать JsonModel с элементом в переменных «html», содержащим текущее отображаемое представление. Я хотел бы добавить этот код к событию:
вместо этого метода: Как визуализировать представление ZF2 в ответе JSON? который находится в контроллере, я хотел бы автоматизировать процесс, переместив его в событие

У меня есть стратегия в моем модуле.config.php:

Код: Выделить всё

   'strategies' => array(
'ViewJsonStrategy',
)
Я настроил setEventManager в контроллере:

Код: Выделить всё

    $events->attach(MvcEvent::EVENT_RENDER, function ($e) use ($controller) {
$controller->setRenderFormat($e);
}, -20);
К этому событию лучше всего прикрепить его? будет ли RENDER_EVENT лучше?

Теперь я хотел бы изменить рендеринг страницы на основе !$this->getRequest()->isXmlHttpRequest(), (прокомментировано вышел на отладку)

Код: Выделить всё

public function setRenderFormat($e)
{
//if(!$this->getRequest()->isXmlHttpRequest())
//{
$controller = $e->getTarget();
$controllerClass = get_class($controller);

//Get routing info
$controllerArr = explode('\\', $controllerClass);
$currentRoute = array(
'module' =>  strtolower($controllerArr[0]),
'controller' => strtolower(str_replace("Controller", "", $controllerArr[2])),
'action' => strtolower($controller->getEvent()->getRouteMatch()->getParam('action'))
);
$view_template = implode('/',$currentRoute);

$viewmodel = new \Zend\View\Model\ViewModel();
$viewmodel->setTemplate($view_template);
$htmlOutput = $this->getServiceLocator()->get('viewrenderer')->render($viewmodel, $viewmodel);

$jsonModel = new JsonModel();
$jsonModel->setVariables(array(
'html' => $htmlOutput,
'jsonVar1' => 'jsonVal2',
'jsonArray' => array(1,2,3,4,5,6)
));

return $jsonModel;
//}

}
Как ни странно (или нет), этот код работает и создает $jsonModel, однако он не заменяет обычное представление HTML с помощью json, а тот же код (без событие) в методе контроллера отлично перезаписывается.

p.s Есть ли лучший способ реализовать всю концепцию?

p.p.s как мне получить текущий шаблон представления изнутри контроллера, не прибегая к 8 строкам кода?

Заранее спасибо!

Аборгрова

Подробнее здесь: https://stackoverflow.com/questions/169 ... json-model
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»