다음은 ThinkPHP에서 create() 메소드를 자동으로 확인하는 예입니다. 내용이 꽤 괜찮아서 지금 공유해서 참고용으로 올려드리겠습니다.
자동 검증은 ThinkPHP 모델 계층에서 제공하는 데이터 검증 방법으로, create를 사용하여 데이터 개체를 생성할 때 자동으로 데이터 검증을 수행할 수 있습니다.
원리:
create() 메소드는 양식($_POST) 정보를 수집하여 반환하는 동시에 양식의 자동 확인을 트리거하고 불법 필드를 필터링합니다.
컨트롤러에서 create() 메소드를 사용합니다. , (반환 값은 true/false임) 모델 클래스의 $_validate 속성을 자동으로 트리거하고(상위 클래스 Model의 메소드이며 하위 클래스 Model에서 다시 작성됨) $_validate에서 확인 규칙을 사용자 정의합니다( 검증 규칙은 아래에서 자세히 설명합니다) , create() 메소드에 데이터가 없고 반환 값이 false인 경우 $xxx 객체->getError();를 통해 오류 정보를 얻어 반환합니다!
자동 검증 사용은 다음 규칙 형식에 따라 정의되어야 합니다.
protected $_validate = array( array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]), ...... );
여기서 검증 필드, 검증 규칙 및 오류 프롬프트가 필요하며 검증 조건, 추가 규칙 및 검증 시간은 다음과 같습니다. 선택 과목!
유효성 검사 필드(필수): 양식 필드.
검증 규칙(필수): 필수 필드는 이메일 주소, URL URL 주소, 번호여야 하며 추가 규칙과 함께 사용할 수도 있습니다.
오류 프롬프트(필수): 인증 실패 시 반환되는 프롬프트 메시지입니다.
검증 조건(선택): 0, 1, 2 세 가지가 있습니다. 0: _POST에 존재하는 필드 검증, 기본값 1: 검증 규칙이 정의된 경우 검증이 필요합니다. 비어 있지 않습니다.
추가 규칙:
regex | 정규 검증, 정의된 검증 규칙은 정규 표현식입니다(기본값) |
function | 함수 검증, 정의된 검증 규칙은 함수 이름 |
callback | 메서드 검증, 정의된 검증 규칙은 현재 모델 클래스의 메서드 |
confirm | 양식의 두 필드가 동일한지 확인합니다. 정의된 검증 규칙은 필드입니다. name |
equal | 이전 유효성 검사 규칙에서 정의한 특정 값과 같은지 확인 |
notequal | 이전 유효성 검사 규칙에서 정의한 특정 값과 같지 않은지 확인 유효성 검사 규칙 (버전 3.1.2의 새로운 기능) |
in | 정의된 확인 규칙은 배열이거나 쉼표로 구분된 문자열일 수 있습니다. |
notin | 여부를 확인하세요. 정의된 확인 규칙은 배열 또는 쉼표로 구분된 문자열일 수 있습니다(3.1.2 버전의 새로운 기능). |
length | 확인 길이는 숫자일 수 있습니다(고정된 문자열을 나타냄). 길이) 또는 숫자 범위(예: 3,12는 3~12 범위의 길이를 나타냄) |
between | 검증 범위, 정의된 검증 규칙은 범위를 나타내며, 문자열이나 배열을 사용할 수 있습니다. 1,31 또는 array(1,31) |
notbetween | 특정 범위에 속하지 않는지 확인하세요. 정의된 확인 규칙은 범위를 나타내며 문자열이나 배열을 사용할 수 있습니다(버전 3.1.2의 새로운 기능). |
expire | 유효 기간 내에 있는지 확인하기 위해 정의된 확인 규칙은 시간 범위를 나타내며 이는 최대 시간까지 가능합니다. 예를 들어 2012 -1-15,2013-1-을 사용할 수 있습니다. 15는 현재 제출 유효 기간이 2012-1-15에서 2013-1-15 사이임을 의미합니다. 또한 타임스탬프 정의 |
ip_allow | 를 사용하여 IP가 허용되는지 여부와 정의된 확인을 확인할 수도 있습니다. 허용된 IP 주소 목록(예: 201.12.2.5,201.12.2.6 |
ip_deny | 해당 IP가 금지되었는지 확인하고 정의된 확인 규칙은 금지된 IP 주소 목록을 쉼표로 구분하여 나타냄) (예: 201.12.2.5, 201.12.2.6 |
unique | 시스템은 필드의 현재 값을 기반으로 데이터베이스를 쿼리하여 동일한 값이 있는지 확인합니다. 기본 키 필드, 고유는 기본 키 필드 자체를 결정하는 데 사용할 수 없습니다 |
验证时间(可选):共有1,2,3三种,1:新增数据时候验证;2:编辑数据时候验证;3:全部情况下验证(默认);也可以可以根据业务需要增加其他的验证时间
下面附上代码:以注册为例
前台页面比较简单,代码就不贴出来了,下面是前台注册界面截图
控制器代码:
//注册 public function register(){ $user = new \Model\UserModel(); //两个逻辑:收集,展示 if (!empty($_POST)) { //create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段 $date = $user->create(); //通过create()方法的返回值$date判断验证是否成功 if ($date) { //返回实在数据的时候才进行添加 //implode()把数组变为字符串 $date['user_hobby'] = implode(',', $date['user_hobby']); $info = $user->add($date); if ($info) { //跳转首页 $this->redirect('Index/index'); } }else{ //把错误信息分配到前台模板 $error = $user->getError(); $this->assign('error',$error); } } //调用view视图 $this->display(); }
模型类代码:
class UserModel extends Model{ //是否批量处理验证,批量获取全部的错误验证信息 protected $patchValidate = true; //默认为false //自动验证定义 protected $_validate = array( //array(字段,验证规则,错误提示,验证条件,附加规则,验证时间) //①用户名验证,不能为空 array('username','require','用户名不能为空'), array('username','','该用户名已经被占用','0','unique'), //②密码验证,不为空 array('password','require','密码不能为空'), //③验证确认密码,必须填写,与密码保持一致 array('password2','require','确认密码必须填写'), array('password2','password','两次密码保持一致',0,'confirm'), //④邮箱验证 array('user_email','email','邮箱格式不正确',2), //⑤qq验证,数字组成,5-12位 array('user_qq','number','qq必须是数字'), array('user_qq','5,12','位数在5-12位之间',0,'length'), //⑥学历验证,必须选一个 array('user_xueli','2,5','学位必须选择一个',0,'between'), //⑦爱好验证,必须选择二个以上 //因为爱好返回的是数组,附加规则中没有可以直接用的规则,所以需自定义方法,用callback方法验证 array('user_hobby','check_hobby','爱好必须选两项或以上',1,'callback'), ); //定义方法进行爱好验证 //参数$arg代表被验证的表单信息 function check_hobby($arg) { //判断数组长度是否大于2 if (count($arg)<2) { return false; //会自动输出验证错误信息 } return true; } }
把验证的错误信息在模板中给展示出来(部分代码)
<td style="width:13%; text-align: right;"> <label for="User_username" class="required">用户名 <span>*</span></label> </td> <td style="width:87%;"> <input class="inputBg" size="25" name="username" id="User_username" type="text" value="" /> <span style="color:red;"><{$error.username|default:""}></span> </td>
结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
关于ThinkPHP利用getlist方法实现数据搜索功能的分析
위 내용은 ThinkPHP의 create() 메소드 자동 확인 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!