笔记:定制stub之controller.api

写在前面

由于个人习惯/代码风格等原因,定制适合自己或团队的stub模板文件可有效提升开发效率。
模板 controller.api.stub文件是系统自带命令make:controller --api的模板文件,修改此模板文件实际就修改了命令make:controller --api生成的controller文件。
注意:修改前请备份!

快速开始

修改模板 controller.api.stub 文件:

<?php

namespace {{ namespace }};

use {{ rootNamespace }}Http\Controllers\Controller;
use App\Service\HttpService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\BinaryFileResponse;

class {{ class }} extends Controller
{

    private $service;

    public function __construct()
    {
        //登录的 token 鉴权
        $this->middleware('token');
        //定义 service
        $this->service = null;

    }

    /**
     * 新增/编辑的校验规则
     *
     * @return array
     */
    public function getAddOrEditRule(): array
    {
        return [
            'name' => 'required|string',
            'remark' => 'sometimes|nullable|string',
        ];
    }

    /**
     * 新增
     *
     * @param Request $request
     * @return JsonResponse
     */
    public function add(Request $request): JsonResponse
    {
        $rule = $this->getAddOrEditRule();
        if ($error = HttpService::validate($request->all(), $rule)) {
            return HttpService::error($error);
        }
        $params = $request->all();
        $check = $this->service->addCheck($params);
        if ($check !== true) {
            return HttpService::error($check['msg']);
        }
        $res = $this->service->add($params);
        if ($res['ok'] === false) {
            return HttpService::error($res['msg']);
        }

        return HttpService::success('ok', $res['data']);
    }

    /**
     * 编辑
     *
     * @param Request $request
     * @return JsonResponse
     */
    public function edit(Request $request): JsonResponse
    {
        $rule = array_merge($this->getAddOrEditRule(), [
            'id' => 'required|integer',
        ]);
        if ($error = HttpService::validate($request->all(), $rule)) {
            return HttpService::error($error);
        }
        $params = $request->all();
        $check = $this->service->editCheck($params);
        if ($check !== true) {
            return HttpService::error($check['msg']);
        }
        $res = $this->service->edit($params);
        if ($res['ok'] === false) {
            return HttpService::error($res['msg']);
        }

        return HttpService::success('ok', $res['data']);
    }

    /**
     * 删除
     *
     * @param Request $request
     * @return JsonResponse
     */
    public function del(Request $request): JsonResponse
    {
        $rule = [
            'id' => 'required|integer'
        ];
        if ($error = HttpService::validate($request->all(), $rule)) {
            return HttpService::error($error);
        }
        $id = $request->get('id');
        $check = $this->service->delCheck($id);
        if ($check !== true) {
            return HttpService::error($check['msg']);
        }
        $res = $this->service->del($id);
        if ($res['ok'] === false) {
            return HttpService::error($res['msg']);
        }

        return HttpService::success('ok', $res['data']);
    }

    /**
     * 列表
     *
     * @param Request $request
     * @return JsonResponse
     */
    public function list(Request $request): JsonResponse
    {
        $rule = [
            'page' => 'required|integer',
            'pageSize' => 'required|integer',
            'startTime' => 'sometimes|nullable|date',
            'endTime' => 'sometimes|nullable|date|after:startTime',
        ];
        if ($error = HttpService::validate($request->all(), $rule)) {
            return HttpService::error($error);
        }
        $params = $request->all();
        $res = $this->service->list($params);
        if ($res['ok'] === false) {
            return HttpService::error($res['msg']);
        }

        return HttpService::success('ok', $res['data']);
    }

    /**
     * 导出
     *
     * @param Request $request
     * @return BinaryFileResponse
     */
    public function export(Request $request): BinaryFileResponse
    {
        $params = $request->all();
        return $this->service->export($params);
    }

    /**
     * 详情
     *
     * @param Request $request
     * @return JsonResponse
     */
    public function info(Request $request): JsonResponse
    {
        $rule = [
            'id' => 'required|integer'
        ];
        if ($error = HttpService::validate($request->all(), $rule)) {
            return HttpService::error($error);
        }
        $id = $request->get('id');
        $res = $this->service->info($id);
        if ($res['ok'] === false) {
            return HttpService::error($res['msg']);
        }

        return HttpService::success('ok', $res['data']);
    }

}

命令:

php artisan make:controller DemoController --api

写在最后

这里是为了方便自己更好的偷懒,修改controller.api.stub模板内容配合自定义的service.stub模板使用!
更多参考:make命令定制类文件技巧

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

在根目录下,新建个stubs目录,把controller放进去即可,也可以用命令php artisan stub:publish将默认模板发布到stubs目录

6天前 评论

天生写 golang 的一把好手。。。

5天前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!