第39課 thinkphp5完成商品會員價格功能(後置勾子afterInsert)
阿新 • • 發佈:2018-10-24
-s quest num 根目錄 ane 回調 post數據 input val
模型裏的後置勾子
目錄
- 要實現的功能
- 思路:
- html裏
- 控制器裏
- 模型裏的後置勾子
beforeUpdate()
要實現的功能
html的表單裏提交過數據到控制器,控制器調用model
裏的save()
方並過濾掉不需要的數據後保存到goods
表,
保存後會自動調用模型裏的後置勾子afterInsert()
,後置勾子的回調$goods
裏得到goods
表裏新插入的主鍵後組裝好數據,
再插入到number_price
表裏
思路:
- 控制器裏的用調用模型用
save()
方法保存,在模型裏的用protected $field=true;
//當插入到當然模型對應表裏不存在的字段時,就會被忽略掉 - 數據插入到goods表後就會自動執行模型裏的
afterInsert()
- 在
afterInsert()
方法裏回調的$goods
裏就會獲取到插入goods
表裏的數據,並獲取到插入後的主鍵id - 在html表格裏用
name="mp[{$ml.id}]"
帶主鍵的方式提交,這樣數據的字段名和字段值就能對應上了 - 新插入goods表裏的商品主鍵id有了,三種會員的價格也有了,現在可以在
afterInsert()
裏循環把這三種價格數據分別插入到tp_member_price
表裏了
html裏
<!-- 會員價格 --> <div id="mbprice" class="tab-pane"> {volist name="mlRes" id="ml"} <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">{$ml.level_name}</label> <div class="col-sm-6"> <input class="form-control" placeholder="" name="mp[{$ml.id}]" type="text"> </div> <p class="help-block col-sm-4 red">單位:元 精確到小數點後2位</p> </div> {/volist} </div> <!-- 給主圖上批量生成三張縮略圖 --> <div id="goodsphoto" class="tab-pane"> <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right"></label> <div class="col-sm-6"> <a href="#" onclick="addrow(this);">[+]</a><input class="form-control" style="border:none; box-shadow:none; width:50%; display:inline-block;" name="goods_photo[]" type="file"> </div> </div> <div id="goods_photo"></div> </div>
控制器裏
public function add() { if(request()->isPost()){ //接收所有的表單所有的post數據 $data=input(‘post.‘); // dump($data); die; //驗證post數據 // dump($_FILES);die; $validate = validate(‘goods‘); if(!$validate->check($data)){ $this->error($validate->getError()); } //調用模型添加數據,添加之前會運行 Goods::beforeInsert方法 //調用模型添加數據,添加之後會運行 Goods::afterInsert方法 $add=model(‘goods‘)->save($data); if($add){ $this->success(‘添加商品成功!‘,‘lst‘); }else{ $this->error(‘添加商品失敗!‘); } return; } }
模型裏的後置勾子beforeUpdate()
protected static function init()
{
//$goods獲取到的是插入goods表裏的數據,並獲取到插入後的主鍵id
Goods::afterInsert(function($goods){
//接受表單數據
$goodsData=input(‘post.‘);
// 批量寫入會員價格
$mpriceArr=$goods->mp;
$goodsId=$goods->id;
if($mpriceArr){
foreach ($mpriceArr as $k => $v) {
if(trim($v) == ‘‘){
continue;
}else{
db(‘member_price‘)->insert([‘mlevel_id‘=>$k,‘mprice‘=>$v,‘goods_id‘=>$goodsId]);
}
}
}
// 商品相冊處理 給主圖上批量生成三張縮略圖
if($goods->_hasImgs($_FILES[‘goods_photo‘][‘tmp_name‘])){
$files = request()->file(‘goods_photo‘);
foreach($files as $file){
// 移動到框架應用根目錄/public/uploads/ 目錄下
$info = $file->move(ROOT_PATH . ‘public‘ . DS .‘static‘. DS .‘uploads‘);
if($info){
// 輸出 42a79759f284b767dfcb2a0197904287.jpg
$photoName=$info->getFilename();
$ogphoto=date("Ymd"). DS . $photoName;
$bigphoto=date("Ymd"). DS . ‘big_‘.$photoName;
$midphoto=date("Ymd"). DS . ‘mid_‘.$photoName;
$smphoto=date("Ymd"). DS . ‘sm_‘.$photoName;
$image = \think\Image::open(IMG_UPLOADS.$ogphoto);
$image->thumb(500, 500)->save(IMG_UPLOADS.$bigphoto);
$image->thumb(200, 200)->save(IMG_UPLOADS.$midphoto);
$image->thumb(80, 80)->save(IMG_UPLOADS.$smphoto);
db(‘goods_photo‘)->insert([‘goods_id‘=>$goodsId,‘og_photo‘=>$ogphoto,‘big_photo‘=>$bigphoto,‘mid_photo‘=>$midphoto,‘sm_photo‘=>$smphoto]);
}else{
// 上傳失敗獲取錯誤信息
echo $file->getError();
}
}
}
}
}
判斷$_FILES[‘goods_photo‘][‘tmp_name‘]
是否為空來判斷是否有圖片上傳
第39課 thinkphp5完成商品會員價格功能(後置勾子afterInsert)