Laravel 如何在自定义规则中验证电子邮件

Laravel 如何在自定义规则中验证电子邮件,laravel,Laravel,我用拉威尔 我对用户名和电子邮件使用相同的字段。此外,如果输入是用户名或电子邮件,则用户必须进行选择 如果类型是电子邮件,我喜欢添加电子邮件验证。如果是用户名,则不需要电子邮件验证 我尝试使用if函数创建自定义规则。但是我怎样才能验证电子邮件呢 class StoreUserRequest extends FormRequest { public function rules() { return [ 'first_name'

我用拉威尔

我对用户名和电子邮件使用相同的字段。此外,如果输入是用户名或电子邮件,则用户必须进行选择

如果类型是电子邮件,我喜欢添加电子邮件验证。如果是用户名,则不需要电子邮件验证

我尝试使用if函数创建自定义规则。但是我怎样才能验证电子邮件呢

class StoreUserRequest extends FormRequest
{
    public function rules()
    {
        return [
            'first_name'            =>      'required',
            'last_name'             =>       'required',
            'password'              =>      'required',
            'email'                 =>      ['required', new ValidateEmailRule()]
        ];
    }

    public function authorize()
    {
        return true;
    }
}

如果:是电子邮件:1,您不能只使用
“电子邮件”=>“必填”吗

编辑:


如果
is_email=1
我想检查
email
中的输入是否是有效的电子邮件地址编辑:我的意思是:
$this->attributes->get('is_email')
返回空值。我把它改成了
if(request()->is_email){$rules['email']='email'}
如果($this->is_email==1)
或者
如果($this->boolean(is_email)
?我知道,只是想更新我的答案,用
$this
代替
request()
在我看来更好,我想确保它能工作:)因此,基本上如果用户选择电子邮件作为选项,然后您想检查用户输入的值是否为有效的电子邮件地址格式或不正确?
class ValidateEmailRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (request()->is_email) {
            //validate email ---here i need help to get the right code---
        }
        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {

        return 'The validation error message.';
    }
}
$rules = [
    'first_name' => 'required',
    'last_name' => 'required',
    'password' => 'required',
];

    if ($this->is_email) {
        $rules['email'] = 'email';
    }

    return $rules;