programing

Zend Framework가 AJAX 응답을 전송할 때 보기/레이아웃을 렌더링하지 않도록 하려면 어떻게 해야 합니까?

magicmemo 2023. 3. 27. 21:11
반응형

Zend Framework가 AJAX 응답을 전송할 때 보기/레이아웃을 렌더링하지 않도록 하려면 어떻게 해야 합니까?

이것에 대해 Zend의 문서는 명확하지 않다.

문제는 디폴트로는 Zend가 각 컨트롤러 액션의 마지막에 뷰를 자동으로 렌더링한다는 것입니다.레이아웃을 사용하고 있다면, 왜 사용하지 않는가?그것도 렌더링 됩니다.일반 웹 페이지에서는 괜찮지만, AJAX 응답을 보낼 때는 이 모든 것을 원하지 않습니다.어떻게 하면 Zend가 액션 바이 액션으로 자동 렌더링되지 않도록 할 수 있습니까?

AJAX 응답을 송신하는 액션의 내부에서 이 코드를 호출합니다.

$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);

그러면 해당 작업에 대한 레이아웃 엔진이 비활성화되고 해당 작업에 대한 자동 뷰 렌더링이 꺼집니다.그런 다음 AJAX 출력을 원하는 대로 "에코"할 수 있습니다. 일반적인 뷰/레이아웃 자료가 전송될 염려가 없습니다.

AJAX가 JSON을 반환하는 경우 JSON 액션 도우미를 사용할 수 있습니다.

$this->_helper->json($data);

이 도우미는json_encode$data를 JSON 헤더로 출력하고 마지막으로 다이(die)를 사용하면 레이아웃 및 뷰 렌더링을 사용하지 않고 깨끗한 JSON을 얻을 수 있습니다.

f. ajax를 위한 다른 액션에 대한 여러 ACL 체크를 피하기 위해 이 구성을 실제로 사용하고 있습니다.

public function photosAction() {

if ($this->getRequest()->getQuery('ajax') == 1 || $this->getRequest()->isXmlHttpRequest()) {
    $params = $this->getRequest()->getParams();
    $result = false;

     switch ($params['act']) {
        case 'deleteImage':
           //deleting something
           ...
           $result = true; //ok
           break;

        default :
           $result = array('error' => 'Invalid action: ' . $params['act']);
           break;
      }

    $this->_helper->json($result);
}

// regular action code here
...
}

또는 단순히 동작의 끝에 die() 함수를 넣을 수도 있습니다.

public function someAction()
{
    echo json_encode($data);
    die();
}

언급URL : https://stackoverflow.com/questions/1498692/how-do-you-make-zend-framework-not-render-a-view-layout-when-sending-an-ajax-res

반응형