Ajax 如何在zend framework 2中禁用渲染视图?
我想使用一些ajax,但我不知道如何使用与zend framework 2中的setNoRender()相同的函数来禁用渲染视图Ajax 如何在zend framework 2中禁用渲染视图?,ajax,zend-framework2,Ajax,Zend Framework2,我想使用一些ajax,但我不知道如何使用与zend framework 2中的setNoRender()相同的函数来禁用渲染视图 如何在zend framework 2中禁用渲染视图?如果您使用的是JSON,请查看视图的JsonStrategy,然后从控制器返回JsonModel。看这个 或者,您可以从控制器返回响应,并跳过整个视图层: public function testAction() { $response = $this->getResponse(); $res
如何在zend framework 2中禁用渲染视图?如果您使用的是JSON,请查看视图的
JsonStrategy
,然后从控制器返回JsonModel
。看这个
或者,您可以从控制器返回响应
,并跳过整个视图层:
public function testAction()
{
$response = $this->getResponse();
$response->setStatusCode(200);
$response->setContent('foo');
return $response;
}
- 要禁用视图,请执行以下操作:
public function myactionAction() { // your code here ... return false; }
- 视图模型
- 排列
- 空的
- 要禁用布局和视图,请返回响应对象:
public function myactionAction() { // your code here ... return $this->response; }
- 要禁用布局,请执行以下操作:
public function myactionAction() { // your code here ... $view = new ViewModel(); $view->setTerminal(true); return $view; }
$view->setTerminate(true) 正确的和简单的解决方案
public function testAction()
{
$data = array(
'result' => true,
'data' => array()
);
return $this->getResponse()->setContent(Json::encode($data));
}
详细信息:我找到了一些答案
虽然$this->layout()->getLayout()
返回新选择的布局的名称/路径。。。使用以下任何命令都不会更改布局
在控制器内
$this->getLocator()->get('view')->layout()->setLayout('layouts/ajax.phtml');
$this->getLocator()->get('view')->layout()->setLayout('ajax');
$this->getLocator()->get('view')->layout()->disableLayout();
在视图PHTML文件中
$this->layout()->setLayout('layouts/ajax.phtml');
$this->layout()->setLayout('ajax');
$this->layout()->disableLayout();
这很有帮助。非常感谢,只是一个简短的通知。在Zend Framework 2.2中,$response->setBody('foo')是$response->setContent('foo');另一个类似的问题有更详细的答复。请参阅ajax解决方案:它不是$view->setTerminate(true);其$view->setTerminal(true);回答得很好。我更新了方法调用,因为Beniston正确地指出了一个输入错误。我的大多数操作都需要禁用布局。有没有一种方法可以从视图策略中设置它,以避免重复上面的代码?这是一个很好的答案,但是为什么返回响应对象会禁用布局和视图?这很奇怪。对于一个真正正确的解决方案,首先设置头:公共函数testAction{$response->getHeaders()->addHeaderLine('Content-Type','application/json');return$response->setContent(json::encode($data));}它是$view->setTerminal(true);事实上也许API会随着时间的推移而改变
...
use Zend\View\Model\JsonModel;
public function myAction() {
...
$view = new JsonModel($myArray);
$view->setTerminal(true);
return $view;
}