带有请求类的自定义验证规则不起作用laravel 7

时间:2020-09-07 03:57:44

标签: php laravel laravel-7

下面是我的代码;

FruitRequest.php

class FruitRequest extends Request
{

public function authorize()
{
    return true;
}

public function rules()
{
    return [
        'name' => 'required|alpha',
        'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048'
    ];
}

public function messages()
{
    return ['name.required' => response("Name should be mandatory", 404),
        'name.alpha' => response("Name should be contains only letters", 404),
        'image.required' => response("Foto should be mandatory", 404),
        'image.mimes' => response('Foto should be jpeg,png,jpg,gif,svg', 404),
        'image.max' => response('Foto size should be blow 2 MB', 404),
    ];
}

}

FruitController.php

use App\Http\Controllers\Controller;
use App\Http\Requests\FruitRequest;

class FruitController extends Controller
{

public function store(FruitRequest $request)
{
    echo $request->input('name');

    //above line gives nothing to me
}

}

如果我使用extends Request而不是extends FruitRequest,那么这给了我用户在邮递员中传递的价值。我不知道为什么这个自定义Request类不起作用。我附上了屏幕截图。请帮助...。

enter image description here

2 个答案:

答案 0 :(得分:0)

长时间不使用邮递员,我正在用自己的代码进行测试

我正在这样使用FormRequest:

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class YourRequest extends FormRequest
{
  //this function called if Validator::make()->fails();
  //here where you can modifying your message
  protected function failedValidation(Validator $validator)
  {
    //note this only for API, for formData use \Illuminate\Validation\ValidationException($validator)
    throw new HttpResponseException(response()->json($validator->errors()->all(), 422));
    //this will get parameter attribute set from FormRequest
    //attributes() along with the error message, 
    //or $validator->errors()->all() to get messages only like my screenshot
    //or modify message with your logic
  }

  public function authorize() { return true; }
  public function rules() { return []; }
  public function attributes() { return []; }
  public function messages() { return []; }
}

在控制器中:

use YourRequest;

public function store(YourRequest $req)
{
  return response($req->all())->setStatusCode(200); 
}

在您的FormRequest中替换response(),仅输入文本:

public function messages()
{
    return ['name.required' => "Name should be mandatory"],
}

2,验证alpha仅接受字母,您的名字是数字, 从我的代码中得到的结果(我使用消息数组中的默认验证器消息): postman

答案 1 :(得分:0)

使用FormRequest扩展您的请求类

use Illuminate\Foundation\Http\FormRequest;

class FruitRequest extends FormRequest

有关更多详细信息,请访问laravel的官方文档:https://laravel.com/docs/7.x/validation#creating-form-requests