как использовать ajax в zend framework 2 или AjaxContext?

Помощник AjaxContext был опрятным признаком в ZF1, и я использовал его во многих местах.

Мне было интересно, доступно ли это в ZF2.

Я сделал тест и добавил:

 public function init() { $ajaxContext = $this->_helper->getHelper('AjaxContext'); $ajaxContext->addActionContext('input', 'html') ->addActionContext('number', 'html') ->initContext(); } 

в контроллере добавлено действие:

 public function inputAction() { $form = new AddInput(); return ['form' => $form]; } 

файл input.ajax.phtml

и ajax-вызов: $.get('/form/input/format/html').css("display","block");

Запрос проходит через ok, с кодом 200 , но я получаю ошибку визуализации

 Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "form/index/input"; resolver could not resolve to a file' in C:\xampp\htdocs\Zend-Project\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php on line 454 ( ! ) Zend\View\Exception\RuntimeException: Zend\View\Renderer\PhpRenderer::render: Unable to render template "form/index/input"; resolver could not resolve to a file in C:\xampp\htdocs\Zend-Project\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php on line 454 # Time Memory Function Location 1 0.0003 139048 {main}( ) ..\index.php:0 2 0.0969 4288136 Zend\Mvc\Application->run( ) ..\index.php:12 3 0.1463 6125720 Zend\Mvc\Application->completeRequest( ) ..\Application.php:310 4 0.1463 6125832 Zend\EventManager\EventManager->trigger( ) ..\Application.php:326 5 0.1463 6125904 Zend\EventManager\EventManager->triggerListeners( ) ..\EventManager.php:208 6 0.1464 6127112 call_user_func ( ) ..\EventManager.php:468 7 0.1464 6127128 Zend\Mvc\View\Http\DefaultRenderingStrategy->render( ) ..\EventManager.php:468 8 0.1464 6127176 Zend\View\View->render( ) ..\DefaultRenderingStrategy.php:128 9 0.1465 6128304 Zend\View\View->renderChildren( ) ..\View.php:196 10 0.1465 6128936 Zend\View\View->render( ) ..\View.php:231 11 0.1466 6129560 Zend\View\Renderer\PhpRenderer->render( ) ..\View.php:203 

любые идеи, что пошло не так, или, может быть, альтернатива? Благодарю.

редактировать:

если я это сделаю, используя DefaultRenderingStrategy :

 public function inputAction() { $result = new ViewModel(array('some_parameter' => 'some value',)); $result->setTerminal(true); return $result; } 

var_dump($this->result); я получу null

edit2:

Мне удалось заставить его работать благодаря @Sam. Вот мои шаги:

javascript

 $.get('/form/input', { name: "John", time: "2pm" }).done(function(data) { $('#some_div').append(data); }); 

controller

 public function inputAction() { $request = $this->getRequest(); $results = $request->getQuery(); // this is the get string $result = new ViewModel(['result' => $results]); $result->setTerminal(true); return $result; } 

view

 <?php echo '<div>'.$this->result->name.'</div>'; 

результатом будет <div>John</div>

благодаря

Проверьте JsonStrategy .

Кроме того, если вы хотите, чтобы полный вид (отдельно макет) был возвращен, просто верните ViewModel с помощью $viewModel->setTerminal(true) который есть для него.