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:否)

举例说明:

  1. 例一、
  2. $name = $this->get('name');
  3.  
  4. 例二、
  5. $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:否)

举例说明:

  1. 例一、
  2. $name = $this->post('name');

3、getParams($key = null, $default = null, $isEncode = true)

|获取并分析$_GET或$_POST全局超级变量数组某参数的值。 获取并分析$_POST['参数']的值 ,当$_POST['参数']不存在或为空时,再获取$_GET['参数']的值。
|参数说明:
|$key : 所要获取的参数名称。当本参数为空时,则获取全部$_POST及$_GET的值
|$default : 默认参数, 注:只有$key不为数组时有效
|$isEncode : 是否对符串进行htmlspecialchars()转码(true:是/ false:否)

举例说明:

  1. 例一、
  2. $name = $this->getParams('name');

4、getCliParams($key = null, $default = null, $isEncode = true)

|获取PHP在CLI运行模式下的参数。当本参数为空时,则获取全部参数(数组)
|参数说明:
|$key : 参数键值, 注:不支持数组
|$default : 默认参数值
|$isEncode : 是否对符串进行htmlspecialchars()转码(true:是/ false:否)

举例说明:

  1. 例一、
  2. $modeName = $this->getCliParams('modeName');

1、getCookie($cookieName = null, $default = null)

|获取某cookie变量的值
|参数说明:
|$cookieName : cookie变量名。当本参数为空时,则获取全部的Cookie(数组)
|$default : 默认值

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

|设置某cookie变量的值
|参数说明:
|$cookieName : cookie的变量名
|$value : cookie值
|$expire : cookie的生存周期,默认为1小时。注:如果在主配置文件中设置了Cookie生存周期时,若本参数为空,则默认为主配置文件中设置的数值。如果本参数不为空,即使主配置文件中设置了生存周期,依然以本参数为准。
|$path : cookie所存放的目录。当本参数为空时,则默认值“/”,即根目录。
|$domain : cookie所支持的域名,默认为空

举例说明:

  1. 例一、
  2. $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)

|设置某session变量的值
|参数说明:
|$sessionName : session的变量名
|$value : 所要设置的session值

3、deleteSession($sessionName)

|删除某session变量的值
|参数说明:
|$sessionName : session变量名

四、常用URL处理

1、getBaseUrl()

|获取当前项目的根目录的URL。 本类方法常用于网页的CSS, JavaScript,图片等文件的调用
|参数说明:
|参数为空

举例说明:

  1. 例一、
  2. $this->assign('baseUrl', $this->getBaseUrl());

2、getSelfUrl($params = array())

|获取当前运行的Action的URL。 获取当前Action的URL. 注:该网址由当前的控制器(Controller)及动作(Action)组成。注:支持参数信息
|参数说明:
|$params : url路由其它字段。注:url的参数信息

举例说明:

  1. 例一、
  2. $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目录的子目录名

举例说明:

  1. 例一、
  2. $this->getAssetUrl();
  3.  
  4. 例二、
  5. $this->getAssetUrl('images/thickbox');
  6. $this->getAssetUrl('images.thickbox');

5、createUrl($route, $params = array())

|网址(URL)组装操作。根据主配置文件中的相关设置将网址组装成统一模式(路由模式或标准模式)的网址。注:组装绝对路径的URL。
|参数说明:
|$route : controller与action。例:controllerName/actionName
|$params : URL路由其它字段。注:url的参数信息

举例说明:

  1. 例一、
  2. echo $this->createUrl('post/show');
  3. //URL:/index.php/post/show 或 /index.php?router=post/show
  4.  
  5. 例二、
  6. $this->createUrl('post/view', array('id'=>35));
  7. //URL: 访问目录URL/index.php/post/view/id/35 或 或 /index.php?router=post/view&id=35

6、redirect($url)

|网址(URL)跳转操作。 页面跳转方法,例:运行页面跳转到自定义的网址(即:URL重定向)
|参数说明:
|$url : 所要跳转的网址(URL)

