Help us understand the problem. What is going on with this article?

Laravelで画像サイズのバリデーション

More than 3 years have passed since last update.

この記事はオールアバウトアドベントカレンダー11日目の記事になります。
準備不足につき小ネタで失礼します。

Laravelには強力なValidation機能がありますが、いつの間にか画像サイズのValidationも出来るようになっていて、便利だなと思ったのでやってみました。
ドキュメントを見る限り、5.2から追加されたようです。

準備

画像をアップロードする簡単なフォームを作ります。Laravel5.3で試しています。

routes/web.php
Route::get('post/create', 'PostController@create');
Route::post('post', 'PostController@store');
app/Http/Controllers/PostController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    public function create()
    {
        return view('post.create');
    }

    public function store(Request $request)
    {
        // バリデーションと画像保存とかの処理を書く
    }
}
resources/views/post/create.blade.php
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<form method="POST" action="/post" enctype="multipart/form-data">
    <input type="file" name="img_upload">
    {{ csrf_field() }}
    <input type="submit">
</form>

Validationルールの記述

画像サイズのValidationにはdimensionsというルールを使用します。
使用できるパラメータはmin_width, max_width, min_height, max_height, width, height, ratioです。画像サイズの最大値、最小値、ジャストサイズ、比率を指定できます。比率の場合は横/縦で指定します。

app/Http/Controllers/PostController.php
    public function store(Request $request)
    {
        $this->validate($request, [
             'img_upload' => 'dimensions:width=320,height=240'
        ]);
    }

条件を満たさない画像をアップロードしようとすると、以下のようにエラーが出ました!

dddc602b76fab3c3280cf7dd03482bee.png

yamato
Findyでエンジニア兼プロダクトマネージャー見習いをしています。野球、 音楽フェス、散歩、サウナ、お酒、焼き鳥が好きです。
https://findy-code.io/
findy-inc
エンジニア・採用担当者向けの転職サービスや案件紹介サービスを提供しています。
https://findy-code.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした