【发布时间】:2017-01-24 19:40:36
【问题描述】:
我正在尝试使用 laravel 内置请求方法验证我的 api 调用。 我已使用 --resource 使其成为 REST。
OneTimePasswordController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use App\Models\OneTimePassword as Model;
use App\Http\Requests\OneTimePasswordReq;
class OneTimePasswordController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(UserController $user)
{
//
$otps = Model::get();
return response()->json($otps);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(OneTimePasswordReq $request)
{
$insert = Model::create($request->all());
return response()->json($insert);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
$delete = Model::destroy($id);
return response()->json($delete);
}
}
OneTimePasswordReq
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class OneTimePasswordReq 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()
{
return [
'mobile' => 'required',
'code' => 'required',
];
}
protected function formatErrors(Validator $validator)
{
return $validator->errors()->all();
}
/**
* Set custom messages for validator errors.
*
* @return array
*/
public function messages()
{
return [
'mobile.required'=>"Mobile field is required"
];
}
}
如果我通过我的参数和值,它会被插入。
现在,如果我通过删除移动字段的发布请求,我预计会出现验证错误。 但是调用的是 index 方法,该方法从 url 获取所有数据。
我的理解是请求被拒绝,因为缺少参数,问题是为什么它更改为索引方法以及我如何得到错误?
注意:我知道$validator->fails() 的概念,我不想把它放到我的控制器中,因为laravel 提供了这个。
【问题讨论】:
-
您确定是“POST”请求而不是“GET”请求吗?
-
你的表单的动作设置为
store()函数? -
你能用你的
OneTimePasswordController和OneTimePasswordReqclasses 更新这个问题吗 -
我更新了完整的文件。@MattMcDonald。
-
您实现逻辑的方式看起来一切正常 - 我最好的猜测是您的应用程序中的其他地方在发现验证错误时正在执行重定向。
标签: php validation laravel-5.3