この記事はオールアバウトアドベントカレンダー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'
]);
}
条件を満たさない画像をアップロードしようとすると、以下のようにエラーが出ました!