日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php进阶面向对象及tp5,TP5实战技巧---开发思路 引路造桥

發布時間:2023/12/10 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php进阶面向对象及tp5,TP5实战技巧---开发思路 引路造桥 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

## TP5實戰技巧實例---開發思路

> 子曰:“學而不思則罔,思而不學則殆。”

[TOC]

### 利用TP的MVC框架 做快速開發

>[success] 寫在前面的話:既然選擇TP5框架,我推薦大家要通讀完全開發手冊,我這里并不是要大家記住每一個方法,每一個細節.而是要求大家心理清楚TP5到底有哪些功能,能替我們解決什么樣的問題!

在程序開發中,隨著前端的技術發展,以及跨平臺的綜合應用,PHP為主流的程序開發越來越側重開發API.

我們就已API開發為例,介紹一些開發的實際流程.

![](https://box.kancloud.cn/2eb2dc6276bbce6ab92710731eabcb53_740x321.png)

>[info] 一 控制器(Controller)

> 獲取參數數據

> 二 驗證器(Validate)

> 驗證參數數據

> 三 模型 (model)

> 處理邏輯和數據 返回結果

> 四 控制器(Controller)

> 接受模型返回數據 顯示數據

#### 控制器數據獲取和處理

現在我從網上某TP5開源系統中找了一段控制器中的代碼

~~~

public function add()

{

//接收數據

if (Request::instance()->isPost()) {

$data['name'] = input('post.adname');

$data['description'] = input('post.description');

$data['link'] = input('post.link');

$data['position'] = input('post.pos');

$data['level'] = input('post.level');

$data['createtime'] = time();

//鏈接圖片

$coverPath = input('post.banner_path');

//實例化驗證器

$validate = Loader::validate('Banner');

//驗證

if (!$validate->scene('add')->check($data)) {

return $this->error($validate->getError());

}

//添加封面圖

if ($coverPath) {

$data['banner_path'] = $coverPath;

}

//插入數據表

$result = Db::name('Banner')->insert($data);

if ($result) {

return $this->success('添加成功',url('admin/banner/index'));

} else {

return $this->error('添加失敗');

}

} else {

$pos=Db::name('BannerPosition')->where('status',1)->field('id,title')->select();

$this->assign('pos',$pos);

return $this->fetch('add');

}

}

~~~

>[warning] 這段代碼是其實并沒有大的問題 這段添加代碼中整合靜態頁和數據邏輯處理

當post提交時候處理數據,get提交時候渲染靜態頁面

但有些問題還是能再改進一下就完美了

* * * * *

題外話:我現在我來簡單說一下這段代碼一些問題

1.在接收片段中使用了Request::instance()->isPost()

既然繼承控制器可以直接使用$this->request->isPost()

2.過多的使用了input助手函數

3.非MVC理念 model被完全忽略

* * * * *

我們先講一下控制器數據獲取和處理.我們還拿上面的源代碼 進行改進和示范吧

下面是我改進的方案,大家只要理解這樣做的好處就可以了.我會先定義一個參數數據的變量數組$param

~~~

$param=[

'name'=>'adname'

'description'=>'description'

... ...

];

~~~

我就寫兩個 做一下示范

另外我在控制器基類里寫了下面一段代碼

~~~

/**

* 數據庫字段 網頁字段轉換

* #User: Mikkle

* #Email:776329498@qq.com

* #Date:

* @param $array 轉化數組

* @return 返回數據數組

*/

protected function buildParam($array)

{

$data=[];

if (is_array($array)){

foreach( $array as $item=>$value ){

$data[$item] = $this->request->param($value);

}

}

return $data;

}

~~~

那我在繼承基類的控制器中 這樣寫代碼就可以執行了,$param_data就是你要獲取的參數值.

~~~

$param = [

'name'=>'adname'

'description'=>'description'

];

$param_data = $this->buildParam($param);

~~~

>[info]如上面的例子中的 $data['createtime'] = time();

這種固定的值的添加 記得扔到model的自動完成的方法完成

詳情參見 http://www.kancloud.cn/mikkle/thinkphp5_study/331967

#### 控制器中數據值的驗證

現在 數據已經獲取 下一步就要進行數據驗證

>[danger] 永遠不要相信前端發送過來的數據 把控絕對不能忽略

當然前端的校驗也是需要的 當后端必須要把關

上面這段驗證的代碼是沒有問題的 可以使用

~~~

//實例化驗證器

$validate = Loader::validate('Banner');

//驗證

if (!$validate->scene('add')->check($data)) {

return $this->error($validate->getError());

}

~~~

當然 使用官方的教程里的方法也是可以的

~~~

$result = $this->validate($data, $validate_name);

if (true !== $result) return ['code' => '1003', 'msg' => $result,];

~~~

>[info] $validate_name 你控制器的名稱

#### 驗證數據通過后調用Model里的方法獲取返回值

~~~

$model_edit = Loader::model($model_name);

if (!$model_edit) return $this->showReturnCode(1010);

$data = $model_edit->$action_name($param_data);

~~~

>[info] $model_name 你模型的名稱

> $action_name 你模型中執行方法的名稱

這時 絕大多少的操作就基本完成了 根據需求返回$data的值就行了

##現在就是思考的時間 萬能的yuan們 如何才能讓開發更簡單呢

未完 待續--

詳情見下節

大家希望后續看到哪方面的 可以在這里留言給我!

總結

以上是生活随笔為你收集整理的php进阶面向对象及tp5,TP5实战技巧---开发思路 引路造桥的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。