Laravel逆引きTips – Validation

Laravel Laravel

Laravel逆引きTIps一覧へ戻る

ルールの一覧

公式サイト日本語版)にて確認できます。

コントローラーでのバリデーション

class UserController extends Controller
{
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8|confirmed',
        ]);

        // バリデーション成功後の処理
        User::create($validatedData);
    }
}
PHP

フォームリクエストの使用

独立したフォームリクエストクラスを作成し、rules()メソッド内でバリデーションルールを定義します。これにより、コントローラーがスリムになり、バリデーションロジックを再利用できます。

class StoreUserRequest extends FormRequest
{
    public function rules()
    {
        return [
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8|confirmed',
        ];
    }
}
PHP
class UserController extends Controller
{
    public function store(StoreUserRequest $request)
    {
        // バリデーション済みのデータを使用
        $validatedData = $request->validated();
        User::create($validatedData);
    }
}
PHP

カスタムバリデーションルールの作成

Validator::extend('uppercase', function ($attribute, $value, $parameters, $validator) {
    return strtoupper($value) === $value;
});

// 使用例
$request->validate([
    'name' => 'required|uppercase',
]);
PHP

条件付きバリデーション

$request->validate([
    'email' => 'required_if:contact_method,email',
    'phone' => 'required_if:contact_method,phone',
]);
PHP

エラーメッセージのカスタマイズ

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

$validator = Validator::make($request->all(), [
    'name' => 'required|max:255',
    'email' => 'required|email|unique:users',
], $messages);
PHP

バリデーション後の処理

if ($validator->fails()) {
    return redirect('post/create')
                ->withErrors($validator)
                ->withInput();
}

// バリデーション成功後の処理
$validatedData = $validator->validated();
User::create($validatedData);
PHP

Laravel逆引きTIps一覧へ戻る

役にたったと思ったら応援をお願いします m(._.)m

著者

Webエンジニア歴30年、フリーランスバックエンドエンジニア。

PHP歴約30年(Laravel 7年・FuelPHP 5年・CakePHP・自作FW)、
JavaScript歴約20年(React・Vue各4年)。
AWS(EC2 / CloudFront / RDS / API Gateway など)・
GCP(BigQuery)を使ったバックエンド開発を中心に、
複数の事業会社・受託案件でシステム設計から実装・運用まで担当しています。

PHPがバージョン4の時代から書いており、
Laravelが普及する前のフレームワーク乱立期も経験しています。
「昔はこう書いていたが今はこう」という変遷を肌で知っているエンジニアとして、
単なるコマンドの使い方だけでなく、なぜそうするのかの背景まで伝えることを意識して書いています。

このブログでは、実務で実際に詰まった箇所・調べたこと・気づいたことを
そのまま記事にしています。誰かの「詰まり」が解決するきっかけになれば幸いです。

千原 耕司をフォローする

役にたったと思ったら応援をお願いします m(._.)m

Laravel
スポンサーリンク
シェアする
千原 耕司をフォローする
タイトルとURLをコピーしました