本文實例講述了thinkPHP5實現數據庫添加內容的方法。分享給大家供大家參考,具體如下:
面對一個新框架安裝好了一般不知道要干啥。那就先做一個寫入功能先。
先做好準備工作先,首先要連接上數據庫。
配置文件在application下的database.php里.
- return [
- // 數據庫類型
- 'type' => 'mysql',
- // 服務器地址
- 'hostname' => '127.0.0.1',
- // 數據庫名
- 'database' => 'shoptest',
- // 用戶名
- 'username' => 'root',
- // 密碼
- 'password' => '',
- // 端口
- 'hostport' => '3306',
- // 連接dsn
- 'dsn' => '',
- // 數據庫連接參數
- 'params' => [],
- // 數據庫編碼默認采用utf8
- 'charset' => 'utf8',
- // 數據庫表前綴
- 'prefix' => '',
- // 數據庫調試模式
- 'debug' => true,
- // 數據庫部署方式:0 集中式(單一服務器),1 分布式(主從服務器)
- 'deploy' => 0,
- // 數據庫讀寫是否分離 主從式有效
- 'rw_separate' => false,
- // 讀寫分離后 主服務器數量
- 'master_num' => 1,
- // 指定從服務器序號
- 'slave_no' => '',
- // 是否嚴格檢查字段是否存在
- 'fields_strict' => true,
- // 數據集返回類型
- 'resultset_type' => 'array',
- // 自動寫入時間戳字段
- 'auto_timestamp' => false,
- // 時間字段取出后的默認時間格式
- 'datetime_format' => 'Y-m-d H:i:s',
- // 是否需要進行SQL性能分析
- 'sql_explain' => false,
- ];
設置好之后先放著,先建立一個控制器
默認下載的集合中,application文件夾里有一個index的文件夾。
里面是用來存放控制器,類和模板的文件夾,名字可以修改。
如果用過3.2的就很好理解了,就是相當于原來的home文件。
在這個文件夾里先創建三個文件夾:controller,model,view
然后再controller文件夾里新建一個index.php的文件(其實默認就有一個)。
在class類里寫入這樣的代碼
- public function indexs()
- {
- return '我打開控制器了';
- }
在網址欄輸入 服務器名/index/index/indexs
可以看見一行文字。
加下來先引入模板。
先添加use thinkView;引入模板庫。
$view = new View;
return $view->fetch('模板名');
那么模板放在哪里。controller文件夾有一個view文件夾
如果你直接把模板文件拖進去的話會報錯。
thinkPHP5實現數據庫添加內容的方法
看報錯路徑的后半部分。/application/indexviewindexadda.html
application/index/view這個都能找到
接下來又是一個文件夾的名字和文件名字。
這個文件夾對應著的是控制器的名字,也就是說要建立一個對應的文件夾。再把模板拖進去即可調用。當然,一個完整的框架不會只有這一個方法。其他的細節以后在研究。
表單提交的常用的兩個寫法,input('post.xxx')指的是獲取post值。
- //調用Db類
- use think/Db;
- $data = ['title' => input('post.title'), 'content' => input('post.title')];
- Db::table('blogmsg')->insert($data);
- //建立model的寫法
- $mod = new /app/index/model/Blogmsg;
- $mod->title = input('post.title');
- $mod->content = input('post.content');
- $mod->save();
- echo $mod->id;
相對而言,個人比較喜歡這樣的寫法。使用Request來完成添加。(對以后使用laravel有好處)
- //引入Request。
- use think/Request;
- public function add(Request $req){
- //如果添加的內容需要處理,先單獨取出然后賦值進去($req->post('title')可以獲取其中的值)
- $a = rtrim($req->post('title'),' ');
- $req->post(['title'=>$a]);
- //準備添加
- $mod = new /app/index/model/Blogmsg;
- //allowField可以選擇只添加哪些字段。
- $mod->allowField(['title','content'])->save($req->post());
- //獲取返回的主鍵
- echo $mod->id;
- }
說道添加數據,那么肯定需要自動驗證了。
這次的自動驗證可以單獨的寫一個文件。在index文件夾內創建一個Validate文件夾,內部創建一個和Model文件夾內相同名字的php文件。方便使用。
樣本:
- namespace app/index/validate;
- use think/Validate;
- class Blogmsg extends Validate
- {
- //寫規則
- protected $rule = [
- 'title' => 'require|max:25',
- 'content' => 'require|max:255',
- ];
- //寫報錯返回信息
- protected $message = [
- 'title.require' => '必須填寫',
- 'title.max' => '不能超過25個字符',
- 'content.require' => '必須填寫',
- 'content.max' => '不能超過255個字符',
- ];//Vevb.com
- protected $scene = [
- 'add' => ['title','content'],
- 'edit' => ['title','content'],
- ];
- }
然后控制器部分的改動:
- $a = $mod->validate(true)->allowField(['title','content'])->save($req->post());
- if(false === $a){
- // 驗證失敗 輸出錯誤信息
- dump($mod->getError());
- die;
- }
最后做一個防止重復提交以及遠程提交的表單令牌功能:在模板中的form表單里加入{:token()},然后再驗證的規則里做一下修改,驗證規則加一個token。如下:
'title' => 'require|max:25|token',
至此,文章添加部分告一段落。
新聞熱點
疑難解答
圖片精選