当前位置: 首页 > 文档资料 > DoitPHP 帮助文档 >

4.2 Controller应用

优质
小牛编辑
129浏览
2023-12-01

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 : 默认值

2、setCookie($cookieName,$value,$expire=null)

设置某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(),
));
}