Laravel

Laravel5 画像アップロード

優 Laravel

Laravel

Laravelでよく使う処理を一通りまとめていこうと思います。

今回は画像アップロードです!

 

 

画像を保存するストレージへのリンクを作成

 

php artisan storage:link

これでstorageフォルダに公開ディレクトリpublicへのリンクが張れて公開が可能になります。

 

 

プロジェクトに移動してプロフィール画像を保存するディレクトリの作成

cd project/
mkdir ./public/storage/profile

 

 

 

 

コントローラの作成

php artisan make:controller PeopleController

 

 

project/app/Http/Controllers/PersonController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests\PersonRequest;
use App\Models\Person;

class PersonController extends Controller
{
    public function user_list(){
        $people = new Person();
        $users = $people->select();
        return view('users.list', ['users' => $users]);
    }

    public function user_add(){
        return view('users.add');
    }

    public function user_create(Request $request){
        $people = new Person();
        $people->create($request);
        return redirect('/');
    }
}

 

モデルの作成

mkdir ./app/Models
php artisan make:model models/Person

 

追加を実行するcreate()メソッドをModelに作ります。

 

project/app/Models/Person.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class Person extends Model
{
    protected $table = 'people';
    protected $guarded = array('id');

    public function select(){
        $users = DB::table('people')
                     ->join('category'   , 'people.category_id', '=', 'category.id' )
                     ->join('prefectures', 'people.prefectures_id', '=', 'prefectures.id' )
                     ->join('generation', 'people.generation_id', '=', 'generation.id' )
                     ->select('people.*', 'category.category_name', 'prefectures.prefectures_name', 'generation.generation_name')
                     ->orderBy('people.updated_at', 'DESC')
                     ->paginate(3);
        return $users;
    }


    public function create($request){
        $param = [
            "people_name"    => $request->name,
            "generation_id"  => $request->generation,
            "category_id"    => $request->category,
            "prefectures_id" => $request->prefectures,
            "password"       => $request->password,
            "email"          => $request->email,
            'created_at'     => now(),
            'updated_at'     => now(),
        ];

        if(isset($request->file))
        {
            //画像を保存
            $param["image"] = $request->file('image')->getClientOriginalName();
            $request->file('image')->storeAs('profile', $param['image'], 'public');
        }else{
            $param["image"] = "";
        }

        //DBに保存
        DB::insert('INSERT INTO people (people_name, generation_id, category_id, prefectures_id, comment, image, password, email, created_at, updated_at)
                                VALUES(:people_name, :generation_id, :category_id, :prefectures_id, :comment, :image, :password, :email, :created_at, :updated_at)', $param);
     }
}

 

ビューの作成

 

フォーム作成用のパッケージをインストールする

$ vi /var/www/vhosts/example.net/httpdocs/project/composer.json

(略)

    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.7.*",
        "laravel/tinker": "^1.0",
        "laravelcollective/html": "~5.0" ←追加
    },

(略)

 

project]$ composer update

 

 

project/resources/views/users/add.blade.php

(略)

  <table class="table table-striped table-hover">
  <thead>
  </thead>
  {{Form::open(['action' => 'PersonController@user_create', 'files' => true])}}
      {{ csrf_field() }}
      //画像以外の入力項目は省略しています。
      <tr><th>画像</th><td>{{ Form::file('image') }}</td></tr>
      <tr><th></th><td>{{Form::submit()}}</td></tr>
  {{Form::close()}}
  </tbody>
  </table>

(略)

 

 

これで画像を表示させることが出来る

<img class="card-img-top" width="90" height="115" src="/images/画像名" alt="">

 

実際はforeachなどで回して取得したり、id指定したり。

DBに画像の値が入っていない場合はnoimage.jpgを表示させる処理も。

@foreach($users as $user)

    @if($user->image == null)
    <td width="10%"><img class="card-img-top" width="90" height="115" src="/storage/profile/noimage.jpg" alt=""></td>
    @else
    <td width="10%"><img class="card-img-top" width="90" height="115" src="/storage/profile/{{ $user->image }}" alt=""></td>
    @endif

@endforeach

 

ルーティングの設定

 

project/routes/web.php

Route::get('/add',      'PersonController@user_add');
Route::post('/add',     'PersonController@user_create');

 

http://ホスト名/add

 

お疲れ様です。

 

 

Laravel
最新情報をチェックしよう!
>システム構築・保守に特化した会社です。

システム構築・保守に特化した会社です。

システムの構築・保守運用「システムガーディアン」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG