php manual(5)
时间:2007-07-19 来源:skilldream
第七章 Controllers
1.Controller 方法
1.1 和你的Views交互
1.2 使用Redirection
1.3 Controller的回调函数
1.4 其他有用的方法
2. Controller的变量
一个Controller是用来管理你应用某个方面的逻辑。大多数来说,controllers用来管理一个model的逻辑。比如,你正在建设一个站点来管理一个video的collection,你可能有一个VideoController以及一个RentalControlle来管理你的视频和租金。分别的,cake中每个controller的名字通常是复数。
程序的Controllers都是从AppController类继承来的类,AppController又是从核心的类Controller继承来的。Controller类可以包含任意数量的action:各种显示Views的方法
AppController类可以在/app/app_controller.php中第一,它里面包含了许多可以被更多controllers共享的方法,它本身是从核心类Controller继承来的。
一个Action是controller中的一个单独的方法,这个方法可以被Dispatcher自动的运行,运行的根据是从routes配置解析的页面请求。回到我们的 video collection的例子,VideoController类可以包含actions比如view(), rent(), search()等等,这个controller可以在/app/controllers/video_controller.php找到,并且文件内容为:
class VideosController extends AppController
{
function view($id)
{
//action logic goes here..
}
function rent($customer_id, $video_id)
{
//action logic goes here..
}
function search($query)
{
//action logic goes here..
}
}
你可以通过使用下面的URLs来调用这些方法:
http://www.example.com/videos/view/253
http://www.example.com/videos/rent/5124/0-235253
http://www.example.com/videos/search/hudsucker+proxy
但是这些页面将如何显示?你需要为每个action定义一个view,你可以在下一章查看具体内容。但是本章中,你会掌握Cake的controller,并且能够更好的使用。具体的说,你将学到如何用controller将你的数据传递给view,使用户转向以及其他更多功能。
1. Controller Functions
重要:
尽管本章中介绍了许多Cake中常用的方法,更多的手册内容请参考
http://api.cake.org
1.1 和views交互
●set($var,$value)
○这个方法是将controller中的数据传递给view的主要方法。你可以使用这个方法控制任何值:single values, 整个数组等等。一旦你使用了set(),view中也可以使用这个变量:在controller中使用set(‘color’,’blue’)可以使得$color变量在view中使用
●validate()
○通过收集错误的保存,返回错误的个数
●validateErrors()
○根据model中第一的正确性规则,检查一个model的数据是否正确,更多信息参考第十章
●render($action=null, $layout=null, $file=null)
○你并非时刻需要这个方法,因为在每个controller方法的最后,render都被自动调用,并且调用后定义(或者使用)相应的view
1.2 使用转向
●redirect($url)
○使用这个方法告诉用户将跳转到哪里。这里的URL可以使Cake规则的URL或者使一个完整定义的URL(http://...)
●flash($message, $url, $pause=1)
○这个方法在你的flash layout(app/views/layouts/flash.thtml)中显示$message信息$pause秒钟,之后跳转到指定的URL
1.3 Controller的回调函数
Cake Controller定义了一系列回调函数,你可以使用他们在重要的controller function之前或者之后插入功能逻辑。实现这些功能,适用下面介绍的参数和返回值声明这些方法
●beforeFilter()
○在每个controller action之前调用,非常有用的地方去检查sessions是否有效,并检查相应的权限
●afterFilter()
○在每个controlleraction之后调用
●beforeRender()
○在controller逻辑之后,view显示之前调用
1.4 其他有用的方法
尽管这些方法是在Cake的Object类中,他们在Controller中也可以使用
●requestAction($url, $extra=array())
○这个方法根据任何地方(location)调用controller的action,然后返回已经显示的view.$url是Cake规范的URL(/controllername/actionname/params),如果$extra数组包含了一个键‘render’,controller action将自动设置AutoRender
●log($msg, $type = LOG_ERROR)
○你可以使用这个方法在你的程序应中记录发生的任何事件。记录文件Logs放在/tmp文件目录下
2. Controller的变量
数量使用controller中定义的变量可以使你更好的使用cake的某些附加功能
●$name
○PHP4 并不能以驼峰表示法将当前类的名称提供给我们。如果你遇到问题,使用这个变量将你的类名设置成正确的驼峰表示法
●$uses
○你的controller是否使用了很多的model?比如你的Fragglescontroller会自动调用$this->fraggle,但是你也想同时能够调用$this->smurf,那就将下面的语句加入到你的controller中
var $uses = array('Fraggle','Smurf');
●$helpers
○使用这个变量使得你的controller装在helpers到它的views. 这个HTML helper会自动装载,但是你可以使用这个变量来指定其他的
var $helpers = array('html','ajax','javascript');
●$layout
○将这个变量设置成为你在这个controller中想使用的layout
●$autoRender
○将这个变量设置成为false将会使得actions停止自动显示(rendering)
●beforeFilter
○如果你需要在某一个或者任何一个action调用之前都要运行一小段代码,使用$beforefilter.这个函数处理access control十分有用,你可以在任何action处理之前检查用户的权限。你需要做的就是将这个变量设置成为一个数组,数组中包含了你想运行的controller的action,如下所示
class ProductsController extends AppController
{
var $beforeFilter = array('checkAccess');
function checkAccess()
{
//Logic to check user identity and access would go here
.
}
function index()
{
//When this action is called, checkAccess() is called first.
}
}
●$components
○和$helpers和$uses类似,这个变量用来装载你需要的components
var $components = array('acl');
1.Controller 方法
1.1 和你的Views交互
1.2 使用Redirection
1.3 Controller的回调函数
1.4 其他有用的方法
2. Controller的变量
一个Controller是用来管理你应用某个方面的逻辑。大多数来说,controllers用来管理一个model的逻辑。比如,你正在建设一个站点来管理一个video的collection,你可能有一个VideoController以及一个RentalControlle来管理你的视频和租金。分别的,cake中每个controller的名字通常是复数。
程序的Controllers都是从AppController类继承来的类,AppController又是从核心的类Controller继承来的。Controller类可以包含任意数量的action:各种显示Views的方法
AppController类可以在/app/app_controller.php中第一,它里面包含了许多可以被更多controllers共享的方法,它本身是从核心类Controller继承来的。
一个Action是controller中的一个单独的方法,这个方法可以被Dispatcher自动的运行,运行的根据是从routes配置解析的页面请求。回到我们的 video collection的例子,VideoController类可以包含actions比如view(), rent(), search()等等,这个controller可以在/app/controllers/video_controller.php找到,并且文件内容为:
class VideosController extends AppController
{
function view($id)
{
//action logic goes here..
}
function rent($customer_id, $video_id)
{
//action logic goes here..
}
function search($query)
{
//action logic goes here..
}
}
你可以通过使用下面的URLs来调用这些方法:
http://www.example.com/videos/view/253
http://www.example.com/videos/rent/5124/0-235253
http://www.example.com/videos/search/hudsucker+proxy
但是这些页面将如何显示?你需要为每个action定义一个view,你可以在下一章查看具体内容。但是本章中,你会掌握Cake的controller,并且能够更好的使用。具体的说,你将学到如何用controller将你的数据传递给view,使用户转向以及其他更多功能。
1. Controller Functions
重要:
尽管本章中介绍了许多Cake中常用的方法,更多的手册内容请参考
http://api.cake.org
1.1 和views交互
●set($var,$value)
○这个方法是将controller中的数据传递给view的主要方法。你可以使用这个方法控制任何值:single values, 整个数组等等。一旦你使用了set(),view中也可以使用这个变量:在controller中使用set(‘color’,’blue’)可以使得$color变量在view中使用
●validate()
○通过收集错误的保存,返回错误的个数
●validateErrors()
○根据model中第一的正确性规则,检查一个model的数据是否正确,更多信息参考第十章
●render($action=null, $layout=null, $file=null)
○你并非时刻需要这个方法,因为在每个controller方法的最后,render都被自动调用,并且调用后定义(或者使用)相应的view
1.2 使用转向
●redirect($url)
○使用这个方法告诉用户将跳转到哪里。这里的URL可以使Cake规则的URL或者使一个完整定义的URL(http://...)
●flash($message, $url, $pause=1)
○这个方法在你的flash layout(app/views/layouts/flash.thtml)中显示$message信息$pause秒钟,之后跳转到指定的URL
1.3 Controller的回调函数
Cake Controller定义了一系列回调函数,你可以使用他们在重要的controller function之前或者之后插入功能逻辑。实现这些功能,适用下面介绍的参数和返回值声明这些方法
●beforeFilter()
○在每个controller action之前调用,非常有用的地方去检查sessions是否有效,并检查相应的权限
●afterFilter()
○在每个controlleraction之后调用
●beforeRender()
○在controller逻辑之后,view显示之前调用
1.4 其他有用的方法
尽管这些方法是在Cake的Object类中,他们在Controller中也可以使用
●requestAction($url, $extra=array())
○这个方法根据任何地方(location)调用controller的action,然后返回已经显示的view.$url是Cake规范的URL(/controllername/actionname/params),如果$extra数组包含了一个键‘render’,controller action将自动设置AutoRender
●log($msg, $type = LOG_ERROR)
○你可以使用这个方法在你的程序应中记录发生的任何事件。记录文件Logs放在/tmp文件目录下
2. Controller的变量
数量使用controller中定义的变量可以使你更好的使用cake的某些附加功能
●$name
○PHP4 并不能以驼峰表示法将当前类的名称提供给我们。如果你遇到问题,使用这个变量将你的类名设置成正确的驼峰表示法
●$uses
○你的controller是否使用了很多的model?比如你的Fragglescontroller会自动调用$this->fraggle,但是你也想同时能够调用$this->smurf,那就将下面的语句加入到你的controller中
var $uses = array('Fraggle','Smurf');
●$helpers
○使用这个变量使得你的controller装在helpers到它的views. 这个HTML helper会自动装载,但是你可以使用这个变量来指定其他的
var $helpers = array('html','ajax','javascript');
●$layout
○将这个变量设置成为你在这个controller中想使用的layout
●$autoRender
○将这个变量设置成为false将会使得actions停止自动显示(rendering)
●beforeFilter
○如果你需要在某一个或者任何一个action调用之前都要运行一小段代码,使用$beforefilter.这个函数处理access control十分有用,你可以在任何action处理之前检查用户的权限。你需要做的就是将这个变量设置成为一个数组,数组中包含了你想运行的controller的action,如下所示
class ProductsController extends AppController
{
var $beforeFilter = array('checkAccess');
function checkAccess()
{
//Logic to check user identity and access would go here
.
}
function index()
{
//When this action is called, checkAccess() is called first.
}
}
●$components
○和$helpers和$uses类似,这个变量用来装载你需要的components
var $components = array('acl');
相关阅读 更多 +
排行榜 更多 +