举例说明:

  1. 例一、
  2. $this->redirect('http://www.doitphp.com');
  3.  
  4. 例二、
  5. $this->redirect($this->createUrl('login/signin'));

7、getServerName()

|获取当前运行程序的域名网址
|参数说明:
|参数为空

举例说明:

  1. 例一、
  2. echo $this->getServerName();

五、程序调试、信息提示

1、showMsg($message, $targetUrl = null, $holdTime = 3)

|显示提示信息操作。 本方法支持URL的自动跳转,当显示时间有效期失效时则跳转到自定义网址,若跳转网址为空则函数不执行跳转功能,当自定义网址参数为-1时默认为:返回上一页
|参数说明:
|$message : 所要显示的提示信息
|$targetUrl : 所要跳转的自定义网址
|$holdTime : 显示信息的有效期,注:(单位:秒) 默认为3秒

举例说明:

  1. 例一、
  2. $this->showMsg('测试成功', 'http://www.doitphp.com', 5);
  3.  
  4. 例二、
  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()的内容)

举例说明:

  1. 例一、
  2. $demo = range(0, 100, 10);
  3. $this->dump($demo);
  4.  
  5. 例二、
  6. $demo = range(0, 100, 10);
  7. $this->dump($demo, true);

六、视图操作

1、assign($keys, $value = null)

|视图变量赋值操作
|参数说明:
|$keys : 视图变量名,支持数组
|$value : 视图变量值,当$keys为数组时,本参数设置无效

举例说明:

  1. 例一、
  2. $this->assign('sitename', 'doitphp');
  3.  
  4. 例二、
  5. $this->assign(array(
  6. 'sitename'=>'doitphp',
  7. ));

2、display($fileName = null)

|显示当前页面的视图内容。 包括视图页面中所含有的挂件(widgets), 视图布局结构(layouts), 及render()所加载的视图片段等
|参数说明:
|$fileName : 视图名称。注:名称中不带.php后缀,通常格式:“controller/action”当本参数为空时,则默认为当前controller,当前action所对应的视图文件。

举例说明:

  1. 例一、
  2. $this->display();
  3.  
  4. 例二、
  5. //视图文件为当前controller目录下的test.php或test.html(具体看主配置文件设置)
  6. $this->display('test');
  7.  
  8. 例三、
  9. $this->display('test/demo');
  10. $this->display('test.demo');

3、setLayout($layoutName = null)

|设置视图文件布局结构视图的文件名(layout)
|参数说明:
|$layoutName : 所要设置的layout名称。默认值为:null,即:不使用layout视图

举例说明:

  1. 例一、
  2. $this->setLayout('main');

4、render($fileName = null, $data = array(), $return = false)

|加载并显示视图片段文件内容。 相当于include 代码片段,当$return为:true时返回代码代码片段内容,反之则显示代码片段内容
|参数说明:
|$fileName : 视图片段文件名称
|$data : 视图模板变量,注:数组型
|$return : 视图内容是否为返回,当为true时为返回,为false时则为显示。 默认为:false

举例说明:

  1. 例一、
  2. $this->render('list/show', array('data'=>$data));
  3.  
  4. 例二、
  5. $emailContent = $this->render('template/email', array('data'=>$data), true);

5、widget($widgetName, $params = array())

|调用视图文件的挂件(widget)。 加载挂件内容,一般用在视图内容中
|参数说明:
|$widgetName : 所要加载的widget名称,注没有后缀名
|$params : 所要传递的参数

举例说明:

  1. 例一、
  2. $this->widget('mainMenu');
  3.  
  4. 例二、
  5. $this->widget('loginIn', array('userName'=>'tommy'));

6、cache($cacheId = null, $expire = null)

|分析并加载视图缓存
|参数说明:
|$cacheId : 页面文件的缓存ID
|$expire : 页面缓存的生存周期

