首頁  >  文章  >  後端開發  >  thinkphp5中資料庫新增內容的實作方法

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

黄舟
黄舟原創
2017-10-26 09:04:281498瀏覽

面對一個新框架安裝好了一般不知道要幹啥。那就先做一個寫入功能先。

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

設定檔在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',

至此,文章新增部分告一段落。

以上是thinkphp5中資料庫新增內容的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn