三.跳转和重定向 ThinkPHP 在操作数据库时,需要跳转和重定向页面。ThinkPHP 提供了一组方法来解决了这个问题。 //成功和失败的跳转 class UserController extends Controller { public function index() { $flag = true; if ($flag) { //会跳转到:http://localhost/demo39/User/all $this->success('新增成功!', '../User/all'); } else { //会跳转到本页的上一页 $this->error('新增失败!'); } } } PS:success()方法和 error()方法,第一个参数是提示信息、第二个跳转的地址、第三个跳转时间。默认情况下 success()方法是 1 秒,error()方法是 3 秒。
//设置5秒 $this->success('新增成功!', 'list', 5); success()方法和 error()方法,跳转的时候就对应了相应的模版,默认如下: //默认错误跳转对应的模板文件 'TMPL_ACTION_ERROR' =>THINK_PATH .'Tpl/dispatch_jump.tpl', //默认成功跳转对应的模板文件 'TMPL_ACTION_SUCCESS'=>THINK_PATH.'Tpl/dispatch_jump.tpl', //自定义成功和错误提示模版页面 'TMPL_ACTION_SUCCESS'=>'Public/success', 'TMPL_ACTION_ERROR'=>'Public/error', 对于自定义的提示模版,ThinkPHP 提供了一组变量可供使用。
//模版中使用提示变量 操作标题:{$msgTitle}<br /> 页面提示信息:{$message}<br /> 操作状态:{$status}<br /> 跳转等待时间:{$waitSecond}<br /> 页面跳转地址:{$jumpUrl} PS:如果对于数据库操作,采用了 Ajax 方式,那么 success()和 error()会自动 ajaxReturn()方法返回数据提供调用。 ThinkPHP 还单独提供了重定向方法 redirect(),参数和 U()方法一样。这个方法使用的是 URL 规则。 $this->redirect('User/test', array('id'=>5), 5, '页面跳转中...'); 如果只是想纯粹的 URL 跳转,不去使用 URL 规则,那么直接使用 redirect()函数。redirect('http://www.baidu.com', 5, '页面跳转中...');
四.输入变量 我们在获取系统变量或者用户提交的数据时,这些变量数据错综复杂,一不小心就容易 引擎安全隐患,所以,ThinkPHP 提供了轻松和安全获取变量的解决方案。 //常规获取变量方式 $id = $_GET['id']; //获取get变量 $name = $_POST['name']; //获取post变量 $value = $_SESSION['var']; //获取session变量 $name = $_COOKIE['name']; //获取cookie变量 $file = $_SERVER['PHP_SELF']; //获取 server 变量 PS:在 ThinkPHP 中,我们不再建议直接使用传统方式获取,因为没有统一的安全处理 机制,后期调整也会比较麻烦。所以,ThinkPHP 提供 I()方法进行变量的获取和过滤。 I()方法的格式:I('变量类型.变量名',['默认值'],['过滤方法'])
//获取$_GET['id']; echo I('get.id'); //$_GET['id']没有值,则默认1 echo I('get.id', 1); //过滤$_GET['id'] echo I('get.id', '', 'md5'); //获取$_GET; print_r(I('get.')); PS:其他几个系统变量均采用以上方式,这里不在赘述。 ThinkPHP 还提供了一个自动识别各种系统变量类型的接受方法:param。 //param变量自动判断变量类型 echo I('param.id'); //param可以省略 echo I('id'); 如果是 PATHINFO 模式的 URL,param 也可以接收。 //param获取URL所有参数 print_r(I('param.0')); PS:取消和开启 URL 的'URL_PARAMS_BIND_TYPE'=>1 配置定义,在访问这个 URL 的 时候结果有所不同:http://localhost/demo39/User/index/id/5/type/a 关闭 URL 传参顺序:Array ( [id] => 5 [type] => a ) 开启 URL 传参顺序:Array ( [0] => id [1] => 5 [2] => type [3] => a )
//param获取指定参数值 echo I('param.id'); echo I('param.type'); 默认情况下,I()的默认过滤是:htmlspecialchars,过滤掉 HTML。 //过滤HTML,如果去掉了,则传递包含HTML的字符串,将不过滤 'DEFAULT_FILTER'=>'htmlspecialchars',
当然,如果不过滤,也可以在程序中过滤。 //设置过滤函数,会忽略配置文件里的设置 echo I('get.id', '', 'htmlspecialchars'); 如果系统设置了默认的过滤,本身某个函数又不想过滤,那么可以这么处理: //设置屏蔽系统默认过滤 echo I('get.id','', false); //第三参数为空字符串均可