如何在zend框架2或AjaxContext中使用ajax?
AjaxContext
助手在ZF1中是一个很好的function,我在很多地方使用它。
我想知道这是否在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 ''.$this->result->name.'';
结果将是
John
谢谢
看看JsonStrategy 。
此外,如果您想要返回完整视图(分开布局),只需返回一个带有$viewModel->setTerminal(true)
的ViewModel即可。