>  기사  >  php教程  >  Zend-MVC 이벤트

Zend-MVC 이벤트

WBOY
WBOY원래의
2016-08-04 08:53:171172검색

 ZendMvcMvcEvent는 ZendEventManagerEvent에서 상속되며 ZendMvcApplication::bootstrap()이 실행될 때 트리거됩니다. 컨트롤러가 ZendMvcInjectApplicationEventInterface를 구현하는 경우 MvcEvent가 이러한 컨트롤러에 주입됩니다.

MvcEvent는 Application, Request, Response, Router, RouterMatch, Result(일반적으로 컨트롤러 디스패치 결과), ViewModel(일반적으로 뷰 모델 레이아웃 표시) 개체에 대한 getter 및 규칙을 추가합니다. 애플리케이션, 요청, 응답, 라우터 및 ViewModel은 모두 부트스트랩 이벤트 프로세스 중에 주입됩니다. 다음 경로 이벤트는 라우팅 결과를 캡슐화하기 위해 RouteMatch 객체에 주입됩니다. RouteMatch 객체는 MVC 전체에서 사용되므로 일반적으로 RouteMatch를 통해 Route, Request 및 Response 객체를 얻습니다.

MvcEvent는 다음 메서드도 정의합니다.

setApplication(<span style="color: #800080;">$application</span><span style="color: #000000;">)
getApplication()
setRequest(</span><span style="color: #800080;">$request</span><span style="color: #000000;">)
getRequest()
setResponse(</span><span style="color: #800080;">$reponse</span><span style="color: #000000;">)
getResponse()
setRouter(</span><span style="color: #800080;">$router</span><span style="color: #000000;">)
getRouter()
setRouteMatch(</span><span style="color: #800080;">$routeMatch</span><span style="color: #000000;">)
getRouteMatch()
setResult()
getResult()
setViewModel(</span><span style="color: #800080;">$viewModel</span><span style="color: #000000;">)
getViewModel()
isError()
setError()
getError()
getController()
setController(</span><span style="color: #800080;">$name</span><span style="color: #000000;">)
getControllerClass()
setControllerClass(</span><span style="color: #800080;">$class</span>)

이벤트 발생 순서:

Name Constant Description
bootstrap MvcEvent::EVENT_BOOTSTRAP 通过创建ViewManager来引导application
route MvcEvent::EVENT_ROUTE 执行路由(或者路由相关的行为)
dispatch  MvcEvent::EVENT_DISPATCH 将匹配到的路由调度给相应的控制器/行为
dispatch.error MvcEvent::EVENT_DISPATCH_ERROR 当调度过程中发生错误时会被触发
render MvcEvent::EVENT_RENDER 准备数据并将渲染任务委托给视图层
render.error MvcEvent::EVENT_RENDER_ERROR render过程错误发生时触发
finish MvcEvent::EVENT_FINISH 一旦所有的事情完成后,本事件触发完成相应的任务

자세한 소개:

MvcEvent::EVENT_BOOTSTRAP("부트스트랩")

리스너: ZendMvcViewHttpViewManager, onBootstrap 메서드가 호출됩니다.

기능: 뷰 레이어를 준비합니다(즉, ZendMvcViewHttpViewManager 인스턴스화).

트리거 방법: ZendMvcApplication bootstrap() 방법.

MvcEvent::EVENT_ROUTE("경로")

리스너 1: ZendMvcModuleRouteListener::onRoute

함수: 는 주로 경로 일치에 포함된 매개변수 키가 MODULE_NAMESPACE 상수

와 일치하지 않도록 방지하기 위해 컨트롤러 이름 앞에 모듈 네임스페이스를 추가해야 하는지 여부를 결정합니다.

리스너 2: ZendMvcRouteListener::onRoute MvcEvent::EVENT_DISPATCH_ERROR와 일치하는 경로가 없으면 트리거됩니다.

기능: 요청을 라우터에 일치시키고 RouteMatch 객체를 반환합니다.

트리거 방법: ZendMvcApplication::run

기능: 라우팅 과정에서 오류가 발생하면 짧은 루프 콜백을 사용하여 이벤트의 지속적인 전파를 중지합니다.

MvcEvent::EVENT_DISPATCH("디스패치")

