4.2 Controller应用
Controller是MVC中的C(即控制程序),是M和V的纽带。如果您对MVC的概念感觉陌生,请自行百度一下。关于Controller文件的创建,在前面介绍DoitPHP Tools的使用说明时已经讲述过,在此不再赘述。
下面将详细介绍DoitPHP的Controller Class(下文称作:Controller基类)所提供的类方法。为了便于记忆,下面将类方法进行归类,然后按照每个分类来介绍。
一、网址提交的参数获取
1、get($key = null, $default = null, $isEncode = true)
获取$_GET的参数值。 获取$_GET的全局超级变量数组的某参数值,并进行转义化处理,提升代码安全。注:参数支持数组。
参数说明:
$key : 所要获取$_GET的参数名,当本参数为空时,则获取全部$_GET参数(数组)
$default : 默认参数, 注:$key不为数组时有效
$isEncode : 是否对符串进行htmlspecialchars()转码(true:是/ false:否)
举例说明:
例一、
$name = $this->get('name');
例二、
$page = (int)$this->get('page', 1);
2、post($key = null, $default = null, $isEncode = true)
获取$_POST参数值。 获取$_POST全局变量数组的某参数值,并进行转义等处理,提升代码安全。注:参数支持数组
参数说明:
$key : 所要获取$_POST的参数名称。当本参数为空时,则获取全部$_POST参数(数组)
$default : 默认参数, 注:只有$key不为数组时有效
$isEncode : 是否对符串进行htmlspecialchars()转码(true:是/ false:否)
举例说明:
例一、
$name = $this->post('name');
3、request($key = null, $default = null, $isEncode = true)
获取并分析$_GET或$_POST全局超级变量数组某参数的值。 获取并分析$_POST['参数']的值 ,当$_POST['参数']不存在或为空时,再获取$_GET['参数']的值。
参数说明:
$key : 所要获取的参数名称。当本参数为空时,则获取全部$_POST及$_GET的值
$default : 默认参数, 注:只有$key不为数组时有效
$isEncode : 是否对符串进行htmlspecialchars()转码(true:是/ false:否)
举例说明:
例一、
$name = $this->request('name');
4、getCliParams($key = null, $default = null, $isEncode = true)
获取PHP在CLI运行模式下的参数。当本参数为空时,则获取全部参数(数组)
参数说明:
$key : 参数键值, 注:不支持数组
$default : 默认参数值
$isEncode : 是否对符串进行htmlspecialchars()转码(true:是/ false:否)
举例说明:
例一、
$modeName = $this->getCliParams('modeName');
二、Cookie操作
1、getCookie($cookieName = null, $default = null)
获取某cookie变量的值。
参数说明:
$cookieName : cookie变量名。当本参数为空时,则获取全部的Cookie(数组)
$default : 默认值
设置某cookie变量的值
参数说明:
$cookieName : cookie的变量名
$value : cookie值
$expire : cookie的生存周期,默认为1小时。注:如果在主配置文件中设置了Cookie生存周期时,若本参数为空,则默认为主配置文件中设置的数值。如果本参数不为空,即使主配置文件中设置了生存周期,依然以本参数为准。
举例说明:
例一、
$this->setCookie('pincode', 'Aspire');
3、deleteCookie($cookieName)
删除某cookie变量的值
参数说明:
$cookieName : cookie变量名
三、Session操作
1、getSession($sessionName = null, $default = null)
获取某session变量的值
参数说明:
$sessionName : session变量名,当本参数为空时,则获取全部的session值(数组)
$default : 默认值
2、setSession($sessionName, $value = null)
设置某session变量的值
参数说明:
$sessionName : session的变量名
$value : 所要设置的session值,默认为: null。
3、deleteSession($sessionName)
删除某session变量的值
参数说明:
$sessionName : session变量名
四、常用URL处理
1、getBaseUrl()
获取当前项目的根目录的URL。 本类方法常用于网页的CSS, JavaScript,图片等文件的调用。
参数说明:
参数为空
举例说明:
例一、
$this->assign('baseUrl', $this->getBaseUrl());
2、getSelfUrl($params = array())
获取当前运行的Action的URL。 获取当前Action的URL. 注:该网址由当前的控制器(Controller)及动作(Action)组成。注:支持参数信息。
参数说明:
$params : url路由其它字段。注:url的参数信息
举例说明:
例一、
$this->assign('selfUrl', $this->getSelfUrl());
3、getActionUrl($actionName, $params = array())
获取当前Controller内的某Action的url。 获取当前控制器(Controller)内的动作(Action)的url。 注:该网址仅由项目入口文件和控制器(Controller)组成,支持其它参数信息
参数说明:
$actionName : 所要获取url的action的名称
$params : url路由其它字段。注:url的参数信息
4、getAssetUrl($dirName = null)
获取当前项目asset目录的url。
参数说明:
$dirName : asset目录的子目录名
举例说明:
例一、
$this->getAssetUrl();
例二、
$this->getAssetUrl('images/thickbox');
或
$this->getAssetUrl('images.thickbox');
5、createUrl($route, $params = array())
网址(URL)组装操作。根据主配置文件中的相关设置将网址组装成统一模式(路由模式或标准模式)的网址。注:组装绝对路径的URL
参数说明:
$route : controller与action。例:controllerName/actionName
$params : URL路由其它字段。注:url的参数信息
举例说明:
例一、
echo $this->createUrl('post/show');
//URL:/index.php/post/show 或 /index.php?router=post/show
例二、
$this->createUrl('post/view', array('id'=>35));
//URL: 访问目录URL/index.php/post/view/id/35 或 或 /index.php?router=post/view&id=35
6、redirect($url)
网址(URL)跳转操作。 页面跳转方法,例:运行页面跳转到自定义的网址(即:URL重定向)
参数说明:
$url : 所要跳转的网址(URL)
举例说明:
例一、
$this->redirect('http://www.doitphp.com');
例二、
$this->redirect($this->createUrl('login/signin'));
7、getServerName()
获取当前运行程序的域名网址。
参数说明:
参数为空
举例说明:
例一、
echo $this->getServerName();
五、程序调试、信息提示
1、showMsg($message, $targetUrl = null, $holdTime = 3)
显示提示信息操作。 本方法支持URL的自动跳转,当显示时间有效期失效时则跳转到自定义网址,若跳转网址为空则函数不执行跳转功能,当自定义网址参数为-1时默认为:返回上一页。
参数说明:
$message : 所要显示的提示信息
$targetUrl : 所要跳转的自定义网址
$holdTime : 显示信息的有效期,注:(单位:秒) 默认为3秒
举例说明:
例一、
$this->showMsg('测试成功', 'http://www.doitphp.com', 5);
例二、
$this->showMsg('返回上一页', -1);
2、dump($data, $option = false)
优雅输出print_r()函数所要输出的内容。 用于程序调试时,完美输出调试数据,功能相当于print_r().当第二参数为true时(默认为:false),功能相当于var_dump()。注:本方法一般用于程序调试。
参数说明:
$data : 所要输出的数据
$option : 选项:true(显示var_dump()的内容)/ false(显示print_r()的内容)
举例说明:
例一、
$demo = range(0, 100, 10);
$this->dump($demo);
例二、
$demo = range(0, 100, 10);
$this->dump($demo, true);
六、视图操作
1、assign($keys, $value = null)
视图变量赋值操作。
参数说明:
$keys : 视图变量名,支持数组
$value : 视图变量值,当$keys为数组时,本参数设置无效
举例说明:
例一、
$this->assign('sitename', 'doitphp');
例二、
$this->assign(array(
'sitename'=>'doitphp',
));
2、display($fileName = null)
显示当前页面的视图内容。 包括视图页面中所含有的挂件(widgets), 视图布局结构(layouts), 及render()所加载的视图片段等。
参数说明:
$fileName : 视图名称。注:名称中不带.php后缀,通常格式:“controller/action”当本参数为空时,则默认为当前controller,当前action所对应的视图文件。
举例说明:
例一、
$this->display();
例二、
//视图文件为当前controller目录下的test.php或test.html(具体看主配置文件设置)
$this->display('test');
例三、
$this->display('test/demo');
或
$this->display('test.demo');
3、setLayout($layoutName = null)
设置视图文件布局结构视图的文件名(layout)
参数说明:
$layoutName : 所要设置的layout名称。默认值为:null,即:不使用layout视图
举例说明:
例一、
$this->setLayout('main');
4、render($fileName = null, $data = array(), $return = false)
加载并显示视图片段文件内容。 相当于include 代码片段,当$return为:true时返回代码代码片段内容,反之则显示代码片段内容。
参数说明:
$fileName : 视图片段文件名称
$data : 视图模板变量,注:数组型
$return : 视图内容是否为返回,当为true时为返回,为false时则为显示。 默认为:false
举例说明:
例一、
$this->render('list/show', array('data'=>$data));
例二、
$emailContent = $this->render('template/email', array('data'=>$data), true);
5、widget($widgetName, $params = array())
调用视图文件的挂件(widget)。 加载挂件内容,一般用在视图内容中。
参数说明:
$widgetName : 所要加载的widget名称,注没有后缀名
$params : 所要传递的参数
举例说明:
例一、
$this->widget('mainMenu');
例二、
$this->widget('loginIn', array('userName'=>'tommy'));
6、getView()
返回视图的实例化对象
参数说明:
参数为空
例一、
$viewPath = BASE_PATH . '/views/news2020';
$this->getView()->setViewPath($viewPath);
七、文件导入、单例模式实例化常用操作
1、import($fileName)
静态加载文件,相当于inclue_once()。
参数说明:
$fileName:所要加载的文件路径。注:默认目录为application的子目录:library
举例说明:
例一:
$this->import('snoopy.php');
例二:
$this->import(BASE_PATH . '/extensions/editer/fck.php');
2、instance($className)
类的单例实例化操作。 用于类的单例模式的实例化,当某类已经实例化,第二次实例化时则直接反回初次实例化的object,避免再次实例化造成的系统资源浪费。
参数说明:
$className : 所要实例化的类名
举例说明:
例一、
$excelObj = $this->instance('execel');
3、model($modelName)
单例模式实例化一个Model对象。 单例模式实现化一个model对象。初次实例化某Model后, 当第二次实例化时则直接调用初次实现化的结果(object)。
参数说明:
$modelName : 所要实例化的Modle名称
举例说明:
例一、
$postModel = $this->model('post');
4、ext($extensionName)
加载并单例模式实例化扩展插件。 注:这里所调用的扩展插件存放在extensions目录里的子目录中。如:当加参数为demo,则子目录为名demo。 ext是extension简写。
参数说明:
$extensionName : 扩展插件名称
举例说明:
例一、
$editor = $this->ext('ckEditor');
5、getConfig($configName)
静态加载项目设置目录(config目录)中的配置文件。 加载项目设置目录(config)中的配置文件,当第一次加载后,第二次加载时则不再重新加载文件。返回结果为配置文件内容,默认为数据格式为数组。
参数说明:
$configName : 所要加载的配置文件名 注:不含后缀名
举例说明:
例一、
$smtpParams = $this->getConfig('smtp');
八、获取IP、AJAX数据输出
1、getClientIp()
获取客户端IP。
参数说明:
参数为空
举例说明:
例一、
$userIp = $this->getClientIp();
2、ajax($status = true, $msg = null, $data = array(), $code = 200)
Ajax调用返回的数据处理。 返回json数据,供前台ajax调用。
参数说明:
$status : 执行状态 : true/false 或 1/0
$msg : 返回信息
$data : 返回数据,支持数组
$code Http状态码, 默认: 200 ok
举例说明:
例一、
$this->ajax(false, '错误的参数调用!');
例二、
$this->ajax(true, '操作成功', data('targetUrl'=>'refresh'));
九、自定义前函数(类方法)
1、_init()
所谓的“前函数”,就是程序在执行Controller类中的Action类方法前先执行的业务逻辑,即在实例化Controller类时,其构造函数所回调的类方法。这个被回调的类方法有个固定的名称:init。 DoitPHP框架中前函数没有任何业务逻辑(内容为空)。自定义前函数,就是在当前的Controller文件中重定义这个类方法。看下实例代码:
/**
* 这只是一个演示(前函数)
*
* @access protected
* @return void
*/
protected function _init() {
//判断用户是否登陆,若没有登陆,页面跳转到登陆面
if(!$this->parseLogin()){
$this->redirect($this->createUrl('login/signin'));
}
//设置布局视图
$this->setLayout('userCenter');
//视图赋值公共变量
$this->assign(array(
'baseUrl' => $this->getBaseUrl(),
'assetUrl' => $this->getAssetUrl(),
'selfUrl' => $this->getSelfUrl(),
));
}