我在Laravel是新来的,我试图实现的是非常简单的事情,我想使用Laravel提供的FormRequest来验证请求,但是我遇到了一些难题(如果你在Laravel有经验的话,这肯定是很容易解决的)。
以下是我尝试过的:
我有到控制器的路线图:
Route::put('user/{name}', 'UserController@show');我可以在name函数中获得show参数:
class UserController {
public function show($name)
{
// validtion rules to apply
...
}
}我有适用于请求的验证规则,所以我决定由php artisan make:request ShowRequest创建表单请求,它创建表单请求类:
class ShowRequest extends FormRequest {
public function authorize()
{
return true;
}
public function rules()
{
return [
// my validation rules here
];
}
}由于我有上面的请求类,所以我重构了控制器中的show函数以接收ShowRequest。
class UserController {
public function show(ShowRequest $request)
{
// now I don't need validtion rules in this function
// but how can I access the 'name' parameter now
...
}
}我有两个问题要问:
show函数中,我现在如何访问路由参数name ?if (!$validator->pass())
{
//my custom code for handling validation failure
}现在将处理验证错误的自定义代码放在哪里?我的意思是,我不知道在哪里有这种逻辑,在控制器?在请求课上?多么?
发布于 2021-10-28 08:15:39
您仍然可以将参数$name添加到控制器的show()方法中,因为它是路由url的一部分,而不是经过验证的表单/数据。(重新指挥)
class UserController {
public function show(ShowRequest $request, $name)
{
//...
}
}您还可以从请求对象访问它。
class UserController {
public function show(ShowRequest $request)
{
$request->input('name');
}
}对于错误消息(不是异常),可以将messages()方法添加到ShowRequest::class中。
class ShowRequest extends FormRequest
{
/**
* @return array
*/
public function messages()
{
return [
'name.required' => 'The name is required',
'name.numeric' => 'The name must be a number',
//...
];
}
}如果您需要验证路由所捕获的名称是否仅由字母OR组成,则需要在您的DB中作为字段存在(就像post的一个片段),您需要在路由声明中添加一些验证。
Route::get('/user/{name}', 'Controller@show')->where(['name' => '[a-z]+']);中存在“名称”时捕获请求。
User.php
Class User //..
{
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'name';
}
}web.php
//
Route::get('/user/{user:name}', 'Controller@show');并调整您的控制器以直接接收用户。
class UserController {
public function show(ShowRequest $request, User $user)
{
//...
}
}https://stackoverflow.com/questions/69750446
复制相似问题