ホームページ バックエンド開発 PHPチュートリアル IcePHPフレームワークの高速バックエンドにおけるユニバーサルCRUD機能フレームワーク (6) SCrudFieldフィールドクラス

IcePHPフレームワークの高速バックエンドにおけるユニバーサルCRUD機能フレームワーク (6) SCrudFieldフィールドクラス

Dec 27, 2016 am 09:56 AM

/**
* CRUD フィールド クラス
* @author bluehire
*
*/
class SCrudField extends SCrudSub {
// 次のプロパティはデータベース (構成ファイル、config/crud/*.config.php) から取得されます
public $name // フィールド名
private; $scale; // 精度
private $type; // 完全な型
private $maxLength; // 単純な型 CILNDTXBR
private $notNull; // null を許可しません。 // 主キーかどうか
private $autoIncrement; // 自動インクリメントするかどうか
private $binary; // 署名なし
private $hasDefault;デフォルト値
public $defaultValue; // デフォルト値
public $description; // フィールドの説明

// 再計算されたデフォルト値、変更可能
public $title; // 以下の属性はすべてブール値ですを設定可能
public $isPassword; // パスワードフィールドかどうか
public $isAbandon; // リストに参加するかどうか
public $inInsert;作成に参加するかどうか
public $inUpdate; // 変更に参加するかどうか
public $inSort; // 時間を作成するかどうかfield
public $isUpdated; // 時刻フィールドを変更するかどうか

public $showType; // フィールドの CRUD タイプ Text/Image/Date /Time/String
public $updateType; // フィールドの CRUD タイプ Text/Image/ Date/Time/String
public $searchType; //検索タイプ LIKE/EQUAL/DATE/TIME/RANGE/DATERANGE/CHECK/RADIO/TREE /LIST

public $enum; //このフィールドは列挙型です。フィールドの保存値と表示される値の対応
public $foreignKey; //このフィールドは別のテーブルへの外部キーです。ここではメインテーブルの名前とメインテーブルのフィールド名を設定します

//正規表現フロントエンドとバックエンドの検証

public $width = false; //画像の幅の設定
public $height = false; //画像の高さの設定
public $style = false; public $css = false; //画像のスタイルクラスを設定します
public $alt = false; //画像の置換テキストを設定します
public $format; //検索のデフォルト値条件
public $searchMax; //検索範囲の上限

private $config; //元の設定を保存

/**
* @param SCrud $father メイン CRUD オブジェクト
* @param array $c データベース構成
* /
public function __construct(SCrud $father, array $c) {
$this->crud = $father;
$this->config = $c;

//すべての設定値は this に記録されますobject 属性のうち
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 ) および ! // 作成に参加するかどうか
'inUpdate' => ; strpos ( '>CILNDTX', $t ) and ! $c ['primaryKey'], // 編集に参加するかどうか
'inView' => strpos ( '>CIRLNDTX', $t ), // 編集に参加するかどうか
'isCreated' => strpos ( '>CIDT', $t ) and ($n == 'created' または $n = = 'create_time'), // 作成時刻フィールドかどうか
'isUpdated' = > strpos ( '>CIDT', $t ) and ($n == 'updated' または $n == 'update_time' ), //変更時刻フィールドかどうか
);

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

//フィールドのデフォルトの CRUD タイプを設定します
switch($t){
//Date
case 'D':
$this->showType='Date ';
$this->updateType='Date';
$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'=>'いいえ','1'=>'はい' );
break;
//Integer
case 'I':
$this->showType= 'String';
$this->updateType='String';
$this->searchType='Range';
break;
//自己増加する整数
case 'R':
$this->showType='String' ;
$this->updateType='String';
$this->searchType='Equal';
break;
//浮動小数点
case 'N':
$this->showType='String' ;
$this->updateType='String';
$this->searchType='Range';
break;
default:
$this->showType='String';
$this->updateType = 'String';
$this->searchType=null;
}
}

/**
* 使用する前に、フィールドを再度処理してください
*/
public function 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
*/
public function isInsertable(){
if($this->isAbandon または $this->simpleType=='B' または $this->isCreated または $this->isUpdated または $this->autoIncrement または $ this->primaryKey) {
return false;
}
return $this->inInsert;
}

/**
* このフィールドが編集に参加するかどうかを決定します
* @return boolean
*/
public function isUpdatable(){
if($this->isAbandonまたは $this-> simpleType=='B' または $this->isCreated または $this->isUpdated または $this->autoIncrement または $this->primaryKey){
return false;
}
return $this->inInsert ;
}

/**
* このフィールドがリスト表示に参加するかどうかを決定します
* @return boolean
*/
public function isGridable(){
if($this->isAbandon または $this->gt;simpleType=='X' または $this ->simpleType== 'B' または $this->isPassword){
return false;
}

if($this->primaryKey または $this->isSortable()){
return true;
}

return $this ->inGrid;
}

/**
* このフィールドが表示に参加するかどうかを決定します
* @return boolean
*/
public function isViewable(){
if($this->isAbandon または $this->simpleType=='B ' または $this->gt ;isPassword){
return false;
}
if($this->gt;primaryKey){
return true;
}
return $this->inView;
}

/**
* デコード関数の保存
* @var Closure
*/
public $decode;

/**
* デコード関数/デコーディングを設定します
* @param Closure|mixed $decode
* @return SCrudField
*/
public function decode($decode) {
if ($decodeinstanceof Closure) {
//デコード関数を設定します
$this-> decode = $decode;
return $this;
} else {
//特定のデコード
$closure = $this->decode;
return $closure ( $decode );
}
}

/**
* エンコード関数の保存
* @var Closure
*/
public $encode ;

/**
* エンコード関数を設定します
* @param Closure|mixed $encode
* @return SCrudField
*/
public function encode($encode) {
if ($encodeinstanceof Closure) {
//エンコード関数を設定します
$this->encode = $encode;
return $this ;
} else {
//特定のエンコーディング
$closure = $this->encode;
return $closure ( $encode );
}
}

/**
* このフィールドをリスト/ビューに表示します
*
* @param $value フィールド値
* @return string
* /
public function show($ value) {
//パフォーマンス値で表示される列挙型
if ($this->enum) {
$value = $this->enum [$value];
}

switch ($this-> showType) {
case 'Image' :
return $this->crud->display ( 'grid_image', array (
'src' => $value,
'width' =>) ; $this->幅,
'高さ' =>$this->スタイル,
'css'
'alt' => ; $this->alt
) );
case '時間' :
$format = $this->format ? : 'Y-m-d H:i:s';
return date ( $format, $value );
case 'Date' :
$format = $this->format ? : 'Y-m-d';
return date ( $format, $value );
case 'Text' :
return $this->showString ( $value );
default :
if ($this->decode) {
return $this->decode ( $value );
}
return $value;
}
}

/**
* 作成/編集時に表示されます
* @param string $default
*/
public function showUpdate($v=''){
$tpl = 'update_' 。 strto lower ( $this->updateType );
$this->crud->display ( $tpl, array (
'field' => $this,
'value'=>$v
) );
}

/**
* 検索に参加するかどうかを決定します
* @return boolean
*/
パブリック関数 isSearchable(){
if($this->isAbandon または !$this->searchType または $this->isPassword){
return false;
}
return true;
}

/**
* 検索条件を表示します
* @param string $default
*/
public function showSearch() {
if(!$this->isSearchable()){
return;
}

//如果是枚举,增追加一不制限的パラメータ
if($this->enum){
$enum=array_merge(array(null=>'制限'),$this->enum);
}else{
$enum=null;
}

return $this->crud->display ( 'search_' . strto lower ( $this->searchType ), array (
'title' => $this->title ,
'name' => $this->name,
'default' => $this->searchMin,
'max ' => $this->searchMax,
'enum'=>$enum,
) );
}

/**
* 許可されていない文字があるかどうかを確認します
* @paramknown $v
* @paramunknown $chars
* @return boolean
*/
プライベート関数 antiInject($v,$chars){
for($i=0;$i if(strpos($v,$chars[$i])!==false)
return false;
}
return true;
}

/**
* あいまい一致クエリ条件を構築します
* @param SRequest $req
* @return boolean|string
*/
private function whereLike(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;
}

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

/**
* 完全に一致するクエリ条件を構築します
* @param SRequest $req
* @return boolean|multitype:string
*/
private function whereEqual(SRequest $req){
//请要求パラメータ名
$name='crud_'.$this->name;

//如果無し此请要求パラメータ名
if(!$req-> exist($name)){
return false;
}

//如果请要求パラメータは空
$v=trim($req->$name);

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

//如果请要求パラメータ中有非法字符
if(!$this->antiInject($v, ''"\')){
return false;
}

//对パラメータ実行标標準化
switch($this->simpleType){
case 'I':
return array($this->name=>intval($v));
case 'L':
return array($ this->name=>($v=='1' または strto lower($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
*/
private function whereDate(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;
}

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

//对パラメータ进行标標準化
switch($this-> simpleType){
case 'C':
case 'D':
return array($this->name=>date('Y-m-d',$v));
case 'T':
return array($this- >name=>date('Y-m-d H:i:s',$v));
}

//Return array($this->name=>$v);
}

/* *
* リクエストパラメータから日付範囲境界パラメータを取得します
* @paramknown $name
* @param SRequest $req
* @return boolean|string|number|Ambigous
*/
private function whereOne($name, SRequest $req) {
// このリクエストパラメータが存在しない場合
if (! $req->exist ( $name )) {
return false ;
}

// リクエストパラメータが空の場合
$v = trim ( $req->$name );
if (! $v) {
return false;
}

// リクエストパラメータにIllegalが含まれている場合文字
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' :
// date
$v = strtotime ( $v );
if ($v) {
return false;
}
return date ( 'Y-m-d', $v );
case 'T' で解析できない場合:
// dateで解析できない場合
$v = strtotime ( $v );
if ($v) {
return false;
}
return date ( 'Y-m-d H:i:s', $v );
}

return $v;
}

/**
* リクエストパラメータに基づいて検索条件を作成します
*/
private function whereRange(SRequest $req){
//リクエストパラメータ名
$name='crud_'.$this->name ;

//境界値を取得します
$min=$this->whereOne($name.'_min',$req);
$max=$this->whereOne($name.'_max',$ req) ;

if(!$min and !$max){
return 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
* /
private function whereDateRange(SRequest $req){
//リクエストパラメータ名
$name='crud_'.$this->name;

//境界値を計算
$min=$this-> whereOne( $name.'_min',$req);
$max=$this->whereOne($name.'_max',$req);

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

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

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

//戻り条件
return '`'.$this->name .' ` BETWEEN "'.$min.'" AND "'.$max.'"';
}

private function whereTime(SRequest $req){
//@todo: 時刻一致のクエリ条件
}

/ **
* ラジオ検索のクエリ条件を構築します
* @param SRequest $req
* @return boolean|multitype:Ambigous
*/
private function whereRadio(SRequest $req){
//リクエストパラメータ名
$name='crud_'.$this->name;

//このリクエストパラメータがexist
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' or strto lower($v)=='true'));
}

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

/**
* ユーザーリクエストに基づいて複数選択検索のクエリ条件を構築します
* @param SRequest $req
* @return boolean|multitype:Ambigous
*/
private function whereCheck(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':
配列を返す ($this->name=>intval($v));
break;
case 'L':
return array($this->name=>( $v=='1' or strto lower($v)=='true'));
}

//Return array($this-> ;name= >$v);
}

/**
* ユーザーリクエストパラメータに基づいてクエリ条件を構築します
*
* @param SRequest $req
* @throws Exception
* @return Ambigous |Ambigous |Ambigous |Ambigous
*/
public function 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 'ラジオ' :
return $this->whereRadio ( $req );
case 'Check' :
return $this->whereCheck ( $req );
case 'Range' :
return $ this->whereRange ( $req );
case 'DateRange' :
return $this->whereDateRange ( $req );
}
throw new Exception ( 'プログラム フローはここに到達すべきではありません' );
}

上記は、一般的な CRUD 関数フレームワークの内容です (6) IcePHP フレームワークの高速バックエンドの SCrudField フィールド クラス 詳細については、PHP 中国語 Web サイト (www.php.cn) を参照してください。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

See all articles