2011-07-26 6 views
0

무엇 다음과 같은 경우에 예외를 던지는 가장 좋은 방법입니다 :젠드 프레임 워크

내 URL 구조는 다음과 같습니다 /기사 /보기/ID/1

내 컨트롤러 : AticlesController Application_Model_Mapper_Articles 나는 모든 종류의 데이터를 집계이 모델에서

:

는 그리고이 컨트롤러는 매퍼 모델을로드합니다. 이 모델에서 404 오류를 던지거나 기사를 표시할지 결정하기위한 몇 가지 기준을 확인합니다.

오류가 발생하기로 결정한 경우. 어떻게해야합니까?

내 첫 번째 추측은 모델 내에서 던졌습니다. 그러나 기본 'Model_Exception'클래스가없고 'Zend_Controller_Action_Exception'이 있습니다. 모델 내에서이 예외를 throw해야합니까? 또는 모델에서 컨트롤러로 오류 메시지를 다시 전달한 다음 오류를 던져야합니까?

답변

3

모델 자체가 FrontController와 간섭해서는 안되기 때문에 컨트롤러에서 예외를 throw하십시오.

Zend_Controller_Action_Exception이 아닌 예외를 던질 수도 있지만 문제를 더 정확하게 설명하는 예외가 컨트롤러에서 잡아서 해당베이스에서 Zend_Controller_Action_Exception을 던지겠습니까?

+0

도움 주셔서 감사합니다. 컨트롤러에서 오류를 던질 것입니다. 내 기사 모델은 매우 복잡합니다. 더 간단한 모델을 위해 무엇을해야합니까? 콘텐츠가 삭제되었을 때만 오류가 발생할 수있는 모델입니다. 특별한 예외 클래스를 만들 가치는 없습니다. 또는 모델에서 isValid() 종류의 함수를 만들어야합니까? 그리고 모든 것을로드하려고하는 모든 컨트롤러/액션에이를 포함시킵니다. 여분의 코드가 많은 것 같아요 ... – Erik

+0

새로운 예외 클래스를 생성하는 것은 당신에게 달려 있습니다. :) 그러나 기존 젠드 예외 인 SPL Exceptions (http://www.php.net/manual/en)를 살펴보십시오. /spl.exceptions.php) 아니면 일반적인 예외를 throw 할 수 있습니다. 유효성 검사는 일반적으로 모델 내에 예외를 throw 할 수 있지만 try-catch 블록 내에서 예외를 throw하는 메서드가 실행되는지 확인해야합니다. 자바는 메서드가 더 좋게 정렬되어 있으므로 결과가 예외 일 수 있으므로 'throw My_Kind_Of_Exception'으로 선언해야합니다. – usoban

0

Application_Model_Mapper_Articles_Exception을 만들 수 있으며 컨트롤러에서 예외를 처리하고 오류 컨트롤러에 예외를 던지거나 예외 코드를 사용하여 설정할 HTTP 응답 코드 유형을 지정할 수 있습니다.

+0

예외 모델에서 응답 코드를 전달 및/또는 설정할 수 있습니까? 그렇다면 여러 모델에서 발생할 수있는 몇 가지 일반적인 예외를 만들 수 있습니다. 또한 예외 코드는 어디에 두어야합니까? 모델 폴더에 있습니까? – Erik

+0

'Zend_Controller_Plugin_ErrorHandler'에 대한 문서와 특정 예외 코드를 404 오류로 바꾸기 위해 오류 컨트롤러가 구성된 방식을 살펴보십시오. 모델 예외에 대해서는 articles.php 클래스가 상주하는 Articles라는 폴더를 만들고 Exception.php에 코드를 넣습니다. 그런 식으로 오토로더가 집을 수 있습니다. – cmbuckley