兵兵有你

人品好,气质差.丢了工作就回家...

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.发送 GuzzleHttp\Client;请求

  1.1 一般情况下,我们只发送post--form data请求如下

$client = new Client();
$option['form_params'] = [...];
$res = $client->post("http://a.com",$option);
$res->getBody(); //获取结果

  1.2 但有时需要发送application/json请求,如下

$client = new Client();
$option['body'] = json_encode($a,JSON_UNESCAPED_SLASHES);
$option['headers'] = ['Content-Type' => 'application/json'];
$res = $client->post("http://localhost:8080/invoice",$option);
 return $res->getBody()->getContents();

  

模型篇:

1.根据数据库部分URL返回完整的URL

    public function getImageUrlAttribute()
    {
        // 如果 image 字段本身就已经是完整的 url 就直接返回
        if (Str::startsWith($this->attributes['image'], ['http://', 'https://'])) {
            return $this->attributes['image'];
        }
        return \Storage::disk('public')->url($this->attributes['image']);
    }
//模板中Laravel 的模型访问器会自动把下划线改为驼峰,所以 image_url 对应的就是 getImageUrlAttribute
<div class="img"><img src="{{ $product->image_url }}" alt=""></div>

 

$casts用法:将字段转换为期望的类型,目前可转换为以下类型:
integer, real, float, double, string, boolean, object,array,collection,date,datetime 和 timestamp。
protected $casts = [
    'email_verified_at' => 'datetime',
];

 

protected $dates = ['last_used_at'];
表示 last_used_at 字段是一个时间日期类型,在之后的代码中 $address->last_used_at 返回的就是一个时间日期对象(确切说是 Carbon 对象,Carbon 是 Laravel 默认使用的时间日期处理类)。

  

 

  

 

控制器:

1.条件查询与搜索

public function index(Request $request)
    {
        // 创建一个查询构造器
        $builder = Product::query()->where('on_sale', true);
        // 判断是否有提交 search 参数,如果有就赋值给 $search 变量
        // search 参数用来模糊搜索商品
        if ($search = $request->input('search', '')) {
            $like = '%'.$search.'%';
            // 模糊搜索商品标题、商品详情、SKU 标题、SKU描述
            $builder->where(function ($query) use ($like) {
                $query->where('title', 'like', $like)
                    ->orWhere('description', 'like', $like)
                    ->orWhereHas('skus', function ($query) use ($like) {
                        $query->where('title', 'like', $like)
                            ->orWhere('description', 'like', $like);
                    });
            });
        }

        // 是否有提交 order 参数,如果有就赋值给 $order 变量
        // order 参数用来控制商品的排序规则
        if ($order = $request->input('order', '')) {
            // 是否是以 _asc 或者 _desc 结尾
            if (preg_match('/^(.+)_(asc|desc)$/', $order, $m)) {
                // 如果字符串的开头是这 3 个字符串之一,说明是一个合法的排序值
                if (in_array($m[1], ['price', 'sold_count', 'rating'])) {
                    // 根据传入的排序值来构造排序参数
                    $builder->orderBy($m[1], $m[2]);
                }
            }
        }

        $products = $builder->paginate(16);

  2.查出某个字段,对结果转为布尔类型,场景如某人是否收藏过此产品

$favored = false;
if($user = $request->user()){
    $favored = boolval($user->favoriteProducts()->find($product->id));
//再传进模板里

 

 HTML篇

1.form表单可以直提交成get形式.

2. 分页后查询的input内容丢失,可将参数加进paginate 如

<div class="float-right">{{ $products->appends($filters)->render() }}</div>

3.下拉式查询 

                    <form action="{{ route('products.index') }}" class="search-form">
                        <div class="form-row">
                            <div class="col-md-9">
                                <div class="form-row">
                                    <div class="col-auto"><input type="text" class="form-control form-control-sm" name="search" placeholder="搜索"></div>
                                    <div class="col-auto"><button class="btn btn-primary btn-sm">搜索</button></div>
                                </div>
                            </div>
                            <div class="col-md-3">
                                <select name="order" class="form-control form-control-sm float-right">
                                    <option value="">排序方式</option>
                                    <option value="price_asc">价格从低到高</option>
                                    <option value="price_desc">价格从高到低</option>
                                    <option value="sold_count_desc">销量从高到低</option>
                                    <option value="sold_count_asc">销量从低到高</option>
                                    <option value="rating_desc">评价从高到低</option>
                                    <option value="rating_asc">评价从低到高</option>
                                </select>
                            </div>
                        </div>
                    </form>

 

            $('.search-form select[name=order]').on('change',function(){
                $('.search-form').submit();
            })

 

 
posted on 2019-05-09 13:55  greatbing  阅读(651)  评论(0编辑  收藏  举报