thinkphp5中資料庫新增內容的實現方法

來源:互聯網
上載者:User
面對一個新架構安裝好了一般不知道要幹啥。那就先做一個寫入功能先。

先做好準備工作先,首先要串連上資料庫。

設定檔在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檔案夾裡建立一個index.php的檔案(其實預設就有一個)。

在class類裡寫入這樣的代碼


public function indexs(){    return '我開啟控制器了';}

在網址欄輸入 伺服器名/index/index/indexs

可以看見一行文字。

加下來先引入模板。

先添加use think\View;引入模板庫。


$view = new View;return $view->fetch('模板名');

那麼模板放在哪裡。controller檔案夾有一個view檔案夾

如果你直接把模板檔案拖進去的話會報錯。

看報錯路徑的後半部分。/application/index\view\index\adda.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個字元',  ];  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',

至此,文章添加部分告一段落。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.