自定义消息laravel验证

YVS*_*102 20 php laravel laravel-validation

我正在尝试创建用于验证的laravel自定义消息.这是我到目前为止所尝试的:

$messages = [
    'required'  => 'Harap bagian :attribute di isi.',
    'unique'    => ':attribute sudah digunakan',
];
$validator = Validator::make($request->all(), [
    'username' => array('required','unique:Userlogin,username'),
    'password' => 'required',
    'email'    => array('required','unique:Userlogin,email'),$messages
]);

if ($validator->fails()) { 
    return redirect('/')
        ->withErrors($validator) // send back all errors to the login form
        ->withInput();
} else {
    return redirect('/')
        ->with('status', 'Kami sudah mengirimkan email, silahkan di konfirmasi');   
}   
Run Code Online (Sandbox Code Playgroud)

但它不起作用.该消息仍然与默认消息相同.我该如何解决这个问题,以便我可以使用自定义消息?

Zah*_*tar 32

如果你使用$this->validate()最简单的,那么你应该编写类似这样的代码.

$rules = [
        'name' => 'required',
        'email' => 'required|email',
        'message' => 'required|max:250',
    ];

    $customMessages = [
        'required' => 'The :attribute field is required.'
    ];

    $this->validate($request, $rules, $customMessages);
Run Code Online (Sandbox Code Playgroud)

  • 我应该用什么来填充 $request 变量? (2认同)

小智 22

Laravel 5.7.*

你也可以试试这样的东西.对于我来说,当您想要验证请求时,这是在方法中制作自定义消息的最简单方法:

public function store()
{
    request()->validate([
        'file' => 'required',
        'type' => 'required'
    ],
    [
        'file.required' => 'You have to choose the file!',
        'type.required' => 'You have to choose type of the file!'
    ]);
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是最容易的,因为我时间紧迫,只需要在一个地方进行。这非常方便,但是如果您需要在多个地方使用自定义消息,则将它们全部放在一个地方会更加谨慎。与在每个验证语句中包含自定义消息的情况相比,它使跟踪更容易并使代码更易读。由于我的用例独特,我赞成您的回答,我想对您说声谢谢(尽管SO建议不要这样做,我也发帖,您需要知道您帮了我的忙,我已及时交付了)。 (2认同)

sta*_*sta 14

对于 Laravel 8.x7.x6.x
定义自定义规则后,您可以在控制器验证中使用它,如下所示:

$validatedData = $request->validate([
       'f_name' => 'required|min:8',
       'l_name' => 'required',
   ],
   [
    'f_name.required'=> 'Your First Name is Required', // custom message
    'f_name.min'=> 'First Name Should be Minimum of 8 Character', // custom message
    'l_name.required'=> 'Your Last Name is Required' // custom message
   ]
);
Run Code Online (Sandbox Code Playgroud)

对于本地化,您可以使用:

['f_name.required'=> trans('user.your first name is required'],
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...


Jig*_*hah 13

您可以提供以下自定义消息:

$rules = array(
            'URL' => 'required|url'
        );    
$messages = array(
                'URL.required' => 'URL is required.'
            );
$validator = Validator::make( $request->all(), $rules, $messages );

if ( $validator->fails() ) 
{
    return [
        'success' => 0, 
        'message' => $validator->errors()->first()
    ];
}
Run Code Online (Sandbox Code Playgroud)

要么

你试过的方式,你错过了Validator::replacer(),取代了:variable

Validator::replacer('custom_validation_rule', function($message, $attribute, $rule, $parameters){
    return str_replace(':foo', $parameters[0], $message);
});
Run Code Online (Sandbox Code Playgroud)

您可以从这里阅读更多信息,并从此处阅读替代品


Kal*_*kat 7

//Here is the shortest way of doing it.
 $request->validate([
     'username' => 'required|unique:Userlogin,username',
     'password' => 'required',
     'email'    => 'required|unique:Userlogin,email'
 ],
 [
     'required'  => 'The :attribute field is required.',
     'unique'    => ':attribute is already used'
 ]);
//The code below will be executed only if validation is correct.
Run Code Online (Sandbox Code Playgroud)


dıl*_*ücü 7

运行以下命令在 Laravel\n \n\xc4\xb1 上创建自定义规则
(假设名称为 CustomRule)

\n
php artisan make:rule CustomRule\n\n
Run Code Online (Sandbox Code Playgroud)\n

结果,创建了命令,例如 PHP 代码

\n
\n

如果规则中没有必需的关键字,则该规则将不起作用

\n
\n
php artisan make:rule CustomRule\n\n
Run Code Online (Sandbox Code Playgroud)\n

到了使用它的时候\n首先,如果我们还没有,我们应该创建一个请求类

\n
php artisan make:request CustomRequest\n
Run Code Online (Sandbox Code Playgroud)\n

自定义请求.php

\n
<?php\n\nnamespace App\\Rules;\n\nuse Illuminate\\Contracts\\Validation\\Rule;\n\nclass CustomRule implements Rule\n{\n    /**\n     * Create a new rule instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Determine if the validation rule passes.\n     *\n     * @param  string  $attribute\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function passes($attribute, $value)\n    {\n        //return  true or false\n    }\n\n    /**\n     * Get the validation error message.\n     *\n     * @return string\n     */\n    public function message()\n    {\n        return \'The validation error message.\';\n    }\n}\n\n\n
Run Code Online (Sandbox Code Playgroud)\n

在您的控制器上,您应该向控制器注入自定义请求

\n

你的控制器方法

\n
class FooController\n{\n    public function bar(CustomRequest $request)\n    {\n        \n    }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n


小智 7

如果您将 Request 作为单独的文件使用:

 public function rules()
 {
    return [
        'preparation_method' => 'required|string',
    ];
 }

public function messages()
{
    return [
        'preparation_method.required' => 'Description is required',
    ];
}
Run Code Online (Sandbox Code Playgroud)

在 Laravel 6+ 中测试


小智 5

$rules = [
  'username' => 'required,unique:Userlogin,username',
  'password' => 'required',
  'email'    => 'required,unique:Userlogin,email'
];

$messages = [
  'required'  => 'The :attribute field is required.',
  'unique'    => ':attribute is already used'
];

$request->validate($rules,$messages);
//only if validation success code below will be executed
Run Code Online (Sandbox Code Playgroud)


vah*_*bet 5

对于那些没有解决此问题的人(在 Laravel 8.x 上测试):

$validated = Validator::make($request->all(),[
   'code' => 'required|numeric'
  ],
  [
    'code.required'=> 'Code is Required', // custom message
    'code.numeric'=> 'Code must be Number', // custom message       
   ]
);

//Check the validation
if ($validated->fails())
{        
    return $validated->errors();
}
Run Code Online (Sandbox Code Playgroud)


SK *_*oke 5

    $rules = [
        'name' => 'required',
        'email' => 'required|email',
        'message' => 'required|max:250',
    ];

    $customMessages = [
        'required' => 'The :attribute field is required.',
        'max' => 'The :attribute field is may not be greater than :max.'
    ];

    $this->validate($request, $rules, $customMessages);
Run Code Online (Sandbox Code Playgroud)