1

有人可以解释一下 symfony 2 应用程序的基本引导过程吗?从入口点到控制器中的特定操作,再到使用 twig 模板系统渲染视图。

4

1 回答 1

4

symfony 书中有一章关于此:http ://symfony.com/doc/current/book/internals.html

阅读整章会让你很好地理解事情是如何在幕后工作的。

为了完整起见,我将在这里引用重要的部分:

处理请求

handle() 方法接受一个请求并总是返回一个响应。要转换请求,handle() 依赖于解析器和有序的事件通知链(有关每个事件的更多信息,请参阅下一节):

  • 在做任何事情之前,通知 kernel.request 事件——如果其中一个侦听器返回一个 Response,则直接跳转到第 8 步;
  • 调用Resolver来确定要执行的Controller;
  • kernel.controller 事件的侦听器现在可以按照他们想要的方式操作 Controller 可调用对象(更改它、包装它,...);
  • 内核检查 Controller 实际上是一个有效的 PHP 可调用对象;
  • 调用解析器来确定要传递给控制器​​的参数;
  • Kernel调用Controller;
  • 如果Controller没有返回Response,kernel.view事件的监听者可以将Controller返回值转换为Response;
  • kernel.response 事件的监听器可以操作响应(内容和标题);
  • 返回响应。

如果在处理过程中抛出异常,kernel.exception 会被通知,并且监听器有机会将异常转换为响应。如果可行,则通知 kernel.response 事件;如果不是,则重新抛出异常。

如果您不希望捕获异常(例如对于嵌入式请求),请通过将 false 作为第三个参数传递给 handle() 方法来禁用 kernel.exception 事件。

于 2012-06-05T23:40:44.817 回答