当您在 Dingo API 设置下运行验证函数时,您需要显式调用验证函数,尝试这样的操作(对于 L5.2):
可能有一些额外的供应商
...
Illuminate\Validation\ValidationServiceProvider::class,
Dingo\Api\Provider\LaravelServiceProvider::class,
...
别名
...
'Validator' => Illuminate\Support\Facades\Validator::class,
...
我也很确定你真的不想按照这里和那里的建议在下面使用它,它会期望表单(编码)输入,并且也可能会像它所期望的那样在 CSRF 令牌上失败,所以它会正确失败验证后(表单输入)。但请确保使用此开/关测试行为。
use Dingo\Api\Http\FormRequest;
制作标题:
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Dingo\Api\Exception\ValidationHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/* This can be a tricky one, if you haven't split up your
dingo api from the http endpoint, there are plenty
of validators around in laravel package
*/
use Validator;
然后是实际代码(如果您遵守 cors 标准,这应该是一个 POST 并且通常转换为存储请求)
...
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(RegisterUserRequest $request) {
$validator = Validator::make($request->all(), $this->rules());
if ($validator->fails()) {
$reply = $validator->messages();
return response()->json($reply,428);
};
dd('OK!');
};
...
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => 'required'
// or/and 'userid' => 'required'
];
}
这将使您返回您期望从验证器获得的响应。如果您将其与预生成的表单一起使用,则不需要此修复,验证器将自动启动。(不在 Dingo Api 下)。
您可能还需要 composer.json 中的这些
"dingo/api": "1.0.*@dev",
"barryvdh/laravel-cors": "^0.7.1",
这是未经测试的,我花了 2 天时间才弄清楚这一点,但我有一个单独的命名空间用于特定于 API 并通过中间件进行身份验证。成功