Laravelで、メールアドレスの書式チェックのvalidateルールを作成したかったので、 手順をまとめてみました。
調べてみるとメールアドレスの書式チェックはかなり奥が深いみたいで、 今回はhtmlタグの<input type="email”>と同じルールとしました。 正規表現としては、「{^[a-zA-Z0-9.!#$%&'+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)$}」になります。
色々と甘い所があるかもしれませんが、今回はこちらで進めさせていただきます。
ファイル作成
サービスプロバイダーの追加
以下のコマンドを実行します。
$ php artisan make:provider ValidatorMailAddressServiceProvider
$ vi app/Providers/ValidatorMailAddressServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Validate\MailAddressValidate;
class ValidatorMailAddressServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
\Validator::resolver(function ($translator, $data, $rules, $messages) {
return new MailAddressValidate($translator, $data, $rules, $messages);
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
Validate ruleの実装
わたしの場合はValidateというディレクトリを作成し、 そこにvalidateに関するファイルを格納することにしました。
$ vi app/Validate/MailAddressValidate.php
<?php
namespace App\Validate;
use App;
use Config;
use Log;
class MailAddressValidate extends \Illuminate\Validation\Validator
{
/**
* メールアドレスのバリデート
* @param string $value - 入力値
* @return boolean バリデート結果 (true = 問題なし、 false = 問題あり)
*/
public static function validateMailaddress($attribute, $value, $parameters) {
if (!is_string($value)) {
return false;
}
// メールアドレスの書式チェック。HTMLタグのinput type=emailの条件に合わせる。
if (!preg_match("{^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$}", $value)) {
return false;
}
return true;
}
}
登録
composer.jsonの編集
composer.jsonを編集して、Validateを追加します。
"psr-4": {
"App\\": "app/",
"Validate\\" : "app/Validate/"
}
config/app.phpの編集
続いて、作成したサービスプロバイダを登録します。
'providers' => [
〜〜省略〜〜
// validator
App\Providers\ValidatorMailAddressServiceProvider::class
]
resources/lang/en/validation.php
エラーメッセージを登録します。
return [
〜〜省略〜〜
// original validate
'mail_address' => 'invalid_mail_address.',
'custom' => [
〜〜省略〜〜
];
ここまでで作成と登録関係は終了。
使い方
作成したSampleRequestでvalidateをする場合になります。 この様にruleを指定することで、入力値(mail_address)の諸式チェックができます。
SampleRequestの作成
php artisan make:request SampleRequest
SampleRequest.phpのルール設定例
public function rules()
{
return ['mail_address' => 'mail_address']
}
これで、メールアドレスの書式チェックのvalidatルールを追加ですることができました。