리스너는 콘솔 환경에 한정되는 리스너와 HTTP 환경에 한정되는 리스너로 구분되며, 모든 환경에 적용 가능한 리스너가 있습니다. 이 기사에서는 CONSOLE 환경을 소개하지 않습니다. 콘솔 환경의 경우 공식 문서를 확인하실 수 있습니다.

ZendMvcViewHttpCreateViewModelListener 클래스에는 이 이벤트의 리스너로 사용되는 두 가지 함수가 있습니다.

1. createViewModelFromArray(컨트롤러 작업이 연관 배열을 반환하는 경우 리스너는 배열을 ViewModel 객체로 변환합니다.

2. createViewModelFromNull(컨트롤러가 null 값을 반환하는 경우 이 메서드는 이를 ViewModel 객체로 변환합니다)

ZendMvcViewHttpRouteNotFoundStrategy::prepareNotFoundViewModel 클래스가 404ViewModel을 생성하고 반환합니다

클래스 ZendMvcViewHttpInjectTemplateListener::injectTemplate 뷰 모델에 템플릿을 삽입합니다. 템플릿 이름은 경로(또는 컨트롤러의 작업)와 일치하는 컨트롤러 이름에서 상속됩니다.

클래스 ZendMvcViewHttpInjectViewModelListener::injectViewModel ViewModel을 삽입하고 MvcEvent 객체에 추가합니다. 두 가지 상황이 있습니다. a) 뷰 모델을 포함하여 하위 개체로 추가됩니다. b) 결과가 종료될 수 있는 경우 기본 상황을 교체합니다

ZendMvcMiddlewareListener::onDispatch 클래스는 MvcEvent::EVENT_DISPATCH_ERROR를 트리거하여 서비스 관리자에서 일치하는 PSR-7 미들웨어를 로드하고 디스패치합니다.

ZendMvcDispatchListener::onDispatch 클래스는 위와 동일한 효과를 갖는 MvcEvent::EVENT_DISPATCH_ERROR를 트리거합니다.

클래스 ZendMvcControllerAbstractController::onDispatch 이 메서드는 추상 클래스입니다.

트리거 방법:

ZendMvcApplication::run은 짧은 루프 콜백을 사용하여 이벤트 전파를 종료합니다. (라우팅 중 오류가 발생한 경우)

ZendMvcControllerAbstractController::dispatch는 리스너가 Response 객체를 반환하는 경우 이벤트 전파를 종료합니다. AbstractController가 이 이벤트를 수신할 때마다 onDispatch 메서드가 트리거될 때 호출됩니다.

MvcEvent::EVENT_RENDER("렌더링")

청취자:

ZendMvcViewConsoleDefaultRenderingStrategy::render는 뷰를 렌더링하는 데 사용됩니다

ZendMvcViewHttpDefaultRenderingStrategy::render도 뷰를 렌더링합니다. 위 환경과의 차이점에 유의하세요

트리거 방법:

ZendMvcApplication::competeRequest 이 이벤트는 MvcEvent::FINISH가 트리거되기 전에 트리거됩니다.

MvcEvent::EVENT_FINISH("완료")

청취자:

ZendMvcSendResponseListener::sendResponse는 SendResponseEvent를 트리거하여 응답을 준비합니다.

트리거 방법:

ZendMvcApplication::run 이 이벤트는 MvcEvent::ROUTE 또는 MvcEvent::DISPATCH 이벤트가 올바른 ResponseInterface를 반환하면 트리거됩니다.

ZendMvcApplication::completeRequest는 MvcEvent::RENDER(즉, 현재 뷰가 렌더링됨) 후에 트리거됩니다.

SendResponse 이벤트 소개

ZendMvcResponseSenderSendResponseEvent는 다음 메소드를 정의합니다.

setResponse($response)

getResponse()

setContentSent()

콘텐츠보냄()

setHeadersSent()

헤더보냄()

이러한 메소드는 응답 헤더와 응답 내용을 설정하는 데 사용됩니다.

청취자:

ZendMvcSendResponseListenerPhpEnvironmentResponseSender::__invoke 사용 환경 HTTP

ZendMvcSendResponseListenerConsoleResponseSender::__invoke는 콘솔 환경을 사용합니다.

ZendMvcSendResponseListenerSimpleStreamResponseSender::__invoke

MvcEvent::이 이벤트는 FINISH 이벤트가 발생한 후 실행됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.