Laravelで 画像リサイズと画像保存を簡易にできる方法

色々な画像作成のための方法ありましたが、どれもうまくいかなかったのですが、以下のコンテンツを参考にしてみますと、なんとかうまくいきました。

[海外Youtube](https://www.youtube.com/watch?v=jy2SUxx6uHc&t=396s)

ほぼ翻訳という形になりますが、ご了承ください。

今回はユーザーのプロファイル機能を作ります。

1,以下のコマンドで、Auth機能を追加してください。

```
php artisan make:auth
```
2 

```database/migrations/.....create_users_table.php
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('avatar')->default('default.jpg');
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

```
注目してほしいのは、

```
$table->string('avatar')->default('default.jpg');
```

を追加しているということです。これは、ファイルをviewに引っ張ってくるときに有効になります。

3.envの設定を、データベースに合わせるようにしてください

```
DB_DATABASE=(自分のデータベースの名前)
DB_USERNAME=（データベースに入るためのユーザの名前）
#DB_PASSWORD=secret(ローカル開発環境ならば、パスワードを設定しなくても大丈夫だと思います)
```

4, 以下のコマンドをうって、migrationします

```
php artisan migrate:refresh
```

5, web.phpで、GETメソッドを追加してください

```route/web.php
...（省略)
Route::get('profile', 'UserController@profile');
...
```

6,UserControllerを作成し、profileメソッドを追加してください。

```app/Http/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Image;

class UserController extends Controller
{
    //
    public function profile(){
    	return view('profile', array('user' => Auth::user()) );
    }
}
```

7, viewである、profile.blade.phpを作成します。

```profile.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <img src="/uploads/avatars/{{ $user->avatar }}" style="width:150px; height:150px; float:left; border-radius:50%; margin-right:25px;">
            <h2>{{ $user->name }}'s Profile</h2>
            <form enctype="multipart/form-data" action="/profile" method="POST">
                <label>Update Profile Image</label>
                <input type="file" name="avatar">
                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                <input type="submit" class="pull-right btn btn-sm btn-primary">
            </form>
        </div>
    </div>
</div>
@endsection
```

8 　app/Http/routes/web.phpにPOSTメソッドを追加します

```app/Http/routes/web.php
Route::post('profile', 'UserController@update_avatar');
```

9  Image Intervention Packageを installする
リンクは[こちら](http://image.intervention.io/)

10 UserControllerに、update_avater メソッドを追加する

```app/Http/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Image;

class UserController extends Controller
{
    //
    public function profile(){
    	return view('profile', array('user' => Auth::user()) );
    }

    public function update_avatar(Request $request){

    	// Handle the user upload of avatar
    	if($request->hasFile('avatar')){
    		$avatar = $request->file('avatar');
    		$filename = time() . '.' . $avatar->getClientOriginalExtension();
    		Image::make($avatar)->resize(300, 300)->save( public_path('/uploads/avatars/' . $filename ) );

    		$user = Auth::user();
    		$user->avatar = $filename;
    		$user->save();
    	}

    	return view('profile', array('user' => Auth::user()) );

    }
}
```

11 ```resources/views/layouts/app.blade.php```にimageを追加する

```resources/views/layouts/app.blade.php

<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" style="position:relative; padding-left:50px;">
    <img src="/uploads/avatars/{{ Auth::user()->avatar }}" style="width:32px; height:32px; position:absolute; top:10px; left:10px; border-radius:50%">
    {{ Auth::user()->name }} <span class="caret"></span>
</a>
```


・下書きして、突如思い出して書くまで一ヶ月以上経っているので、最初の意図など忘れてしまって、9くらいからもしかしたら文脈とかよくわからないところもあるかと思います。
わからないことありましたら、お気軽にコメントしていただけると、幸いです。