举例说明:

  1. 例一、
  2. $this->cache('citylist-beijing');

7、getView()

|返回视图的实例化对象
|参数说明:
|参数为空

举例说明:

  1. 例一、
  2. $viewPath = BASE_PATH . '/views/new2017';
  3. $this->getView()->setViewPath($viewPath);

七、文件导入、单例模式实例化常用操作

1、import($fileName)

举例说明:

  1. 例一:
  2. $this->import('snoopy.php');
  3.  
  4. 例二:
  5. $this->import(BASE_PATH . '/extensions/editer/fck.php');

2、instance($className)

|类的单例实例化操作。 用于类的单例模式的实例化,当某类已经实例化,第二次实例化时则直接反回初次实例化的object,避免再次实例化造成的系统资源浪费
|参数说明:
|$className : 所要实例化的类名

举例说明:

  1. 例一、
  2. $excelObj = $this->instance('execel');

3、model($modelName)

|单例模式实例化一个Model对象。 单例模式实现化一个model对象。初次实例化某Model后, 当第二次实例化时则直接调用初次实现化的结果(object)
|参数说明:
|$modelName : 所要实例化的Modle名称

举例说明:

  1. 例一、
  2. $postModel = $this->model('post');

4、ext($extensionName)

|加载并单例模式实例化扩展插件。 注:这里所调用的扩展插件存放在extension目录里的子目录中。如:当加参数为demo,则子目录为名demo。 ext是extension简写
|参数说明:
|$extensionName : 扩展插件名称

举例说明:

  1. 例一、
  2. $editor = $this->ext('ckEditor');

5、getConfig($configName)

|静态加载项目设置目录(config目录)中的配置文件。 加载项目设置目录(config)中的配置文件,当第一次加载后,第二次加载时则不再重新加载文件。返回结果为配置文件内容,默认为数据格式为数组
|参数说明:
|$configName : 所要加载的配置文件名 注:不含后缀名

举例说明:

  1. 例一、
  2. $smtpParams = $this->getConfig('smtp');

八、获取IP、AJAX数据输出

1、getClientIp()

|获取客户端IP
|参数说明:
|参数为空

举例说明:

  1. 例一、
  2. $userIp = $this->getClientIp();

2、ajax($status = true, $msg = null, $data = array())

|Ajax调用返回的数据处理。 返回json数据,供前台ajax调用
|参数说明:
|$status : 执行状态 : true/false 或 1/0
|$msg : 返回信息
|$data : 返回数据,支持数组

举例说明:

  1. 例一、
  2. $this->ajax(false, '错误的参数调用!');
  3.  
  4. 例二、
  5. $this->ajax(true, '操作成功', data('targetUrl'=>'refresh'));

九、自定义前函数

1、init()

所谓的“前函数”,就是程序在执行Controller类中的Action类方法前先执行的业务逻辑,即在实例化Controller类时,其构造函数所回调的类方法。这个被回调的类方法有个固定的名称:init。 DoitPHP框架中前函数没有任何业务逻辑(内容为空)。自定义前函数,就是在当前的Controller文件中重定义这个类方法。看下实例代码:

  1. /**
  2. * 这只是一个演示(前函数)
  3. *
  4. * @access protected
  5. * @return void
  6. */
  7. protected function init() {
  8.  
  9. //判断用户是否登陆,若没有登陆,页面跳转到登陆面
  10. if(!$this->parseLogin()){
  11. $this->redirect($this->createUrl('login/signin'));
  12. }
  13.  
  14. //设置布局视图
  15. $this->setLayout('userCenter');
  16.  
  17. //视图赋值公共变量
  18. $this->assign(array(
  19. 'baseUrl' => $this->getBaseUrl(),
  20. 'assetUrl' => $this->getAssetUrl(),
  21. 'selfUrl' => $this->getSelfUrl(),
  22. ));
  23. }

原文: http://www.doitphp.com/index/documentation/?articleid=19