LoginSignup
19
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-11

この記事はオールアバウトアドベントカレンダー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

19
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
10