【问题标题】:Validating not all fields in form - Laravel验证表单中并非所有字段 - Laravel
【发布时间】:2019-12-10 04:07:45
【问题描述】:

在 laravel 中,我创建了一个表单。目前,我正在验证此表单的输入字段。当我尝试验证某些输入字段而其他不验证时,我遇到了问题。例如,mail 应该被验证,但 cocking_name 不是(这个字段不需要填写,它是一个选项)

我已经尝试了所有我能找到的验证方法。我不断收到同样的错误。

Method Illuminate\Validation\Validator::validatePhone does not exist.

我想我错过了一些东西。

我试过了:

  • 验证器::make($request->...
  • $this->validate(request(), [ ...
  • $request->validate([ ...

下面,您将找到所有应该输入数据库的数据。 如果我删除验证部分,数据就会被插入到数据库中。我认为问题在于我如何尝试验证。感谢您的帮助。

 $this->validate(request(), [
        'add_name'              => 'required|min:3',
        'add_mail'              => 'required|email', 
        'name'                  => 'required|min:3',
        'email'                 => 'required|email', 
        'telefone'              => 'numeric|phone', 
        'gsm'                   => 'numeric|phone', 
        'event'                 => 'required|min:3',
        'date_start'            => 'required|date|after:tomorrow',
        'date_end'              => 'required|date|after_or_equal:event_date_start',
        'location'              => 'required|min:3',
        'number'                => 'required',
    ]);

    $event = new Event;

    $event->add_name     = request('add_name');
    $event->add_mail     = request('add_mail');
    $event->name       = request('name');
    $event->email      = request('email');
    $event->telefone   = request('telefone');
    $event->gsm        = request('gsm');
    $event->name         = request('name');
    $event->date_start   = request('date_start');
    $event->date_end     = request('date_end');
    $event->location           = request('location');
    $event->number       = request('number');
    $event->catering           = request('catering');
    $event->catering_name      = request('catering_name');
    $event->remarks            = request('remarks');
    $event->status             = Event::STATUS_0;

    $event->save();

【问题讨论】:

  • 看看 Laravel 5.8 可用的验证规则:laravel.com/docs/5.8/validation#available-validation-rules 没有phone 规则(这就是你的错误validatePhone does not exist. 所说的)。您将需要添加自己的一个:laravel.com/docs/5.8/validation#custom-validation-rules。首先尝试一下,如果您有具体问题,请更新您的问题。
  • 非常感谢。我找不到问题,只是电话问题。
  • 没问题。只是附带说明,除非您的应用程序要求它们采用某种格式,例如用于自动呼叫/发短信的E.164(即+1{number}),否则可能不需要强制使用某种格式。但同样,取决于使用情况。

标签: laravel forms validation


【解决方案1】:

很遗憾,phone 不是默认验证之一。您可以尝试以下方法:

[
    'telefone' => 'required|regex:/(01)[0-9]{9}/',
]

你可以看到 Laravel here 给出的可用验证列表。 根据对您的重要程度,有多种更复杂的选项。

  • 有一些易于即插即用的软件包,例如Laravel-Phone
  • 您可以使用php artisan make:rule phone_number 创建自己的自定义validation,然后编辑新规则:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class PhoneNumber implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // logic here, most likely some sort of regex.
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be a valid phone number.';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2016-10-31
    • 2023-03-29
    • 2014-06-27
    • 2016-07-15
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多