ThinkPHP3 添加内容 I方法接收 add方法添加 thinkphp5使用Request方法

thinkphp5的方式

新的版本中,接收方法也进行了改变,3的方法写代码时会更简洁,但5的方法让人一看更高大上,更接近高级语言的模式(要命)

注:框架默认没有设置任何过滤规则,你可以是配置文件中设置全局的过滤规则,过滤规则的使用,请参考另一篇文章:点击查看,以下只是获取变量的使用方法。


可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量(此处将Requert可替代系统默认的变量有这些),以及文件上传信息。

检测变量是否设置

可以使用has方法来检测一个变量参数是否设置,如下:
Request::instance()->has('id','get');
Request::instance()->has('name','post');
或者使用助手函数
input('?get.id');
input('?post.name');
变量检测可以支持所有支持的系统变量。

该方法还有另一个写法
$this->request->has('输入变量名')

变量获取

变量获取使用\think\Request类的如下方法及参数:

变量类型方法('变量名/变量修饰符','默认值','过滤方法')
变量类型方法包括:
方法 描述
param 获取当前请求的变量
get 获取 $_GET 变量
post 获取 $_POST 变量
put 获取 PUT 变量
delete 获取 DELETE 变量
session 获取 $_SESSION 变量
cookie 获取 $_COOKIE 变量
request 获取 $_REQUEST 变量
server 获取 $_SERVER 变量
env 获取 $_ENV 变量
route 获取 路由(包括PATHINFO) 变量
file 获取 $_FILES 变量

以上方法的两种写法

Request::instance()->方法名();
$this->request->方法名();

大家常用param方法

param变量是框架提供的用于自动识别GETPOST或者PUT请求的一种变量获取方式,是系统推荐的获取请求参数的方法,用法如下:
// 获取当前请求的name变量
Request::instance()->param('name');
// 获取当前请求的所有变量(经过过滤)
Request::instance()->param();
// 获取当前请求的所有变量(原始数据)
Request::instance()->param(false);
// 获取当前请求的所有变量(包含上传文件)
Request::instance()->param(true);

或使用助手函数实现:
input('param.name');
input('param.');
或者
input('name');
input('');
单获取GET变量用法
Request::instance()->get('id'); // 获取某个get变量
Request::instance()->get('name'); // 获取get变量
Request::instance()->get(); // 获取所有的get变量(经过过滤的数组)
Request::instance()->get(false); // 获取所有的get变量(原始数组)
或者使用内置的助手函数input方法实现相同的功能:
input('get.id');
input('get.name');
input('get.');
单获取POST变量方法
Request::instance()->post('name'); // 获取某个post变量
Request::instance()->post(); // 获取经过过滤的全部post变量
Request::instance()->post(false); // 获取全部的post原始变量
使用助手函数实现:
input('post.name');
input('post.');
其它方法类似,请自参考

获取部分变量

如果你只需要获取当前请求的部分参数,可以使用:
// 只获取当前请求的id和name变量
Request::instance()->only('id,name');
或者使用数组方式
// 只获取当前请求的id和name变量
Request::instance()->only(['id','name']);
默认获取的是当前请求参数,如果需要获取其它类型的参数,可以使用第二个参数,例如:
// 只获取GET请求的id和name变量
Request::instance()->only(['id','name'],'get');
// 只获取POST请求的id和name变量
Request::instance()->only(['id','name'],'post');

排除部分变量

也支持排除某些变量获取,例如
// 排除id和name变量
Request::instance()->except('id,name');
或者使用数组方式
// 排除id和name变量
Request::instance()->except(['id','name']);
同样支持指定变量类型获取:
// 排除GET请求的id和name变量
Request::instance()->except(['id','name'],'get');
// 排除POST请求的id和name变量
Request::instance()->except(['id','name'],'post');

变量修饰符

input函数支持对变量使用修饰符功能,可以更好的过滤变量。

用法如下:

input('变量类型.变量名/修饰符');
或者
Request::instance()->变量类型('变量名/修饰符');
例如:
input('get.id/d');
input('post.name/s');
input('post.ids/a');
Request::instance()->get('id/d');
ThinkPHP5.0版本默认的变量修饰符是/s,如果需要传入字符串之外的变量可以使用下面的修饰符,包括:
修饰符 作用
s 强制转换为字符串类型
d 强制转换为整型类型
b 强制转换为布尔类型
a 强制转换为数组类型
f 强制转换为浮点类型
如果你要获取的数据为数组,请一定注意要加上 /a 修饰符才能正确获取到。

一个代码范本

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Db;

class Index extends Controller //只有继承了Controller才可以使用这些方法
{       
    public function dq($name = "中国")
		{							
				$name = $this->request->has('name'); //第一种写法
				{
					echo "变量存在<br>";	
				}
				print_r(Request::instance()->param('name')); //第二种写法
				
				//TP5渲染模板的方式,要命
				 return view('');
		}
}
输出后的结果
变量存在
ssss
  
注:ssss是我随机输入的

以下为thinkphp3的方式

一个是控制器处理文件,一个是前台模板文件。这样一比较发现TP写网站确实简单了不止一点两点,简单了太多。

控制器内容

#add方法
		 public function add()
		 {
		 	#判断是否有数据提交过来
		 	#有数据则为真,否则为假
		 	if(IS_POST)
			{
				#处理表单提交
				#用I('post.')代表接收所有数据,否则请使用I('post.表单name值')单项接收
				#此处的I不需要其它的过滤方法及规则,所以直接用即可
				$post = I('post.');
				#写入数据
				$model = M('Dept');
				$result = $model -> add($post);
				
				#判断返回值
				if($result)
				{
					#成功
					#成功则跳转到当前的showList方法
					$this->success('添加成功',U('showList'),3);
				}else{
					#失败
					$this->error('添加失败');
				}
				
			}else{
				#如果没有POST提交数据,那就显示添加页面,并将查询到的目录放到页面中
				$model = M('Dept');
				#查询顶级目录
				$data = $model->where('pid = 0')->select();
				
				$this->assign('data',$data);
			 	$this->display();
			}
		 }

前台add.html模板文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Add</title>
		<script src="__ADMIN__/jquery.js"></script>
		
	</head>
	<body>
		<h2>信息登记</h2>
		<!-- 如果提交到的是当前方法,则可以不写提交路径 -->
		<form action="" method="post">
			<p>
				<label>部门名称:</label>
				<input type="text" name="name" placeholder="部门名称">
			</p>
			<p>
				<label>上级部门:</label>
				<select name="pid">
					<option value="0">顶级部门</option>
					<volist name='data' id='vol'>
						<option value="{$vol.id}">{$vol.name}</option>
					</volist>
				</select>
			</p>
			<p>
				<label>排序:</label>
				<input type="text" name="sort" placeholder="排序">
			</p>
			<p>
				<label>备注:</label>
				<input type="text" name="remark" placeholder="备注">
			</p>
			<p>
				<a href="javascript:;" class="confirm">确定</a>
			</p>
		</form>
		<script>			
			//jQuery
			$(function()
			{
				$('.confirm').on('click',function(){
					$('form').submit();
				});
			});
		</script>
	</body>
</html>

评论

大侠名号:   验证暗号: 点击我更换图片

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND