Ili*_*mza 16 php validation laravel laravel-5
如你所知Laravel 5改变了你调用它的方式validator,旧的方法是调用validator facade,但现在ValidatesRequests在基类Controller类中有特征,但是该validate方法接受请求作为values数组,但是当你定义你的路由参数时,这些值不存储Request,所以如何验证这些参数?
编辑:
路线:
Route::get('/react-api/{username}', 'ProfileController@getUsername');
Run Code Online (Sandbox Code Playgroud)
控制器:
public function getUsername(Request $request, $username)
{
$v = $this->validate($request, ['username' => 'required']);
}
Run Code Online (Sandbox Code Playgroud)
那么,问题如何验证此用户名参数?
jon*_*hot 17
如果您打算直接在控制器方法中执行此操作,则可以执行以下操作:
public function getUser(Request $request)
{
$request->merge(['id' => $request->route('id')]);
$request->validate([
'id' => [
'required',
'exists:users,id'
]
]);
}
Run Code Online (Sandbox Code Playgroud)
要在自定义FormRequest类中执行此操作,请添加以下内容:
protected function prepareForValidation()
{
$this->merge(['id' => $this->route('id')]);
}
Run Code Online (Sandbox Code Playgroud)
在你的rules方法中:
public function rules()
{
return [
'id' => [
'required',
'exists:users,id'
]
];
}
Run Code Online (Sandbox Code Playgroud)
Manix的答案对我不起作用,我遇到的问题与Iliyass相同。问题是路由参数不能自动提供给FormRequest。我最终在特定的FormRequest类中重写all()函数:
public function all()
{
// Include the next line if you need form data, too.
$request = Input::all();
$request['username'] = $this->route('username');
return $request
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像往常一样编写规则:
public function rules()
{
return [
'username' => 'required',
];
}
Run Code Online (Sandbox Code Playgroud)
假设以下路线:
Route::get('profile/{id}', 'ProfileController@show');
Run Code Online (Sandbox Code Playgroud)
id您仍然可以以 L4 方式验证参数:
public function show(){
$validator = \Validator::make(
\Input::all(),
[
'id' => ['required', 'numeric']
]
);
// run validator here
}
Run Code Online (Sandbox Code Playgroud)
如果您需要验证具体数据,请查看以下示例:
public function getUsername(Request $request, $username)
{
$validator = \Validator::make(
[
'username' => $username
],
[
'username' => ['required']
]
);
// run the validator here
}
Run Code Online (Sandbox Code Playgroud)
L5 让您可以通过另外两种方式进行操作。第一个,使用Request注入到控制器中的通用类:
public function show(Request $request){
$this->validate($request, [
'id' => ['required', 'numeric']
]);
// do stuff here, everything was ok
}
Run Code Online (Sandbox Code Playgroud)
在 L5 中,您可以调用validate()函数来接收请求和运行请求的规则。该函数负责运行规则,如果某些规则失败,则用户将被重定向到上一个请求
最后,作为第二个选项,您可以使用表单请求验证。请记住,每个 GET 和 POST 值都可以通过 Request 类访问
| 归档时间: |
|
| 查看次数: |
11035 次 |
| 最近记录: |