Phalcon 流程列表

流程清单

phalcon树形清单如下:

  • 初始化DI (config/services.php) $di = new FactoryDefault();
    • 设置路由 $di['router'] = function () {}
    • 设置URL $di['url'] = function () {}
    • 设置Session $di['session'] = function () {}
  • 初始化Application (public/index.php)
    • 实例化App $application = new Application();
    • 注入DI $application->setDI($di);
    • 注册模块(config/modules.php) $application->registerModules()
  • 启动Application (ext/mvc/application.c) $application->handle()
    • 检查DI
    • E触发事件 application:boot
    • 路由启动 $di['router']->handle()
    • 获得模块名$moduleName = $di['router']->getModuleName(),如果没有则从$application->getDefaultModule获取
    • 模块启动(如果路由命中)
      • E触发事件application:beforeStartModule
      • 调用模块初始化方法(Module.php) registerAutoloaders()以及registerServices()
      • E触发事件application:afterStartModule
    • 分发
      • 初始化View
      • 初始化Dispatcher,将Router中的参数复制到Dispatcher
      • 调用View View->start()开启缓冲区
      • E触发事件application:beforeHandleRequest
      • 开始分发(etc/dispatcher.c) Dispatcher->dispatch()
        • E触发事件dispatch:beforeDispatchLoop
        • 循环开始单次分发
          • E触发事件dispatch:beforeDispatch
          • 根据Dispatcher携带的Module、Namespace、Controller、Action获得完整的类与方法名,如果找不到则触发事件Edispatch:beforeException
          • E触发事件dispatch:beforeExecuteRoute
          • 调用Controller->beforeExecuteRoute()
          • 调用Controller->initialize()
          • E触发事件dispatch:afterInitialize
          • 调用Action方法
          • E触发事件dispatch:afterExecuteRoute
          • E触发事件dispatch:afterDispatch
        • Action内如果有forward(),开始下一次分发
      • E全部分发结束,触发事件dispatch:afterDispatchLoop
      • Application获得分发后的输出 $dispatcher->getReturnedValue()
      • E触发事件application:afterHandleRequest分发结束
    • 渲染,Appliction如果从分发拿到Phalcon\Http\ResponseInterface类型的返回,则渲染直接结束
      • E触发事件application:viewRender分发结束
      • 调用Phalcon\Mvc\View->render(),入口参数为Dispatcher的ControllerName / ActionName / Params
      • 调用Phalcon\Mvc\View->finish()结束缓冲区的接收
    • 准备响应
      • Phalcon\Mvc\View->getContent()通过Phalcon\Http\Response->setContent()放入Response
      • E触发事件application:beforeSendResponse
      • 调用Phalcon\Http\Response->sendHeaders()发送头部
      • 调用Phalcon\Http\Response->sendCookies()发送Cookie
      • 将准备好的响应作为$application->handle()的返回值返回
  • 发送响应
    • echo $application->handle()->getContent();

转载于:https://my.oschina.net/miyae/blog/1154328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值