>백엔드 개발 >PHP 튜토리얼 >ThinkPHP 프레임워크 자동 채우기 원리 및 사용 분석

ThinkPHP 프레임워크 자동 채우기 원리 및 사용 분석

不言
不言원래의
2018-04-09 14:10:081709검색

이 글에서는 thinkPHP 프레임워크의 자동 채우기에 대해 주로 소개하고, thinkPHP 프레임워크의 자동 채우기 원리와 사용법에 대한 좀 더 자세한 분석을 결합했습니다.

이 글에서는 원리를 분석합니다. 예제를 통한 thinkPHP 프레임워크 자동 채우기 사용법. 참고를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

thinkphp에는 필드를 자동으로 채우는 방법이 있습니다

채우기 규칙은 다음과 같습니다


array(
   array(完成字段1,完成规则,[完成条件,附加规则]),
   array(完成字段2,完成规则,[完成条件,附加规则]),
   ......
);


참고: 공부한 후 소스 코드에서 실제로 4번째 매개변수가 매개변수를 함수나 콜백 메소드에 전달하는 데 사용되는 것을 발견했습니다. 매개변수 1은 기본적으로 필드 값 로 설정됩니다. 예:


array('mobile','trim',3,'function',参数2,参数3'),


결제 동적 확인 and static

정적 검증

모델 클래스에서 모델의 자동 검증 규칙을 미리 정의하고, create 메소드를 사용한 후 자동으로 검증합니다. create方法后会自动去验证。

以下是官方的例子

1.首先在模型中定义好验证的规则


namespace Home\Model;
use Think\Model;
class UserModel extends Model{
   protected $_auto = array (
     array('status','1'), // 新增的时候把status字段设置为1
     array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理
     array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法
     array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳
   );
}


2.在调用的时候用create方法会自动进行填充


$User = D("User"); // 实例化User对象
if (!$User->create()){ // 创建数据对象
   // 如果创建失败 表示验证没有通过 输出错误提示信息
   exit($User->getError());
}else{
   // 验证通过 写入新增数据
   $User->add();
}


动态验证

以下是官方的例子


$rules = array (
  array('status','1'), // 新增的时候把status字段设置为1
  array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理
  array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳
);
$User = M('User');
$User->auto($rules)->create();
$User->add();


下面是核心的代码分析:

create方法调用后会调用autoOperation

다음은 공식 예시입니다


1. 먼저 모델에 검증 규칙을 정의하세요


/**
 * 自动表单处理
 * @access public
 * @param array $data 创建数据
 * @param string $type 创建类型
 * @return mixed
 */
private function autoOperation(&$data,$type) {
  if(!empty($this->options['auto'])) {
    $_auto  =  $this->options['auto'];
    unset($this->options['auto']);
  }elseif(!empty($this->_auto)){
    $_auto  =  $this->_auto;
  }
  // 自动填充
  if(isset($_auto)) {
    foreach ($_auto as $auto){
      // 填充因子定义格式
      // array('field','填充内容','填充条件','附加规则',[额外参数])
      if(empty($auto[2])) $auto[2] = self::MODEL_INSERT; // 默认为新增的时候自动填充
      //这里的判断是关键,$type为当前的操作状态,值为1表示是插入,值为2表示是更新
      //如果当前的$type状态值等于设置的值$auto[2]或者$auto[2]的值为3,代表需要填充
      if( $type == $auto[2] || $auto[2] == self::MODEL_BOTH) {
        if(empty($auto[3])) $auto[3] = 'string';
        switch(trim($auto[3])) {
          case 'function':  // 使用函数进行填充 字段的值作为参数
          case 'callback': // 使用回调方法
            $args = isset($auto[4])?(array)$auto[4]:array();
            if(isset($data[$auto[0]])) {
              array_unshift($args,$data[$auto[0]]);
            }
            if('function'==$auto[3]) {
              $data[$auto[0]] = call_user_func_array($auto[1], $args);
            }else{
              $data[$auto[0]] = call_user_func_array(array(&$this,$auto[1]), $args);
            }
            break;
          case 'field':  // 用其它字段的值进行填充
            $data[$auto[0]] = $data[$auto[1]];
            break;
          case 'ignore': // 为空忽略
            if($auto[1]===$data[$auto[0]])
              unset($data[$auto[0]]);
            break;
          case 'string':
          default: // 默认作为字符串填充
            $data[$auto[0]] = $auto[1];
        }
        if(isset($data[$auto[0]]) && false === $data[$auto[0]] )  unset($data[$auto[0]]);
      }
    }
  }
  return $data;
}

2. 호출 시 create 메소드를 사용하여 자동으로 채워주세요.

rrreee🎜🎜🎜🎜🎜동적 검증🎜🎜🎜공식 예시는 다음과 같습니다🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜핵심 코드 분석은 🎜🎜🎜 create 메소드가 호출된 후 autoOperation 메소드로 호출되며, 메소드는 다음과 같습니다🎜🎜🎜🎜rrreee🎜관련 권장 사항:🎜🎜🎜🎜ThinkPHP의 몇 가지 기본 사용 방법🎜🎜🎜🎜lnmp 환경에서 thinkphp5의 필수 구성🎜🎜

위 내용은 ThinkPHP 프레임워크 자동 채우기 원리 및 사용 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.