Laravel 验证的最佳实践
Best Practice for Laravel Validation
我创建新的表单请求并将其用于所有 CRUD 操作
并使用$this->getMethod();
检查请求之间的差异
然后我面临逻辑问题
存储方法中需要的所有字段是否应该在更新方法中需要?
=> 这里的问题是 API 的消费者是否应该发送所有密钥对象来更新特定密钥
如果不应该并且从 API 发送的键名与数据库不同table 列名
=> 我不能使用 update($request()->all());
因为键与列名不同,所以我需要 loop 忽略所有请求键具有 null 的密钥 - 也可以通过 multi-check -
完成
请问最佳实践是什么??
您可以通过以下方法完成此操作:
$this->validate(
$request,
[
'YOUR INPUT FIELD NAME' => 'required',
]
);
您也可以使用 $request->validate()
因为 Laravel 5.5+:
$request->validate(
[
'YOUR INPUT FIELD NAME' => 'required',
]
);
$validator = Validator::make($request->all(), [
'phone' => 'sometimes|max:255',
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'pic_file' => 'sometimes|mimes:jpg,png,jpeg,gif|max:1000',
]);
if ($validator->fails()) {
return redirect('/')->withErrors($validator);
}
Laravel.
中有多种验证数据的方法
我更喜欢不在控制器中编写验证检查,而是将其写入单独的表单请求中,并将该请求对象用作参数。
假设我们有一个用户模型,并且需要一个名称,并且在您的控制器的 store
和 update
方法中是唯一的,您可以简单地使用 UserRequest
对象,如所述下面。
创建表单请求class
php artisan make:request UserRequest
class UserRequeset extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$id = request('id') ?: 'NULL'; // To identify if a request is for store or update just take autoincremented id parameter from request
return [
'name' => "required|unique:users,name,$id"
];
// You can also customize your validation for different methods as below
switch ($this->method()) {
case 'POST':
return [
// validation for post method
];
break;
case 'PUT':
return [
// validation for put method
];
break;
default:
return [];
break;
}
}
public function messages()
{
return [
"name.required" => "User name is required",
"name.unique" => "User name should be unique"
// or you can customize this using language
"name.required" => __("user.required_message"),
"name.unique" => __("user.unique_message")
];
}
}
在UserController
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
public function store(UserRequest $request)
{
// Enter your code just after validation part no need of any validation code here
}
public function update(UserRequest $request)
{
// Enter your update code just after validation part no need of any validation code here
}
}
我创建新的表单请求并将其用于所有 CRUD 操作
并使用$this->getMethod();
检查请求之间的差异
然后我面临逻辑问题
存储方法中需要的所有字段是否应该在更新方法中需要?
=> 这里的问题是 API 的消费者是否应该发送所有密钥对象来更新特定密钥
如果不应该并且从 API 发送的键名与数据库不同table 列名
=> 我不能使用
完成update($request()->all());
因为键与列名不同,所以我需要 loop 忽略所有请求键具有 null 的密钥 - 也可以通过 multi-check -
请问最佳实践是什么??
您可以通过以下方法完成此操作:
$this->validate(
$request,
[
'YOUR INPUT FIELD NAME' => 'required',
]
);
您也可以使用 $request->validate()
因为 Laravel 5.5+:
$request->validate(
[
'YOUR INPUT FIELD NAME' => 'required',
]
);
$validator = Validator::make($request->all(), [
'phone' => 'sometimes|max:255',
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'pic_file' => 'sometimes|mimes:jpg,png,jpeg,gif|max:1000',
]);
if ($validator->fails()) {
return redirect('/')->withErrors($validator);
}
Laravel.
中有多种验证数据的方法我更喜欢不在控制器中编写验证检查,而是将其写入单独的表单请求中,并将该请求对象用作参数。
假设我们有一个用户模型,并且需要一个名称,并且在您的控制器的 store
和 update
方法中是唯一的,您可以简单地使用 UserRequest
对象,如所述下面。
创建表单请求class
php artisan make:request UserRequest
class UserRequeset extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$id = request('id') ?: 'NULL'; // To identify if a request is for store or update just take autoincremented id parameter from request
return [
'name' => "required|unique:users,name,$id"
];
// You can also customize your validation for different methods as below
switch ($this->method()) {
case 'POST':
return [
// validation for post method
];
break;
case 'PUT':
return [
// validation for put method
];
break;
default:
return [];
break;
}
}
public function messages()
{
return [
"name.required" => "User name is required",
"name.unique" => "User name should be unique"
// or you can customize this using language
"name.required" => __("user.required_message"),
"name.unique" => __("user.unique_message")
];
}
}
在UserController
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
public function store(UserRequest $request)
{
// Enter your code just after validation part no need of any validation code here
}
public function update(UserRequest $request)
{
// Enter your update code just after validation part no need of any validation code here
}
}