第四章 笔记(构建验证层笔记)20181229

第三章结尾
tp5比较灵活的3点
路由
获取参数变量
数据库查询(最灵活)

早晨电脑中毒了,重装后在新环境下偶然发现的问题
tp5在phpStudy虚拟路径下不能隐藏index.php
解决方法

修改配置.htaccess

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L](php fastcgi模式,服务器不识别PATH_INFO)

修改为

RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

(来源:http://www.cnblogs.com/wangjiayi/p/7943268.html)
数据库设计
1.是否使用外键约束(保证数据的完整性和一致性)?
主要看自身的业务多少和数据库稳定等等决定。如果业务板块少,数据库结构稳定,那么用外键能好些。否则,可以不使用。(现在很少小公司业务变动较快,一般没有使用外键)

2.采用假删除
能很好的保护数据便于分析,且系统的稳定性和容错率会更高些。

3.设计表
初步想的越完善越好(根据自身经验和项目时间),迭代方式(一般会根据业务需求有所变更)

第四章 构建验证层

需要注意:强制路由需要规范书写,分大小写比较好,三段式(module/controller/action)

Route::get('banner/:id','api/v1.Banner/getBanner');//正确

验证 (独立验证,验证器)
客户端传过来的数据都是不可信的,需要过接口校验

内置验证规则

	public function getBanner($id)
	{
		//需要验证的数据
		$data = [
			'name' => 'huisssssssssssssss',
			'email' => 'hui@qq.com'
		];
		//验证规则
		$validate = new Validate([
			'name' => 'require|max:16',
			'email' => 'email'
			]);
		$result = $validate->check($data);
		//单一验证调试
		echo $validate->getError();
	}

在这里插入图片描述

public function getBanner($id)
	{
		//需要验证的数据
		$data = [
			'name' => 'huisssssssssssssss',
			'email' => 'huiqq.com'
		];
		//验证规则
		$validate = new Validate([
			'name' => 'require|max:16',
			'email' => 'email'
			]);

		// $result = $validate->check($data);
		//批量验证(数组)
		$result = $validate->batch()->check($data);
		$err = $validate->getError();
		var_dump($err);
	}

在这里插入图片描述
验证器(官方推荐,封装性更好,简化代码)

<?php 
namespace app\api\validate;

use think\Validate;

class TestValidate extends Validate
{
	//受保护的   固定变量名rule
	protected $rule = [
			'name' => 'require|max:16',
			'email' => 'email'
	];
}

use app\api\validate\TestValidate;	//必须引入
	//验证器
	$validate = new TestValidate();	

在这里插入图片描述
自定义验证规则
当内置验证规则不满足时,可自定义优化

class IdIsInt extends Validate
{
	protected $rule = [
			'name' => 'require|max:16',
			'email' => 'email',
			'id' => 'require|isInteger'
	];

	protected function isInteger($value,$rule = '',$data = '',$field = '')
	{
		if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
		    return true;
		}
		else{
		    return $field.'必须是正整数';
		}
	}
	// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	public function getBanner($id)
	{
		//需要验证的数据
		$data = [
			'name' => 'huisssssssssssssss',
			'email' => 'huiqq.com',
			'id' => '0'
			// 'id' => '1'
		];
		// 验证规则
		// $validate = new Validate([
		// 	'name' => 'require|max:16',
		// 	'email' => 'email'
		// 	]);

		//验证器
		// $validate = new TestValidate();

		//自定义验证
		$validate = new IdIsInt();

		// $result = $validate->check($data);
		//批量验证(数组)
		$result = $validate->batch()->check($data);
		$err = $validate->getError();
		var_dump($err);
	}

在这里插入图片描述
20181230补充:
借助基类封装验证器,简化代码

<?php 
namespace app\api\validate;
use think\Validate;
use think\Request;
use think\Exception;

class BaseValidate extends Validate
{
	public function goCheck(){
		$req = Request::instance()->param();
		$result = $this->Check($req);
		if (!$result) {
			$err = $this->error;
			throw new Exception($err);//tp5默认异常
		}else{
			return true;
		}
	}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~
class IdIsInt extends BaseValidate
{
	protected $rule = [
			'name' => 'require|max:16',
			'email' => 'require|email',
			'id' => 'require|isInteger'
	];
	protected function isInteger($value,$rule = '',$data = '',$field = '')
	{
		if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
		    return true;
		}
		else{
		    return $field.'必须是正整数';
		}
	}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~
	public function getBanner($id)
	{
		(new IdIsInt())->goCheck();
	}

在这里插入图片描述
现阶段容易犯的一个错误,在不借助工具的情况下,跨控制器容易忘记引入控制器,还好现阶段的能看出异常,学会调试很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值