Edited at

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

More than 1 year has 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'
]);
}

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