简体   繁体   中英

Validate very long text

I have a table with description column. Description has a datatype text (but I tried to change to longText type into phpmyadmin). I have a validation rule too:

   public function rules()
    {
        return [
            'title' => 'required|string|between:6,50',
            'city' => 'required|integer|exists:cities,id',
            'phone' => 'required_without:mail|digits:9',
            'mail' => 'nullable|required_without:phone|email',
            'description' => 'required|string|between:30,600',
            'file' => 'nullable|mimes:jpeg,jpg,png|max:3000'
        ];
    }

And it works but the problem is that if I write a very long text, I don't receive any error instead just refresh only. I had the same with other controllers method. How I can I solve my problem?

When you already made a rule, and validate it in Controller, you need to make condition if the validator fails, you need to return the error to the view. You can follow code below

$validator = Validator::make($request, $rule);

After that check the validator with

if ($validator->fails()) {
    return redirect()->back()
        ->withErrors($validator)
        ->withInput();
}

In your view, just show the error with

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

The page refreshes because of the form's submission.

As for the validation check, There are 3 main types of validation - 1. Browser validation 2. Front-end validation 3. Server-side validation

The errors that you have seen in other fields of the form are probably because of the Browser validation . It's built into the browser. However, with your current implementation, it is Server-side validation . It will work on the background, but will not show in the front end.

For that, please add the following code inside the body of your html page.

<div class="alert alert-danger">
  <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
  </ul>
</div>

Also please add the following function to your validatior's Request class.

public function messages()
{
    return [
        'description.between' => "Description should be between 30 and 600 characters",
    ];
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM