이 글은 ThinkPHP에서 create 메소드 구현과 자동 토큰 확인을 예시로 보여줍니다.
1. 데이터 테이블 구조
사용자 테이블 구조는 다음과 같습니다.
아이디 사용자 이름 비밀번호
2. 템플릿 부분 보기
aoliHomeTpldefaultUsercreate.html 페이지는 다음과 같습니다.
<form action="__URL__/addit" method="post"> <input type="text" name="id" /> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" name="sub" value="提交" /> </form>
3. 액션 부분:
aoliHomeLibAction.php 페이지는 다음과 같습니다.
<?php class UserAction extends Action { function create(){ $this->display(); } function addit(){ //向表user中添加表单内容 $user=M('user'); $user->create(); $user->add(); //判断是否存在令牌验证 if(!$user->autoCheckToken($_POST)){ dump('no'); }else{ dump('yes'); } } ?>
1. 양식을 통해 제출된 데이터를 작동하기 전에 위에 제출된 양식 데이터와 같은 필수 데이터를 수동으로 생성해야 하는 경우가 많습니다.
//实例化User模型 $user=M('user'); //获取表单的POST数据 $data['username']=$_POST['username'] $data['password']=$_POST['password'] //写入到数据库 $user->data($data)->add();
첨부: 데이터 메소드를 사용하여 생성된 데이터 개체는 자동으로 확인 및 필터링되지 않으며, 단순히 데이터 개체를 생성하고 일부 추가 기능을 완료할 필요가 없는 경우에는 다음을 수행할 수 있습니다. 간단히 데이터 메소드를 사용하십시오.
2. ThinkPHP는 데이터 객체를 빠르게 생성하는 데 도움이 됩니다. 가장 일반적인 응용 프로그램은 양식 데이터를 기반으로 데이터 객체를 자동으로 생성하는 것입니다. create 메소드로 생성된 데이터 객체는 메모리에 저장되며 실제로 데이터베이스에 기록되지 않습니다.
//实例化user模型 $user=M('user'); //根据表单提交的POST数据创建数据对象,并保存在内存中,可以通过dump($user)查看 $user=create(); //把创建的数据对象写入数据库中 $user->add();
3. create 메소드는 다른 데이터 객체나 배열 등 다른 방법으로 데이터 객체를 생성하는 것을 지원합니다.
$data['name']='ThinkPHP'; $data['eamil']='ThinkPHP@gmail.com'; $user->create($data); 甚至还可以支持从对象创建新的数据对象,如从user数据对象创建新的member数据对象 $user=M('user'); $user->find(1); $member=M('member'); $member->create($user);
4. 데이터 객체를 생성하는 동안 create 메소드는 토큰 확인, 자동 데이터 확인, 필드 유형 검색, 자동 데이터 완성 등을 포함한 몇 가지 의미 있는 작업도 완료합니다.
따라서 우리에게 익숙한 토큰 검증, 자동 검증 및 자동 완성 기능이 실제로 적용되려면 create 메소드를 사용해야 합니다.
5. 토큰 검증:
기능: 양식의 원격 제출 및 기타 보안 보호를 효과적으로 방지할 수 있습니다.
config.php에 다음 구성을 추가합니다.
'TOKEN_ON' => true, //是否开启令牌验证 'TOKEN_NAME' => 'token',// 令牌验证的表单隐藏字段名称 'TOKEN_TYPE' => 'md5',//令牌验证哈希规则
자동 토큰은 md5 암호화 문자열을 현재 SESSION 세션에 넣습니다. 그리고 이 문자열을 폼 앞에 숨겨진 필드 형태로 삽입합니다. 이 문자열은 두 위치에 나타납니다. 하나는 SESSION에 있고 다른 하나는 양식에 있습니다. 양식을 제출할 때 서버가 가장 먼저 하는 일은 SESSION 정보를 비교하는 것입니다. 정보가 정확하면 양식 제출이 허용되고, 그렇지 않으면 제출이 허용되지 않습니다.
create.html 소스코드를 보면 폼 끝 표시 앞에 자동으로 생성되는 히든 필드가 있는 것을 볼 수 있습니다
<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />
(1) 숨겨진 필드의 위치를 제어하려면 양식 페이지에 {__TOKEN__} 표시를 수동으로 추가하면 템플릿 출력 시 시스템이 자동으로 이를 대체합니다.
(2) 양식 토큰 확인이 켜져 있으면 개별 양식에서 토큰 확인을 사용할 필요가 없습니다.
함수를 사용하면 양식 페이지에 {__NOTOKEN__}을 추가할 수 있으며 시스템은 현재 양식의 토큰 확인을 무시합니다.
(3) 페이지에 여러 양식이 있는 경우 {__TOKEN__} 식별자를 추가하고 하나의 양식에만 토큰 확인이 필요한지 확인하는 것이 좋습니다.
(4) create 메소드를 사용하여 데이터 객체를 생성하는 경우 자동으로 양식 검증이 수행됩니다. 이 메소드를 사용하지 않는 경우 양식 검증을 위해 모델의 autoCheckToken 메소드를 수동으로 호출해야 합니다. .
if (!$User->autoCheckToken($_POST)){ // 令牌验证错误 }
이 기사에 나온 예제가 모든 사람의 ThinkPHP 프로그래밍 설계에 도움이 되기를 바랍니다.