laravel - 合并表单请求验证以进行存储和更新
问题描述
我正在使用请求验证来验证用户的输入。
这是UpdateUser
:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
class UpdateUser extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Gate::allows('update-user');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$user_id = Arr::get($this->request->get('user'), 'id');
return [
'user.firstname' => 'required|string|max:255',
'user.lastname' => 'required|string|max:255',
'user.email' => "required|string|email|max:255|unique:users,email,{$user_id}",
'user.password' => 'sometimes|nullable|string|min:4|confirmed',
];
}
}
如您所见,发生了一些update
特定的事情:
该authorize()
方法检查用户是否被允许update-user
和在rules
I 中排除当前用户的行是唯一的:
'user.email' => "required|string|email|max:255|unique:users,email,{$user_id}",
当我想合并UpdateUser
andStoreUser
时,确定我是更新还是保存的最有效和可读的方法是什么?
这是我目前的做法:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
class UpdateUser extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if($this->isUpdating())
{
return Gate::allows('update-user');
}
return Gate::allows('create-user');
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
if($this->isUpdating()){
$user_id = Arr::get($this->request->get('user'), 'id');
return [
...
];
}
return [];
}
/**
* @return bool
*/
protected function isUpdating(){
return $this->isMethod('put') || $this->isMethod('patch');
}
}
我想知道我是否可以扩展 FormRequest 类并isUpdating()
默认提供。
解决方案
您的 update 和 store 方法不是相同的请求类型,您在请求实例上有PUT
和PATCH
方法,因此您可以检查请求类型,如下所示:
switch ($request->method()) {
case 'PATCH':
// do anything in 'patch request';
break;
case 'PUT':
// do anything in 'put request';
break;
default:
// invalid request
break;
}
推荐阅读
- javascript - JavaScript 控制台游戏积分系统
- android - 如何在高级或用户模式下启动安卓应用;应用程序在启动时读取变量
- laravel-nova - 如何在 laravel nova 上实现审批模型
- css - Ionic 4 修改 item-native 类的 css 填充规则
- javascript - node.js 的 c++ 插件的速度
- excel - 将数字划分为用户表单标签中显示的唯一排序数字
- f# - 使用 json 类型提供程序急切地加载所有分页数据
- r - 当 Shiny 执行我的函数时丢失列值 - R
- angular - 如何正确订阅发出不同 HTTP 获取请求的服务?[角度]
- javascript - 从firestore更改为mongodb,连接到mongodb