NGワードのカスタムバリデーションルールを作る [Laravel]
Laravelで禁止用語(NGワード)のバリデーション処理を行うカスタムルールのファイルを作る方法と使い方です。
関連記事:独自のバリデーションを作成する
1. カスタムルールのファイル作成
php artisan make:rule NgWord
app\RulesにNgWord.phpが作成されます。
2. NgWord.php
app\Rules\NgWord.php
<?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class NgWord implements Rule { public function __construct($column) { $this->column = $column; } public function passes($attribute, $value) { // 禁止用語 // ※各自で追加して下さい $NG_WORDS =[ "カジノ", "ギャンブル" ]; // 判定 foreach($NG_WORDS as $word) { // 禁止用語が含まれていれば if(strpos($value, $word) !== false){ return false; } } return true; } public function message() { return trans('validation.attributes.' . $this->column) . 'に禁止用語が含まれています。'; } }
3.使い方
resources\lang\ja\validation.php
validation.phpは日本語訳を使用してattributesに次を追記する。
'attributes' => [ "name" => "名前", "url" => "ホームページ", "body" => "本文", ],
app\Answer.php
[モデル]
<?php namespace App; use Illuminate\Database\Eloquent\Model; // 追加分 use App\Rules\NgWord; class Answer extends Model { protected $guarded = array('id'); public static function Rules() { return [ 'name' => ['required','max:50', new NgWord('name')], 'url' => 'nullable|url|max:250', 'body' => ['required', new NgWord('body')] ]; } }
app\Http\Controllers\AnswerController.php
[コントローラー]
// 追加分 use App\Answer; public function store(Request $request) { // バリデーション $request->validate(Answer::Rules()); }
全体のソースはGitHubにあげています。
スポンサーリンク
関連記事
公開日:2020年11月16日 最終更新日:2020年12月09日
記事NO:02851