如何解决如何在Laravel中使用资源编写验证规则?
我将Laravel 8与Resource
一起在控制器中的api.php和DestroyProductRequest
中定义路由:
Route::resources([
'product' => ProductController::class,]);
在控制器中:
public function destroy(DestroyProductRequest $request,Product $product) {
$product->delete();
return Response::HTTP_OK;
}
在DestroyProductRequest.php中:
public function rules() {
return [
'id' => 'required|integer|exists:products,id',];
}
现在的关键是Route::resource
将来自URL的传入id
转换为模型。但是现在如何在rules()
函数中编写正确的规则?
现在它在错误响应中表示id: ["The id field is required."]
。
有什么主意吗?
解决方法
由于您使用的是资源,所以route参数是隐式出价关键字(产品ID),因此Laravel会将传递的ID隐式绑定为产品。如下更改您的规则代码段,
public function rules() {
return [
'product' => 'required|integer|exists:products,id',];
}
public function destroy(Product $product) {
$product->delete();
return Response::HTTP_OK;
}
如果您想添加ACL
if ($user->can('destroy',$product)) {
$product->delete();
return Response::HTTP_OK;
}
,
默认情况下,Laravel不验证路由参数。 您必须添加自定义逻辑才能正常工作
public function rules()
{
return [
'product' => 'required|integer|exists:products,];
}
protected function validationData()
{
// Add the Route parameters to you data under validation
return array_merge($this->all(),$this->route()->parameters());
}
在正常情况下,您不会验证路由请求。 Laravel将返回404 Not Found异常。这是标准且适当的回应。
,使用Validator
来提问
use Illuminate\Support\Facades\Validator;
public function destroy(DestroyProductRequest $request,Product $product) {
$rules = [
'id' => 'required|integer|exists:products,];
$messages = [
'id.required' => 'The id field is required.','id.integer' => 'The id field need to be integer.','id.exists' => 'The id field is exists.',];
Validator::make($request->all(),$rules,$messages)->validate();
$product->delete();
return Response::HTTP_OK;
}
在此处了解更多信息:https://laravel.com/docs/8.x/validation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。