控制器中,banner,通过在模型中处理数据再返控制器
控制器:
class Banner
{
/*
* 获取banner的数据
* @url /banner/:id
* @http GET
* $id banner的id号
*
* */
public function getBanner($id)
{
(new IDMustBePostiveInt())->goCheck();
//通过模型传递处理的数据 通过with进行关联查询
// $banner = BannerModel::with(['items','items.img'])->find($id);
$banner = BannerModel::getBannerByID($id);
//利用hidden的方法进行隐藏
$banner->hidden(['delete_time']);
if (!$banner){
throw new BannerMissException();
}
//读取图片的前缀
// $c = config('setting.img_prefix');
return $banner;
}
}
模型:
class Banner extends BaseModel
{
//需要关联BannerItem的模型 采用创建一个方法的引用的形式进行
public function items()
{
return $this->hasMany('BannerItem','banner_id','id');
}
//根据banner的获取id
public static function getBannerByID($id)
{
$banner = BannerModel::with(['items','items.img'])->find($id);
return $banner;
//原生查询
// $result = Db::query('select * from banner_item where img_id=?',[$id]);
//查询构造器PDO的使用 链式方法的使用方式
// $result = Db::table('banner_item')
// ->where('banner_id','=', $id)
// ->select();
//闭包方式 表达式查询方式 采用use的方法
// $result = Db::table('banner_item')
// ->where(function ($query) use ($id){
// $query->where('banner_id','=',$id);
// })
// ->select();
//
// return $result;
}
}
基模型(主要对图片的地址的拼接):
class BaseModel extends Model
{
//获取图片地址 拼接图片地址
public function prefixImgUrl($value,$data)
{
$finalUrl = $value;
if ($data['from'] == 1){
return config('setting.img_prefix').$value;
}else{
return $finalUrl;
}
}
}
拼接的setting:
控制器前置的验证器:
(new IDMustBePostiveInt())->goCheck();
BaseValidate:
//goCheck的验证
public function goCheck()
{
//通过http请求获取参数
$request = Request::instance();
$params = $request->param();
//对获取的参数进行校验
$result = $this->batch()->check($params);
if (!$result){
$e = new ParameterException(
[
'msg'=>'参数错误',
'code'=>400,
'errorCode'=>1002
]
);
throw $e;
}else{
return true;
}
}
//验证是否为正整数
public function isPositiveInteger($value,$rule='',$data='',$field='')
{
if (is_numeric($value) && is_int($value + 0) && ($value + 0)>0){
return true;
}else{
return false;
}
}
路由:
//导航栏
Route::get('api/:version/banner/:id','api/:version.Banner/getBanner');
postman: