对于表单验证,我通过php artisan make:request UpdatePlanRequest
进行了Request class
。
但是,在存储中使用UpdatePlanRequest
类后,不再调用该方法。
UpdatePlanRequest
:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class UpdatePlanRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{ //TODO: CHECK IF THE PROTOTYPE IDS ARE OWNED BY THE USER (https://stackoverflow.com/questions/42662579/validate-an-array-of-integers/42693970)
return [
'start_date' => 'required|date',
'end_date' => 'required|date|after:start_date',
'name' => 'required|string'
];
}
}
控制器方法:
use AppHttpRequestsUpdatePlanRequest;
public function store(UpdatePlanRequest $request)
{
//
dd('hello');
}
如果显示函数标头store(Request $request)
hello
,则在该示例中不会显示。
自定义 Request 类是稍后调用$request->validated();
才能根据文档进行验证所必需的。
你把请求类作为抽象有什么原因吗?运行php artisan make:request <name>
时创建的默认类不会将该类定义为抽象类。这似乎对我有用,但在将其声明为抽象时则不然。
$request->validated();
用于检索经过验证的输入,因此只需调用UpdatePlanRequest
它就可以验证请求
//Try This
use AppHttpRequestsUpdatePlanRequest;
public function store(UpdatePlanRequest $request)
{
$validatedData = $request->validated();
dd('$validatedData');
$profile = new Profile([
'user_id' => $request->get('user_id'),
]);
$profile->save();
echo $request->session()->flash('alert-success', 'Profile details Succefully Added!');
return redirect('create')->with('success', 'Data saved!');
}
Your route will be.
Route::get('profile','ProfileController@store');
Route::post('profile/create','ProfileController@store')->name('create');
嗯,这很好用! 调用该方法时,它会检查请求类 (UpdatePlanRequest(。如果出现错误,则不再输入方法,并且看不到dd((函数的输出。 如果检查规则后数据正确,则会显示 dd((。 您必须管理错误
当我需要从 LaravelFormRequest
返回错误消息时,我也遇到了这个问题。主要原因是,当您发送的数据无效时,FormRequest
文件中的failedValidation()
方法默认会重定向。因此,我们可以通过自定义failedValidation()
方法简单地解决上述问题。
请打开FormRequest.php
文件,您将看到failedValidation()
方法采用一个参数,该参数是验证器。我们还看到FormRequest
为我们提供了一种getValidatorInstance()
方法。这是我在BaseRequest.php
文件中自定义的代码。从现在开始,需要返回错误消息的请求将从BaseRequest
继承,而不是FormRequest
。
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
use IlluminateContractsValidationValidator;
class BaseRequest extends FormRequest
{
protected $stopOnFirstFailure = false;
public function authorize()
{
return true;
}
public function failedValidation(Validator $validator)
{
return $validator->errors()->messages();
}
public function getValidator()
{
return $this->getValidatorInstance();
}
}
表单请求自定义文件
...
class StoreRequest extends BaseRequest
{
\ ...
public function rule()
{
return [];
}
public function message()
{
return [];
}
}
在控制器文件中,我们有
<?php
namespace ModulesUserHttpControllers;
use IlluminateRoutingController;
class UserController extends Controller
{
\ ...
public function store(StoreRequest $request)
{
$errors = $request->failedValidation($request->getValidator());
if ($errors) return response()->json(['errors' => $errors], 422);
return $this->service->createUser($data);
}
}
祝你好运!