문제

웹 사이트 헤더에 로그인 버튼이 있습니다. 이 헤더의 HTML은 Zend Framework보기/레이아웃/home.phtml로 프로그래밍됩니다.

이 레이아웃에는 jQuery ThickBox Inline Content Display Integration에 의해 트리거되는 숨겨진 양식이 있습니다. 이유, 나는 작은 로그인 양식을 가져 오기 위해 Ajax 호출을하고 싶지 않습니다.

Zend_form을 사용하여 양식을 작성하고 문제는 사용자가 로그인했는지 여부를 확인한 후 모든 컨트롤러에서 수행해야한다는 것입니다. 이 양식 생성을 한 곳에 한 곳에 배치하고 부트 스트랩에 말한 다음 사용자가 로그인하면 양식을 생성하지 않는다고 부트 스트랩에 논리를 가지고 싶습니다.

부트 스트랩이 그렇게하기에 적합한 장소인지 또는 다른 곳에서 해야하는지 모르겠습니다.

따라서 사용자가 로그인하지 않으면 어디에서나 사용할 수 있도록 양식을 어디에서나 인스턴스화해야합니다.

도움이 되었습니까?

해결책 3

나는 다른 방식으로 그것을 확장했다Zend_Controller_Plugin_Abstract 플러그인을 구현하고 프론트 컨트롤러에 등록하려면

public function routeStartup(Zend_Controller_Request_Abstract $request) { } 

위에서 언급 한 방법 내부에서 양식을 생성하고 양식을 $보기 객체로 설정했습니다.

$보기는 다음을 사용하여 검색 할 수 있습니다.

$view = Zend_Layout :: getMvcInstance()->getView();

다른 팁

Zend_controller_Action을 확장 한 자신의 기본 컨트롤러를 작성한 다음 컨트롤러가 기본 컨트롤러에서 확장되도록하십시오. "JQuery Thickbox Inline Content Display Integration"이 무엇인지 모르겠지만 코드를 실행할 필요가있을 때에 따라 넣을 수있는 여러 섹션이 있습니다. init (), predispatch (), postdispatch () 등 ... 기본 컨트롤러를 꺼내면

parent :: init () parent :: predispatch () parent :: postdispatch () 등 ... 각 섹션 내에서 기본 코드가 실행되도록 ...

Pradeep Sharma의 솔루션에주의하십시오 (그가 자신을 쓴 답변은 아래에 받아 들여졌습니다).

아래의 모든 코드 코드는 ZF 1.12이며 ZF 2.0이 아닙니다.

부트 스트랩에서 Zend_layout의 MVC 인스턴스는 아직 생성되지 않았을 수 있습니다. 당신은 사용해야합니다 Zend_Layout::startMvc() 대신에 :

$view = Zend_Layout::startMvc()->getView() ;

그리고 tbh 나는 predispatch () 함수 에서이 코드를 실행하는 것을 선호합니다. ZF의 새로운 사용자는 다음에 관심이있을 수 있습니다.

애플리케이션/플러그인/headerform.php :

class Application_Plugin_HeaderForm extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {    
        $view = Zend_Layout::startMvc()->getView() ;
        $view->headerForm = new Application_Form_HeaderForm() ;
    }
}

새로운 전화 Application_Form_HeaderForm() 기본적으로 자동로드됩니다 신청 양식/ 폴더. 플러그인에 직접 양식을 작성할 수도 있습니다. new Zend_Form(), 그리고 addElement() 그러나 재사용 할 수 없습니다.

물론 부트 스트랩 에이 플러그인을 등록해야합니다!

응용 프로그램/bootstrap.php :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initPlugin()
    {
        $front = Zend_Controller_Front::getInstance() ;
        $front->registerPlugin(new Application_Plugin_HeaderForm()) ;
    }
}

새로운 전화 Application_Plugin_HeaderForm() 기본적으로 자동로드됩니다 응용 프로그램/플러그인/ 폴더

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top