控制器方法未使用自定义表单请求方法调用



对于表单验证,我通过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);
}
}

祝你好运!

最新更新