Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

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

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

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
10
Help us understand the problem. What are the problem?