我们已经看过CakePHP的基本成分了,那么现在就来看看各个对象怎么完成一个基本的请求。继续讲我们之前的请求的例子,想象一下我们的朋友Ricardo刚刚在一个CakePHP的应用的首页上点击了“立刻买一个自定义的蛋糕!”这个链接。
上图 典型的Cake请求。
黑色 = 请求的元素, 灰色 = 可选的元素, 了;蓝色 = 回调方法
1. Ricardo 点击了指向 http://www.example.com/cakes/buy 的链接, 然后他的浏览器对你的服务器发出了一个请求。
2. 路由(route)从URL中解释并提取出这次请求的参数: 控制器(controller), 动作(action)以及其他在这次请求中影响到业务逻辑的所有其他参数。
3. 使用路由后,请求的URL被映射到一个控制器的动作中(在特定的一个控制器的类的一个方法)。在这个例子,是CakeController类的buy()方法。在控制器的所有动作逻辑执行之前会调用beforeFilter()回调方法(callback)。
4. 控制器可能会使用模型来处理应用的数据。在这个例子里,控制器使用了一个模型从数据里得到Ricardo上次买的东西。在这次操作中所有这个模型适用的回调方法、习惯(behavior)和数据源(DataSource)都可能得到实施。即使模型没有被用到,所有的CakePHP控制器的初始化至少都需要一个模型。
5. 当模型取得数据后,数据会被返回到控制器。模型的回调方法可能会被实施。
6. 控制器可能使用组件对数据进行进一步的加工,或者进行其他的操作(例如会话处理、验证或者发电子邮件)。
7. 一旦控制器使用了模型和组件以有效地准备数据,就可以使用控制器的set()方法把数据传送到视图(view)。在数据送到视图前,控制器的回调方法可能会被实施。视图逻辑会被执行,可能包括了各种元素及(或者)帮助方法。默认情况下,视图会在一个布局(layout)里被渲染。
8. 附加的控制器回调方法(像afterFilter)可能被实施。最后,完整的经过渲染的视图代码就被送到Ricardo的浏览器了。