如您所知,Laravel 5改变了您调用validator
的方式,旧的方式是调用validator facade
,但现在基础Controller类中有ValidatesRequests
特征,但是validate
方法接受请求作为values数组,但是当您定义路由参数时,这些值不会存储在Request
中,那么如何验证这些参数?
编辑:
路线:
Route::get('/react-api/{username}', 'ProfileController@getUsername');
控制器:
public function getUsername(Request $request, $username)
{
$v = $this->validate($request, ['username' => 'required']);
}
那么,问题如何验证这个用户名参数?
答案 0 :(得分:5)
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
}
然后您可以正常编码规则:
public function rules()
{
return [
'username' => 'required',
];
}
答案 1 :(得分:2)
public function listTurns($doctor_id, $limit, $offset){
$r = [
'doctor_id' => $doctor_id,
'limit' => $limit,
'offset' => $offset,
];
$validator = Validator::make($r, [
'doctor_id' => 'required|numeric|min:1|exists:doctors,id',
'limit' => 'required|numeric|min:1',
'offset' => 'required|numeric|min:0',
]);
}
答案 2 :(得分:0)
支持以下路线:
Route::get('profile/{id}', 'ProfileController@show');
您仍然可以将id
参数验证为L4方式:
public function show(){
$validator = \Validator::make(
\Input::all(),
[
'id' => ['required', 'numeric']
]
);
// run validator here
}
如果您需要验证具体数据,请查看以下示例:
public function getUsername(Request $request, $username)
{
$validator = \Validator::make(
[
'username' => $username
],
[
'username' => ['required']
]
);
// run the validator here
}
L5让你以另外两种方式做。第一个,使用在控制器中注入的通用Request
类:
public function show(Request $request){
$this->validate($request, [
'id' => ['required', 'numeric']
]);
// do stuff here, everything was ok
}
在L5中,您可以调用接收请求的 validate()函数以及在其上运行的规则。此函数负责运行规则,如果某些规则失败,则将用户重定向到先前的请求
最后,作为第二个选项,您可以使用Form request validation。请记住,可以通过Request class
访问每个GET和POST值答案 3 :(得分:0)
如果您打算直接在控制器方法中执行此操作,则可以执行以下操作:
public function getUser(Request $request)
{
$request->merge(['id' => $request->route('id')]);
$request->validate([
'id' => [
'required',
'exists:users,id'
]
]);
}
要在自定义FormRequest
类中执行此操作,请添加以下内容:
protected function prepareForValidation()
{
$this->merge(['id' => $this->route('id')]);
}
并使用您的rules
方法:
public function rules()
{
return [
'id' => [
'required',
'exists:users,id'
]
];
}
答案 4 :(得分:-1)
- nameA2:xxxx
- nameB2:xxxx
答案 5 :(得分:-1)
use Illuminate\Support\Facades\Validator;
public function getUsername($username) {
$validator = Validator::make(['username' => $username], [
'username' => 'required'
]);
if ($validator->fails()) {
return response()->json(['status' => 'error'], 400);
}
}