PHP 기반 Zend Framework에서 MVC를 사용하고 있습니다. 이것은 디자인에 관한 질문입니다. 나는 몇 가지 행동을하는 컨트롤러를 가지고있다. 이러한 액션은 컨트롤러의 관점에서 AJAX를 통해 액세스됩니다. 컨트롤러의 동작, 모델 내부의 함수에서 데이터에 액세스하여 비즈니스 논리를 수행하고 HTML을 생성하거나 에코합니다. 이 HTML은 AJAX 응답에서 다시 볼 수 있습니다. 컨트롤러에 대한 나의 이해는 HTML을 전혀 포함하지 않아야한다는 것입니다. 하지만 AJAX를 감안할 때 컨트롤러에서 HTML을 생성하는 것 외에는 선택의 여지가 없다고 생각합니다. 이것은 좋은 디자인입니까? 어떻게 개선 할 수 있습니까?Contollers 및 Views - Zend Framework의 MVC
답변
정확히이 작업을 수행하는 데 필요한 두 가지 헬퍼가 있습니다. ajaxContext 또는 contextSwitch 액션 도우미를 사용하여 여러 컨텍스트에 대한 액션을 다시 사용할 수 있습니다. 컨텍스트 스위치는 일반적으로 내 경험에 더 유용하며 json 응답을 위해 작업에서 뷰에 할당 한 데이터를 자동으로 직렬화 할 수도 있으므로 뷰 스크립트가 필요하지 않습니다.
class MyController extends Zend_Controller_Action
{
public function init()
{
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('index', 'json')
->initContext();
}
public function indexAction()
{
$this->view->items = My_Model::fetchAll();
}
}
은 위의 컨텍스트 스위치에 JSON의 컨텍스트를 추가하며, 작업이 요청 매개 변수 '형식'세트를 호출 할 때, 자동으로됩니다
은이 같은 컨텍스트 스위치를 초기화 이 경우에는 My_Model :: fetchAll()에서 반환 한 항목의 json 배열을 제공하여 내용을 serialize합니다.
형식 매개 변수 중 하나를 진짜 마법 맥락이다 URL에 "/ 내/색인/형식/JSON"또는 GET 쿼리 "/ 내/색인? 형식 = JSON"
에 전달 될 수있다 switch는 응답 유형 (예 : content-type)에 적절한 헤더를 설정합니다.
고유 한 컨텍스트 및 보낼 헤더를 지정할 수도 있습니다. 컨텍스트 스위치에 대한 자세한 내용 here
항상 프리젠 테이션 논리를보기 안에 그대로 두십시오.
AjaxController.php : 나는 당신의 응용 프로그램에 대한 올바른 설계 방식 같은 것을 할 것이라고 생각
public function AjaxAction() {
//do some logic
//set content to a variable
}
ajax.phtml :
<p><?php //display the content of the variable setted in the controller ?></p>
당신은 나중에보기 또는 개별적으로 작업을 편집 할 수 있습니다 어쩌면 심지어 유사한 Ajax 생성 된 컨텐트에 대한 뷰를 재사용 할 수도 있습니다. MVC 패턴이 작동하도록 설계된 방식으로 항상 이런 식으로 분리하려고합니다.
우선 비즈니스 로직은 컨트롤러가 아닌 모델에 있어야합니다. - 당신이 컨트롤러를 통해 반환하는 문자열로 렌더링 PHTML을 캡처 $this->view->render('controller/action.phtml');
을 사용할 수 있습니다 잊지 마세요 또한
if ($ajax = $this->getRequest()->isXMLHttpRequest()) {
$this->_helper->layout->disableLayout();
};
// then later - if its responding with json:
if ($ajax)
{
$this->_helper->viewRenderer->setNoRender(true);
$this->getResponse()->setHeader('Content-Type', 'text/json');
echo $this->view->json($some_return_values);
return;
}
:
둘째, 내 아약스 요청은 일반적으로 형식의이 종류가 있습니다. 이렇게하면보기에서 프레젠테이션을 계속할 수 있습니다.- 1. Zend Framework의 ASP.NET MVC 모듈
- 2. Zend Framework의 DisplayGroup 데코레이터
- 3. Zend Framework의 렌더링 레이아웃 부분
- 4. Zend Framework의 다중 구성
- 5. Zend Framework의 url 접미사
- 6. Zend Framework의 Ajax 문제
- 7. Zend Framework의 컨트롤러 및 레이아웃에서의 데이터 흐름
- 8. Zend Framework의 "Hierarchical"행 집합?
- 9. Javascript가 Zend Framework의 Dojo를 닫습니다.
- 10. Zend Framework의 FlashMessenger 메시지 분류
- 11. Zend Framework의 모듈 사용 사례
- 12. Zend Framework의 사용자 정의 클래스
- 13. Zend Framework의 모든보기 도우미 재설정
- 14. Zend Framework의 모델 로딩 문제
- 15. Zend Framework의 부트 스트랩 반복
- 16. MVC-VIEWs - ASP.NET 표시
- 17. Java Spring MVC partial views
- 18. Zend Framework의 테이블, 행 집합 및 행 간의 관계?
- 19. Zend Framework의 요소, 하위 양식 및 belongsTo 사용
- 20. Zend Framework의 부트 스트랩 및 세션 변수에 액세스
- 21. 필터 Zend Framework의 SELECT 및 INSERT/UPDATE/DELETE 쿼리
- 22. Zend Framework의 Doctrine 프로필 작성 방법
- 23. Zend Framework의 모듈 별 데이터베이스 설정
- 24. Zend Framework의 이전 버전을 설치 하시겠습니까?
- 25. ZEND FRAMEWORK의 클래스 라이브러리를 사용하는 방법은 무엇입니까?
- 26. Zend Framework의 httpClient에있는 쿠키와 관련된 문제
- 27. Zend Framework의 데이터베이스 트랜잭션 : 격리되어 있습니까?
- 28. PHP/Zend Framework의 국가 대 시간
- 29. Zend Framework, MVC, Ajax 및 Cli/Cron
- 30. .NET MVC - List and Detail Views
AJAX 요청에 대한 응답으로보기를 반환하지 않는 이유는 무엇입니까? 가능해야합니다. –