2015-12-16 4 views
0

Я отправляю свою форму через ajax, и если есть ошибки, возвращайте json с ними. Но, когда возвращение действия JSON модели появляются эту ошибку:Zend Framework 2 - Возврат действия контроллера json

Inconsistent state; child view model is marked as terminal

Это мое действие:

$viewModel = new ViewModel(); 
$form = $sm->get('FormElementManager')->get('MyForm'); 

if ($request->isPost() && $request->isXmlHttpRequest()) { 
    $viewModel->setTerminal(true); 
    $jsonModel = new JsonModel(); 

    try { 
      if ($sm->get('MyService')->myFunction($form, $request->getPost())) { 
       return $jsonModel->setVariables(array('var' => 'var1')); 
      } 
    } catch (\Exception $e) { 
      return $jsonModel->setVariables(
        array('errorMessage' => $e->getMessage()) 
      ); 
    } 
} 

return $viewModel->setVariables(array('form' => $form)); 

Это my module.config.php

'view_manager' => array(
    ..... 
    'strategies' => array(
     'ViewJsonStrategy', 
    ), 
) 
+0

Вы пытались удалить '$ viewModel-> setTerminal (true);'? –

ответ

0

Вы не должны возвращать ваш $viewModel но ваш $jsonModel ,

В порядке JsonModel установлено as terminal by default.

Вы должны добавить return $jsonModel в предложение if.

+0

Я возвращаю '$ viewModel', потому что мне нужен шаблон действия, если формы или фильтры формы обнаруживают некоторые проблемы с почтовыми данными. – RrFe

Смежные вопросы