laravel轮播图管理api

608 阅读2分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

一、轮播图管理

1.1 创建模型、控制器、路由、表单验证

1、创建轮播图模型和迁移文件 运行命令php artisan make:model Slide -m 在这里插入图片描述


2、创建轮播图字段

Schema::create('slides', function (Blueprint $table) {
            $table->id();
            $table->string('title')->comment('轮播图名称');
            $table->string('url')->nullable()->comment('轮播图跳转链接');
            $table->string('img')->comment('轮播图图片');
            $table->string('status')->default(0)->comment('状态:0禁用,1正常');
            $table->integer('seq')->default(1)->comment('排序');
            $table->timestamps();
        });

在这里插入图片描述 运行命令php artisan migrate执行迁移生成表: 在这里插入图片描述


3、创建轮播图控制器 运行命令php artisan make:controller Admin/SlideController --api创建轮播图资源路由: 在这里插入图片描述


4、创建轮播图路由

 /**
   * 轮播图资源路由管理
   */
  //排序
  $api->patch('slides/{slide}/seq', [ SlideController::class, 'seq']);
  // 资源路由
  $api->resource('slides', SlideController::class);
  // 禁用启用
  $api->patch('slides/{slide}/status', [ SlideController::class, 'status']);

在这里插入图片描述


5、创建轮播图表单验证 运行命令php artisan make:request Admin/SlideRequest创建轮播图表单验证: 在这里插入图片描述 写入验证规则:

<?php

namespace App\Http\Requests\Admin;

use App\Http\Requests\BaseRequest;

class SlideRequest extends BaseRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required',
            'img' => 'required',
        ];
    }

    public function messages() {
        return [
            'title.required' => '标题必填',
            'img.required' => '图片地址必填',
        ];
    }
}

1.2 添加轮播图控制器方法

给轮播图模型增加可赋值的字段:

    protected $fillable = ['title', 'url', 'img', 'status', 'seq'];

在这里插入图片描述


添加轮播图控制器方法:

    /**
     * 添加轮播图
     */
    public function store(SlideRequest $request)
    {
        // 查询最大的seq
        $max_seq = Slide::max('seq') ?? 0;
        $max_seq++;
        
        $request->offsetSet('seq', $max_seq);

        $slide = Slide::create($request->all());

        return $this->response->created();
    }

在这里插入图片描述


测试: 在这里插入图片描述 在这里插入图片描述


1.3 轮播图列表控制器方法

创建轮播图SlideTransformer.php写入如下代码:

<?php 

namespace App\Transformers;

use App\Models\Slide;
use League\Fractal\TransformerAbstract;

class SlideTransformer extends TransformerAbstract {
    public function transform(Slide $slide) {
        return [
            'id' => $slide->id,
            'title' => $slide->title,
            'url' => $slide->url,
            'img' => $slide->img,
            'img_url' => oss_url($slide->img),
            'seq' => $slide->seq,
            'status' => $slide->status,
            'created_at' => $slide->created_at,
            'updated_at' => $slide->updated_at,
        ];
    }
}

轮播图控制器列表方法:

    /**
     * 轮播图列表
     */
    public function index()
    {
        $slides = Slide::where('status', 1)
                ->paginate(1);
        return $this->response->paginator($slides, new SlideTransformer());
    }

在这里插入图片描述


1.4 轮播图详情控制器方法

    /**
     * 轮播图详情
     */
    public function show(Slide $slide)
    {
        return $this->response->item($slide, new SlideTransformer());
    }

在这里插入图片描述


测试效果: 在这里插入图片描述

1.5 轮播图更新控制器方法

    /**
     * 轮播图更新
     */
    public function update(SlideRequest $request, Slide $slide)
    {
        $slide->update($request->all());
        return $this->response->noContent();
    }

在这里插入图片描述


测试: 在这里插入图片描述 在这里插入图片描述


1.6 轮播图删除控制器方法

    /**
     * 轮播图删除
     */
    public function destroy(Slide $slide)
    {
        $slide->delete();
        return $this->response->noContent();
    }

在这里插入图片描述


测试效果: 在这里插入图片描述 在这里插入图片描述


1.7 轮播图禁用启用控制器方法

/**
     * 轮播图禁用启用
     */
    public function status(Slide $slide)
    {
        $slide->status = $slide->status == 1 ? 0 : 1;
        $slide->save();
        return $this->response->noContent();
    }

在这里插入图片描述


1.8 轮播图排序

1、排序路由

 //排序
 $api->patch('slides/{slide}/seq', [ SlideController::class, 'seq']);

在这里插入图片描述

2、排序控制器方法

    /**
     * 轮播图排序
     */
    public function seq(Request $request, Slide $slide)
    {
        $slide->seq = $request->input('seq', 1);
        $slide->save();
        return $this->response->noContent();
    }

在这里插入图片描述

3、测试效果 在这里插入图片描述 在这里插入图片描述 可以看到已经更新了。

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。