ZF2 $this->_helper->viewRenderer->setNoRender(); or (true)
でビューを無効にするのに苦労していますが、いつものように運がありません。
PHP Fatal error: Call to a member function setNoRender() on a non-object in ../module/Location/src/Location/Controller/LocationController.php on line 190
コントローラーアクション内からビューを完全に無効にするには、Responseオブジェクトを返す必要があります。
<?php
namespace SomeModule\Controller;
use Zend\Mvc\Controller\ActionController,
Zend\View\Model\ViewModel;
class SomeController extends ActionController
{
public function someAction()
{
$response = $this->getResponse();
$response->setStatusCode(200);
$response->setContent("Hello World");
return $response;
}
}
レイアウトを無効にして、このアクションのビューモデルテンプレートをレンダリングするには、次のようにします。
public function anotherAction()
{
$result = new ViewModel();
$result->setTerminal(true);
return $result;
}
ZF2は開発が進んでおり、現在の動作を保証することはできません。ZF2が安定状態に達したときの動作になります。
ただし、Zend\Mvcの新しいビューレイヤーが最近マージされ、ビューに関連する情報を含むビューモデルを返してビューをレンダリングするオプションが提供されます。ビューのレンダリングを無効にするには、応答を直接返すことでディスパッチをショートカットして、ビューがまったくレンダリングされないようにすることができます。
public function somethingAction ()
{
// Do some intelligent work
return $this->getResponse();
}
レイアウトのみを無効にしたと思います
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
そしてあなたのjsonをあなたのビューファイルにエコーします...
レイアウトを無効にする簡単な解決策を見つけました。私のajaxAction
public function ajaxAction()
{
if ( $this->getRequest()->isXmlHttpRequest() ) {
$this->layout( 'layout/ajax-layout' );
}
}
そして\module\Application\view\layout\ajax-layout.phtml
<?php echo $this->content; ?>
コンソールモデルを使用してこれを行うか、任意に実行を強制終了できます。
<?php
namespace SomeModule\Controller;
use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\ConsoleModel; // if use ConsoleMode
use Zend\View\Model\JsonModel; // if use JSON
class SomeController extends ActionController
{
public function someAction() {
return new ConsoleModel(array(
'message' => 'Hello World',
));
}
// Json Method
public function jsonAction() {
return new JsonModel(array(
'message' => 'Hello World',
));
}
// This is really exaggerated, but it is quite effective.
public function killAction() {
echo 'Hello World';
exit;
}
}
ビューでの使用:some.phtml
<?php
echo $message;
json.phtml
<?php
echo $message;
public function testAction()
{
return false;
}
単にfalseを返します。
メソッドで ''を返すだけで、ビューテンプレートは自動ロードされません
public function goAction()
{
return '';
}
パブリック関数indexAction(){
$news = $this->em->getRepository('Admin\Model\News'); foreach ($news->findAll() as $new) { $res = $this->getResponse()->setContent($new->toXml()); } return $res; }