笔记:定制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 协议》,转载必须注明作者和本文链接
在根目录下,新建个stubs目录,把controller放进去即可,也可以用命令php artisan stub:publish将默认模板发布到stubs目录
天生写 golang 的一把好手。。。