2009-06-02 5 views
10

"탭 브라우징"과 같은 기능을 수행하고자하는 인터페이스를 구축하고 있습니다. 각 탭은 이미 작업으로 작성되었으며 탭 인터페이스는 개별 탭에 대한 링크로 잘 작동합니다. 이 컨트롤러의 "인덱스"페이지를 작성하기로 결정했습니다. 모든 탭의 내용을 숨겨진 div에 넣고 jQuery로 스왑합니다.하지만 일단 액션 뷰 도우미를 사용하기 시작하면 많은 사람들이 말했습니다. 그 나쁜 습관. (see this article)Zend의 Action View Helper - 해결 방법이 있습니까?

이러한 동작 중 일부는 양식을 빌드합니다. 모델의 일부 데이터를 가져 와서 표시합니다. 나는 각각의 행동이 스스로 기능을 지속하기를 바란다.

/항목으로 이동하면 탭 메뉴와 숨겨진 태그에있는 div의 모든 내용을 볼 수 있습니다./item/tab2는 특정 작업 (예 : 양식 제출)입니다.

또 다른 복잡성 /주의 사항 - 사용자가 해당 "탭"에 액세스 할 수없는 경우 일부 작업에서 액세스 예외가 발생합니다. 두 번 시스템에 액세스 확인을 구축하지 않으려합니다. 따라서 빈 콘텐트가있는 탭이 표시됩니다.

나는 이런 종류의 일을 처리하는 것이 가장 좋은 방법이 무엇인지 알아 내려고하고 있으며, 액션 도우미가 그럴 것이라고 생각했습니다. View Helpers를 사용하려고하면 - 그것이 Zend_Form을 어셈블 링하기에 적합한 지 궁금합니다.

누구도 Zend_View_Helper_Action을 사용하지 말고 해결할 수있는 "적절한"방법에 대한 제안 사항이 있습니까?

답변

7

올바른 방법은, 액션보기 도우미를 해결하려면, 파셜을 만들 수있는 모델에 직접 액세스하여 필요한 데이터를 가져옵니다. 뷰 도우미를 통해이 작업을 수행 할 수 있습니다.

액션보기 도우미가 더 바로 성능 문제보다 퍼진뿐만 아니라 끔찍한 디버깅 악몽을 생성하고 당신이 그것을 필요로하는 경우에, 당신의 응용 프로그램이 아마 MVC를 다음되지 않으며, 따라서 재사용 컨트롤러를 사용하고있다, 모델 대신 패턴 의도입니다.

뷰 객체의 렌더링 또는 부분 메소드를 사용하여 레이아웃 또는 현재 동작 뷰에서 부분을 렌더링 할 수 있습니다.

탭에서 여러 개의 가능한 게시물을 다루는 작업이 여러 개있는 경우 이러한 모든 작업을 설정하여 동일한보기 스크립트를 렌더링하면 모든 탭이 모델에서 직접 가져온 데이터로 렌더링됩니다.

1

기존 마크 업에서 탭/탭 창을 생성하지 않고 요청에 따라 콘텐츠를로드하는 경우 탭 자체를 표시하기 전에 탭에 액세스 할 수있는 권한이 사용자에게 있는지 확인해야합니다. 탭의 내용을로드하려고 할 때 다시

사용자에게 이러한 액세스 권한이 있는지 확인하는 것은 허용 가능한 작동 모드 여야하며 수행하는 데 비용이 많이 듭니다.

이 작업을 수행하면 일부 독립 실행 형 페이지와 탭 외에도 작동하는 컨텐트가 생성되는 경우 작업보기 도우미가 계속 진행됩니다. 탭을 생성 할 때 작업에서 수행 된 것과 동일한 ACL (또는 기타) 검사를 수행하기 만하면됩니다. 내가 정확한 문제가 무엇인지 전혀 모르겠어요

1

그러나 당신은 레이아웃을 비활성화 할 수 있습니다

$this->_helper->layout->disableLayout(); 

그런 다음 요청 된 작업은 당신이 탭에로드 할 수 있습니다보기 스크립트입니다 표시됩니다.

귀하가 가지고있는 권한 코드는 정상적으로 작동하며 요청한 동작에 대한보기 스크립트를 표시하거나 액세스 권한에 따라 표시되지 않을 수 있습니다.

당신은 try/catch 블록을 사용하여 모든 액세스 예외를 잡을 수
0

: 나는 당신이 인용 된 문서에 명시된 바와 같이

try { // action throwing exceptions } catch (Exception $e) { // catch silently } 
+0

사실 - 액션 뷰 도우미로이 작업을 수행 할 때 많은 다른 것들이 엉망이됩니다. JIRA에서 버그 수정을 제출했습니다. – gnarf