>백엔드 개발 >PHP 튜토리얼 >IcePHP 프레임워크의 빠른 백엔드에 있는 범용 CRUD 기능 프레임워크(6) SCrudField 필드 클래스

IcePHP 프레임워크의 빠른 백엔드에 있는 범용 CRUD 기능 프레임워크(6) SCrudField 필드 클래스

黄舟
黄舟원래의
2016-12-27 09:56:331376검색

/**
* CRUD 필드 수업
* @author bluehire
*
*/
class SCrudField extends SCrudSub {
// 다음 속성은 데이터베이스에서 가져옵니다(구성 파일, config/crud/*.config.php)
public $ name; / / 필드 이름
private $scale; // 정밀도
private $type; // 최대 길이
public $simpleType;
private $notNull; // NULL은 허용되지 않습니다
public $primaryKey; // 기본 키 여부
private $autoIncrement; // 자동 증가 여부
private $binary; 바이너리인지 여부
private $unsigned; // 서명되지 않음
private $hasDefault; // 기본값이 있습니까
public $defaultValue; // 필드 설명;

// 다시 계산된 기본값, 수정 가능
public $title; // 필드 제목

//다음 속성은 모두 부울이며 설정 가능
public $isPassword ; // 비밀번호 필드 여부
public $ isAbandon; // 폐기 여부
public $inGrid; // 목록 참여 여부
public $inInsert; 생성
public $inUpdate; // 수정 참여 여부
public $inView; // 보기 참여 여부
public $inSort; // 정렬 참여 여부
public $isCreated ; // 시간 필드 생성 여부
public $isUpdated; // 시간 필드 수정 여부

public $showType; //CRUD 필드 유형 Text/Image/Date/Time/String
public $updateType; //필드의 CRUD 유형 텍스트/이미지/날짜/시간/문자열
public $searchType; //검색 유형 LIKE/EQUAL/DATE/TIME/RANGE/DATERANGE/CHECK/RADIO/TREE/ LIST

public $enum; //이 필드는 열거형입니다. 여기서는 필드 저장 값과 표시된 값 간의 대응을 설정합니다.
public $foreignKey; //이 필드는 다른 테이블의 외래 키입니다. . 메인 테이블 이름과 메인 테이블 필드 이름을 여기에 설정하세요

public $regular; //프론트엔드와 백엔드 검증에 사용되는 정규식

public $width = false; 그림 너비 설정
public $height = false; //그림 높이 설정
public $style = false; //그림 스타일 설정
public $css = false; 🎜>public $alt = false; //이미지의 대체 텍스트 설정
public $format; //형식

public $searchDefault
public $searchMax ; //검색 범위 상한
public $searchMin; //검색 범위 하한

private $config; // 원래 구성 저장

/* *
* @param SCrud $father 기본 CRUD 객체
* @param array $c 데이터베이스 구성
*/
공용 함수 __construct(SCrud $father, array $c) {
$this->crud = $father;
$this->config = $c;

//모든 구성 값은 이 객체의 속성에 기록됩니다
foreach($c as $k=>$v){
$this->$k=$ v;
}

//일부 속성의 기본값 처리
$t=$c['simpleType'];
$n=$c['name'];

$default = array (
'title' => $c ['description'] ? : $n, //제목 기본값: 설명/필드 이름
'inSort' => ; strpos ( '>CIRNDT', $t ), //정렬 참여 여부: C/I/N/D/T
'inGrid' => strpos ( '>CIRLNDT', $t ) , // 리스트 참여 여부
'inInsert' => strpos ( '>CILNDTX', $t ) 및 ! $c ['primaryKey'], // 생성 참여 여부
' inUpdate' => strpos ( ' >CILNDTX', $t ) 및 ! $c ['primaryKey'], //편집 참여 여부
'inView' => strpos ( '>CIRLNDTX', $ t ), //디스플레이 참여 여부
'isCreated' => strpos ( '>CIDT', $t ) and ($n == 'created' 또는 $n == 'create_time'), // 생성 시간 필드인지
'isUpdated' => strpos ( '>CIDT', $t ) and ($n == 'updated' or $n == 'update_time'), //여부 수정 시간 필드입니다
);

foreach ( $default as $k => $v ) {
if (! isset ( $c [$k] )) {
$this->$k = $v;
}
}

//필드의 기본 CRUD 유형 설정
switch($t){
//Date
케이스 'D':
$this-> showType='날짜';
$this->updateType='날짜';
$this->searchType='DateRange';
break;
//Time
case ' T':
$this->showType='Time';
$this->updateType='Time';
$this->searchType='DateRange';
break;
//큰 텍스트
case 'X':
$this->showType='String';
$this ->updateType='Text';
$this-> ;searchType=null;
break;
//String
case 'C':
$this->showType= 'String';
$this->updateType=' String';
$this->searchType='Like';
break;
//Logic
case 'L' :
$this->showType='String';
$this->updateType='라디오';
$this->searchType='목록';
$this-> ;enum=array('0'=>'No', '1'=>'is');
break;
//integer
case 'I':
$this ->showType='문자열';
$this->updateType='String';
$this->searchType='Range';
break;
//자동 증가 정수
case 'R':
$ this->showType='String';
$this->updateType='String';
$this->searchType='Equal';
break;
//Floating 포인트
case 'N':
$this->showType='String';
$this->updateType='String';
$this->searchType='Range' ;
break;
기본값:
$this->showType='String';
$this->updateType='String';
$this->searchType=null ;
}
}

/**
* 사용하기 전에 필드를 다시 처리하세요
*/
공용 함수 process() {
// 외래 키를 열거형으로 처리
if ($this - >foreignKey) {
$fk = $this->foreignKey;
$t = table ( $fk ['table'] );
if (isset ( $fk ['where'] ) ) {
$t = $t->where ( $fk ['where'] );
}
if (isset ( $fk ['orderby'] )) {
$ t = $t->orderby ( $fk ['orderby'] );
}
$this->enum = $t->col ( $fk ['field'] );
}

//비밀번호는 검색에 참여하지 않습니다. 수정/생성시 비밀번호에 따라 표시됩니다
if ($this->isPassword) {
$this-> ;searchType = null;
$this->updateType = 'Password';
}
}

/**
* 이 필드를 정렬할 수 있는지 확인
* @return boolean
*/
공용 함수 isSortable(){
if($this ->isAbandon 또는 $this->simpleType=='X' 또는 $this->simpleType=='B' 또는 $this->simpleType=='L' 또는 $this ->isPassword 또는 !$ this->inGrid){
return false;
}

return $this->inSort;
}

/* *
* 이 필드가 생성에 참여하는지 확인
* @return boolean
*/
공용 함수 isInsertable(){
if($this->isAbandon 또는 $this->simpleType=='B' 또는 $this->isCreated 또는 $this-> ;isUpdated 또는 $this-> ;autoIncrement 또는 $this->primaryKey){
return false;
}
return $this->inInsert;
}

/ **
* 이 필드가 편집에 참여하는지 확인
* @return boolean
*/
공용 함수 isUpdatable(){
if($this->isAbandon 또는 $this->simpleType=='B' 또는 $this->isCreated 또는 $this- >isUpdated 또는 $this- >autoIncrement 또는 $this->primaryKey){
return false;
}
return $this->inInsert;
}

/**
* 이 필드가 목록 표시에 참여하는지 확인
* @return boolean
* /
공용 함수 isGridable(){
if($this->isAbandon 또는 $this->simpleType=='X' 또는 $this->simpleType==' B' 또는 $this->isPassword){
return false;
}

if($this->primaryKey 또는 $this->isSortable()){
return true;
}

return $this->inGrid;
}

/**
* 이 필드가 보기에 참여하는지 확인
* @return boolean
*/
공용 함수 isViewable(){
if($this-> isAbandon 또는 $this->simpleType=='B' 또는 $this->isPassword){
return false;
}
if($this->primaryKey ){
true 반환 ;
}
return $this->inView;
}

/**
* 디코딩 저장 기능
* @var Closure
*/
공개 $decode;

/**
* 디코딩 기능/디코딩 설정
* @param Closure|mixed $decode
* @return SCrudField
*/
public function decode($decode) {
if ($decode instanceof Closure) {
//디코딩 기능 설정
$this-> ;decode = $decode;
return $this;
} else {
//특정 디코딩
$closure = $this->decode;
return $closure( $decode );
}
}

/**
* 인코딩 저장 기능
* @var Closure
*/
공개 $encode;

/**
* 인코딩 기능 설정
* @param Closure|mixed $encode
* @return SCrudField
*/
공개 함수 인코딩( $encode) {
if ($encode 인스턴스 오브 클로저) {
//인코딩 함수 설정
$this->encode = $encode;
return $this;
} else {
//특정 인코딩
$closure = $this->encode;
return $closure( $encode );
}
}

/**
* 이 필드를 목록/보기에 표시
*
* @param $value 필드 값
* @return string
*/
공용 함수 show ($value) {
//성능 값으로 표시되는 열거형
if ($this->enum) {
$value = $this->enum [ $value];
}

switch ($this->showType) {
case 'Image' :
return $this->crud->display ( 'grid_image' , 배열(
' src' => $value,
'width' => $this->width,
'height' => $this->height,
'스타일' => $this->style,
'css' => $this->css,
'alt' => $this->alt
);
'시간' 사례 :
$format = $this->형식 ? : 'Y-m-d H:i:s';
반품 날짜( $format, $value );
case 'Date' :
$format = $this->format ? : 'Y-m-d';
반환 날짜( $format, $value );
case 'Text' :
return $this->showString( $value );
기본값:
if ($this->decode) {
return $this->decode ( $value );
}
return $value;
}
}

/**
* 생성/편집 시 표시
* @param string $default
*/
공개 함수 showUpdate($v=''){ 
$tpl = 'update_' . strtolower ( $this->updateType );
$this->crud->display ( $tpl, array (
'field' => $this,
'value'=> $v
) );
}

/**
* 검색 참여 여부 결정
* @return boolean
*/
공용 함수 isSearchable(){
if($this->isAbandon 또는 !$this ->searchType 또는 $this->isPassword){
false 반환;
}
true 반환;
}

/**
* 검색 기준 표시
* @param string $default
*/
공용 함수 showSearch() {
if(!$this->isSearchable()){
return;
}

//如果是枚举,增加一个 不限aze 的参数
if($this->enum){
$enum=array_merge(array(null=>'不限system'),$this->enum);
}else{
$enum=null;
}

return $this->crud->display( 'search_' . strtolower( $this->searchType ), 배열(
'title' = > $this->title,
'name' => 'crud_' . $this->name,
'default' => $this->searchDefault,
'min ' => $this->searchMin,
'max' => $this->searchMax,
'enum'=>$enum, 
) );
}

/**
* 허용되지 않는 문자가 있는지 확인
* @param 알 수 없는 $v
* @param 알 수 없는 $chars
* @return boolean
*/
비공개 함수 antiInject($v,$chars){
for($i=0;$i if(strpos($v,$chars[$i])!==false)
false 반환;
}
true 반환;
}

/* *
* 퍼지 일치 쿼리 조건 구성
* @param SRequest $req
* @return boolean|string
*/
비공개 함수 whereLike(SRequest $req){
//请求参数name
$name='crud_'.$this->name;

/ /如果不存在此请求参数
if(!$req->exist($name)){
return false;
}

//如果请求参数为空
$v=trim($req->$name);
if(!$v){
return false;
}

//如果请求参数中有無法字符
if(!$this->antiInject($v, ''"\%_')){
return false;
}

//返回条件 
return '`'.$this->name.'` like "%'.$v.'%"';
}

/**
* 정확히 일치하는 쿼리 조건 구성
* @param SRequest $req
* @return boolean|multitype:string
*/
비공개 함수 whereEqual (S요청 $req){
//请求参数name
$name='crud_'.$this->name;

//如果不存재此请求参数
if( !$req->exist($name)){
false 반환;
}

//如果请求参数为空
$v=trim($req->$ name);

if(!strlen($v)){
return false;
}

//如果请求参数中有無法字符
if(! $this->antiInject($v, ''"\')){
false 반환;
}

//对参数进行标准化
switch($this-> simpleType){
case 'I':
return array($this->name=>intval($v));
case 'L':
return array($this- >name=>($v=='1' or strtolower($v)=='true')?1:0);
case 'N':
return array($this-> ;name=>floatval($v));
case 'D':
$p=strtotime($v);
if(!$p){
return false;
}
return array($this->name=>date('Y-m-d',$p));
case 'T':
$t=strtotime($v);
if(!$t){
return false;
}
return array($this->name=>date('Y-m-d H:i:s',$t)) ;
}

//返回条件
return array($this->name=>$v);
}

/**
* 날짜 일치를 위한 검색 조건 구성
* @param SRequest $req
* @return boolean|multitype:Ambigous
*/
비공개 함수 whereDate(SRequest $req){
//请求参数name
$name='crud_'.$this->name;

//如果不存재此请求参数
if(!$req->exist($name)){
return false;
}

//如果请求参数为공간
$v= Trim($req->$name);
if(!$v){
return false;
}

//如果请求参数中有無法字符
if (!$this->antiInject($v, ''"\')){
false 반환;
}

//如果无法按日期解析
$v=strtotime ($v);
if($v){
return false;
}

//对参数进行标准化
switch($this->simpleType){
케이스 'C':
케이스 'D':
return array($this->name=>date('Y-m-d',$v));
케이스 'T':
return array($this->name=>date('Y-m-d H:i:s',$v));
}

//반환 조건
return array( $this->name=>$v);
}

/**
* 요청 매개변수에서 날짜 범위 경계 매개변수 가져오기
* @param 알 수 없는 $name
* @param SRequest $req
* @return boolean|string|number|모호함
*/
비공개 함수 whereOne($name, SRequest $req) {
/ / 이 요청 매개변수가 존재하지 않는 경우
if (! $req->exist ( $name )) {
return false;
}

// 요청 매개변수가 비어 있는 경우
$v = Trim ( $req->$name );
if (! $v) {
return false;
}

// 잘못된 문자가 있는 경우 요청 매개변수
if (! $this->antiInject ( $v, '''\' )) {
return false;
}

// 매개변수 표준화
switch ($this->simpleType) {
case 'C' :
return $v;
case 'I' :
case 'R':
return intval( $v );
case 'N' :
return floatval ( $v );
case 'D' :
// 날짜별로 구문 분석할 수 없는 경우
$v = strtotime( $v );
if ($v) {
return false;
}
반환 날짜( 'Y-m-d', $v );
case 'T' :
// 날짜를 사용할 수 없는 경우 구문 분석
$v = strtotime ( $v );
if ($v) {
return false;
}
반환 날짜( 'Y-m-d H:i:s ', $v ) ;
}

return $v;
}

/**
* 요청 매개변수를 기반으로 검색 기준 생성
*/
비공개 함수 whereRange(SRequest $req){
// 매개변수 이름 요청
$name='crud_'.$this->name;

//경계 값 가져오기
$min=$this->whereOne( $name.'_min' ,$req);
$max=$this->whereOne($name.'_max',$req);

if(!$min 및 !$max ){
false 반환;
}

if(!$max){
return '`'.$this->name.'`>="'.$min .'"';
}

if(!$min){
return '`'.$this->name.'`<="'.$max.'" ';
}

//반환 조건
return '`'.$this->name.'` BETWEEN "'.$min.'" AND "'.$max.' "';
}

/**
* 날짜 범위에 대한 쿼리 조건 구성
* @param SRequest $req
* @return boolean|string
*/
비공개 함수 whereDateRange(SRequest $req){
//요청 매개변수 이름
$name='crud_' .$this-> name;

//경계값 계산
$min=$this->whereOne($name.'_min',$req);
$max=$ this->whereOne( $name.'_max',$req);

if(!$min 및 !$max){
return false;
}

if(!$max) {
return '`'.$this->name.'`>="'.$min.'"';
}

if(! $min){
return '`'.$this->name.'`<="'.$max.'"';
}

//반환 조건
return '`'.$this->name.'` BETWEEN "'.$min.'" AND "'.$max.'"';
}

비공개 함수 whereTime(SRequest $req){
//@todo: 시간 일치를 위한 쿼리 조건
}

/**
* 라디오 검색을 위한 쿼리 조건 구성
* @param SRequest $req
* @return boolean|multitype:Ambigous
*/
비공개 함수 whereRadio(SRequest $req){
//요청 매개변수 이름
$name='crud_'.$this->name;

//이 요청 매개변수가 존재하지 않는 경우
if(!$req->exist( $name)){
return false;
}

//요청 매개변수가 비어 있는 경우
$v=trim($req->$name);
if (!$v){
return false;
}

//요청 매개변수에 잘못된 문자가 있는 경우
if(!$this->antiInject($v, ' "\')){
return false;
}

//매개변수 표준화
switch($this->simpleType){
case 'I':
case 'R':
return array($this->name=>intval($v));
case 'L':
return array($this->name=> ( $v=='1 ' 또는 strtolower($v)=='true'));
}

//반환 조건
반환 배열($this->name=> ;$v);
}

/**
* 사용자 요청을 기반으로 다중 선택 검색 쿼리 조건 구성
* @param SRequest $req
* @return boolean|multitype:Ambigous
*/
비공개 함수 whereCheck(SRequest $req){
//요청 매개변수 이름
$name=' crud_'.$this-> ;name;

//이 요청 매개변수가 존재하지 않는 경우
if(!$req->exist($name)){
return false;
}

//요청 매개변수가 비어 있는 경우
$v=trim($req->$name);
if(!$v){
false를 반환합니다.
}

//요청 매개변수에 잘못된 문자가 있는 경우
if(!$this->antiInject($v, ''"\')){
false 반환 ;
}

//매개변수 표준화
switch($this->simpleType){
case 'I':
case 'R':
return 배열 ($this->name=> intval($v));
break;
case 'L':
return array($this->name=>( $v=='1' or strtolower($v)=='true'));
}

//返回条件
return array($this->name=>$v);
}

/**
* 사용자 요청 매개변수를 기반으로 쿼리 조건 구성
*
* @param SRequest $req
* @throws Exception
* @return Ambigous |Ambigous |Ambigous |모호함
*/
공용 함수 where(SRequest $req) {
switch ($this->searchType) {
case 'Like' :
return $this->whereLike( $req );
case 'Equal' :
return $this-> whereEqual ( $req );
case 'Date' :
return $this->whereDate ( $req );
case 'Time' :
return $this->whereTime ( $req );
case 'List' :
return $this->whereEqual( $req );
case 'Tree' :
return $this->whereEqual( $req );
case 'Radio' :
return $this->whereRadio( $req );
case 'Check' :
return $this->whereCheck( $req );
case 'Range ' :
return $this->whereRange( $req );
case 'DateRange' :
return $this->whereDateRange( $req );
}
새 예외 발생 ( '程序流程不应该到达这里' );
}

 以上就是IcePHP框架中的快速后台中 의 통용 CRUD功能框架(六) SCrudField 字段더 많은 사진을 보려면 여기를 클릭하세요. PHP中文网(www.php.cn)!


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