Cara membuat uplode File

 

Kalo kalian sudah membuat Controller nya 

Pertama-tama kita buat Controller index nya atau metod index.

protected $model;

    protected $title = 'Perjanjian Sewa';

    protected $view = 'perjanjiansewa.';

    protected $route = 'perjanjiansewa.';

    protected $permission = '-perjanjiansewa';

    public function __construct(PerjanjianSewa $model)

    {

        $this->model = $model;

        View::share('title', $this->title);

        View::share('view', $this->view);

        View::share('route', $this->route);

        View::share('permission', $this->permission);

        $this->middleware('permission:' . 'manage' . $this->permission)->only('index');

        $this->middleware('permission:' . 'create' . $this->permission)->only('create', 'store');

        $this->middleware('permission:' . 'edit' . $this->permission)->only('edit', 'update');

        $this->middleware('permission:' . 'delete' . $this->permission)->only('destroy');

    }

    public function index(Request $request)

    {

        if (\Auth::user()->isAbleTo('manage' . $this->permission)) {

            $lokasipakan = LokasiPakan::orderBy('id', 'asc')->pluck('name', 'id')->toArray();

            if ($request->ajax()) {

                $data = PerjanjianSewa::with('user','lokasi_pakan')->select();

                return DataTables::of($data)

                    ->addColumn('action', function ($data) {

                        return view('datatables.action', [

                            'model' => $data,

                            'can_edit' => 'edit-perjanjiansewa',

                            'can_delete' => 'delete-perjanjiansewa',

                            'form_url' => route('perjanjiansewa.destroy', $data->id),

                            'edit_url' => route('perjanjiansewa.edit', $data->id),

                            'confirm_message' => 'Yakin mau menghapus ' . $data->name . '?'

                        ]);

                    })

                    ->editColumn('mulai_perjanjian', function ($data) {

                        return date('j F Y H:i:s', strtotime($data->mulai_perjanjian));

                    })

                    ->editColumn('selesai_perjanjian', function ($data) {

                        return date('j F Y H:i:s', strtotime($data->selesai_perjanjian));

                    })

                    ->editColumn('file', function($data){

                        return '<a href="'.asset('storage/file/'.$data->file).'" target="_blank">File Lampiran</a>';

                    })

                    ->addIndexColumn()

                    ->setRowId(function ($data) {

                        return $data->id;

                    })

                    ->rawColumns(['status', 'file'])

                    ->make(true);

            }

            return view($this->view . 'index')->with(compact('lokasipakan'));

        } else {

            return redirect()->back()->with('error', 'Permission denied.');

        }

    }

Kita lanjut ke pembuatan view index.blade.php 

@extends('layouts.app')

@section('page-title')

{{$title}}

@endsection

@section('content')

    <!-- end page-title -->

    <div class="row">

        <div class="col-12">

            <div class="card m-b-30">

                <div class="card-body">

                    @permission('create'.$permission)

                        <a class="btn btn-primary waves-effect waves-light" href="{{ route($route.'create') }}">

                            <i class="mdi mdi-gamepad-round"></i> Tambah

                        </a>

                        <hr>

                    @endpermission

                    <br>

                    <br>

                    <table class="table-sm table-striped table-bordered dt-responsive nowrap data-table" style="border-collapse: collapse; border-spacing: 0; width: 100%;">

                        <thead class="bg-primary text-white">

                            <tr>

                                <th>No</th>

                                <th>User</th>

                                <th>Lokasi Pakan</th>

                                <th>Mulai Perjanjian</th>

                                <th>Selesai Perjanjian</th>

                                <th>File</th>

                                <th>Action</th>

                            </tr>

                        </thead>

                        <tbody>

                        </tbody>

                    </table>

                </div>

            </div>

        </div> <!-- end col -->

    </div>

    <!-- end row -->

@endsection

@section('script')

<script type="text/javascript">

    $('.data-table').DataTable({

        processing: true,

        serverSide: true,

        ajax: "{{ route($route.'index') }}",

        columns: [

            { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false},

            { data: 'user.name', name: 'user.name' },

            { data: 'lokasi_pakan.name', name: 'lokasi_pakan.name' },

            { data: 'mulai_perjanjian', name: 'mulai_perjanjian'},

            { data: 'selesai_perjanjian', name: 'selesai_perjanjian'},

            { data: 'file', name: 'file'},

            { data: 'action', name: 'action', orderable: false, searchable: false},

        ],

        order: [[0, 'desc']],

    });

</script>

@endsection
Kiata lanjut ke Metod create nya .
public function create()

    {

        if (\Auth::user()->isAbleTo('create' . $this->permission)) {

            $lokasipakan = LokasiPakan::orderBy('id', 'asc')->pluck('name', 'id')->toArray();

            return view($this->view . 'create')->with(compact('lokasipakan'));

        } else {

            return redirect()->back()->with('error', __('Permission denied.'));

        }

    }

Sekarang kita buat metod store nya .

public function store(Request $request)

    {

        try {

            $validator = \Validator::make(

                $request->all(),

                [

                    'lokasipakan' => 'required',

                    'mulai_perjanjian' => 'required',

                    'selesai_perjanjian' => 'required',

                    'file' => 'required',

                ],

                [

                    'lokasipakan.required' => 'Silahkan Pilih Lokasi Pakan !',

                    'mulai_perjanjian.required' => 'Silahkan Masukan Mulai Perjanjian !',

                    'selesai_perjanjian.required' => 'Silahkan Masukan Selesai Perjanjian  !',

                    'file.required' => 'Silahkan Masukan File  !',

                ]

            );

            if ($validator->fails()) {

                $messages = $validator->getMessageBag();

                return redirect()->route($this->route . 'create', $request->type)->with('error', $messages->first())->withInput();

                // throw new \Exception($messages->first());

            }

            $perjanjiansewa = new $this->model();

            $perjanjiansewa->user_id = auth()->user()->id;

            $perjanjiansewa->lokasi_pakan_id = $request->lokasipakan;

            $perjanjiansewa->mulai_perjanjian = date('Y-m-d H:i:s', strtotime($request->mulai_perjanjian));

            $perjanjiansewa->selesai_perjanjian = date('Y-m-d H:i:s', strtotime($request->selesai_perjanjian));

            if ($request->file('file')) {

                $uploadFile = $request->file('file');

                $fileName = $uploadFile->hashName();

                $file = $uploadFile->store('file', 'public');

                $perjanjiansewa->file = $fileName;

            }

            $perjanjiansewa->save();

            return redirect()->route($this->route . 'index')->with('success', 'Perjanjian Sewa Berhasil disimpan !');

        } catch (\Exception $err) {

            return redirect()->route($this->route . 'create')->with('error', $err->getMessage());

        }

    }

Kita lanjut ke Metod edit nya.

public function edit($id)

    {

        try{

            $data = $this->model::find($id);

            $lokasipakan = LokasiPakan::orderBy('id', 'asc')->pluck('name', 'id')->toArray();

            $data->mulai_perjanjian = date('d-m-Y H:i', strtotime($data->mulai_perjanjian));

            $data->selesai_perjanjian = date('d-m-Y H:i', strtotime($data->selesai_perjanjian));

            $file = \Storage::url('public/file/');

            return view($this->view . 'edit', compact('data', 'file', 'lokasipakan'));

        } catch (\Exception $err) {

            return redirect()->back()->with('error',  $err->getMessage());

        }

    }

Sekarang kita buat metod Update nya.

public function update(Request $request, $id)

    {

        try {

            $validator = \Validator::make(

                $request->all(),

                [

                    'lokasipakan' => 'required',

                    'mulai_perjanjian' => 'required',

                    'selesai_perjanjian' => 'required',

                ],

                [

                    'lokasipakan.required' => 'Silahkan Pilih Lokasi Pakan !',

                    'mulai_perjanjian.required' => 'Silahkan Masukan Mulai Perjanjian !',

                    'selesai_perjanjian.required' => 'Silahkan Masukan Selesai Perjanjian  !',

                ]

            );

            if ($validator->fails()) {

                $messages = $validator->getMessageBag();

                return redirect()->route($this->route . 'edit', $id)->with('error', $messages->first())->withInput();

                // throw new \Exception($messages->first());

            }

            // dd($request->all());

            $perjanjiansewa = $this->model::find($id);

            $perjanjiansewa->user_id = auth()->user()->id;

            $perjanjiansewa->lokasi_pakan_id = $request->lokasipakan;

            $perjanjiansewa->mulai_perjanjian = date('Y-m-d H:i:s', strtotime($request->mulai_perjanjian));

            $perjanjiansewa->selesai_perjanjian = date('Y-m-d H:i:s', strtotime($request->selesai_perjanjian));

            // $perjanjiansewa->file = $request->file;

            if ($request->file('file')) {

                if ($perjanjiansewa->file && file_exists(storage_path('app/public/file/' . $perjanjiansewa->file))) {

                    \Storage::delete('public/file/' . $perjanjiansewa->file);

                }

                $uploadfile = $request->file('file');

                $file = $uploadfile->hashName();

                $uploadfile->store('file', 'public');

                $perjanjiansewa->file = $file;

            }

            $perjanjiansewa->update();

            return redirect()->route($this->route . 'index')->with('success', 'Perjanjian Sewa Berhasil diupdate !');

        } catch (\Exception $err) {

            return redirect()->route($this->route . 'edit', $id)->with('error', $err->getMessage());

        }

    }

Kita lanjut ke metod destroy nya .

public function destroy($id)

    {

        try {

            $data = $this->model::find($id);

            $imagePath = storage_path("app/public/file/{$data->file}");

            if (File::exists($imagePath)) {

                File::delete($imagePath);

            }

            $data->delete();

            return redirect()->route($this->route . 'index')->with('success', 'Perjanjian Sewa Berhasil dihapus !');

        } catch (\Exception $err) {

            return redirect()->route($this->route . 'index')->with('error', $err->getMessage());

        }

    }

Kita lanjut membuat view Create nya create.blade.php.

@extends('layouts.app')

@section('page-title')

{{'Tambah '.$title}}

@endsection

@section('style')

<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" rel="stylesheet"/>

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css" rel="stylesheet"/>

<link href="{{ asset('css/bootstrap-fileinput.css') }}" rel="stylesheet" type="text/css"/>

@endsection

@section('content')

<!-- end page-title -->

<div class="row">

    <div class="col-lg-12">

        <div class="card faq-box border-primary m-b-30">

            <div class="card-body">

                <form action="{{ route($route.'store') }}" method="POST" enctype="multipart/form-data">

                    @csrf

                    <div class="form-group ">

                        <label class="col-sm-8 control-label" for="example-input-normal">Lokasi Pakan</label>

                        <div class="col-sm-12">

                            {!! Form::select('lokasipakan', ['' => 'Silahkan Pilih Lokasi Pakan']+$lokasipakan, null,['class' => 'form-control select2']) !!}

                        </div>

                    </div>

                    <div class="form-group">

                        <label class="col-sm-8 control-label" for="example-input-normal">Mulai Perjanjian</label>

                        <div class="col-sm-12">

                            {!! Form::text('mulai_perjanjian', null, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Mulai Perjanjian', 'autocomplete' => 'off']) !!}

                        </div>

                    </div>

                    <div class="form-group">

                        <label class="col-sm-8 control-label" for="example-input-normal">Selesai Perjanjian</label>

                        <div class="col-sm-12">

                            {!! Form::text('selesai_perjanjian', null, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Selesai Perjanjian', 'autocomplete' => 'off']) !!}

                        </div>

                    </div>

                    <div class="col-lg-6">

                        <div class="form-group">

                            <label class="col-sm-8 control-label">File</label>

                            <div class="col-sm-12">

                                <div class="fileinput fileinput-new" data-provides="fileinput">

                                    <div class="fileinput-new thumbnail" style="height: 150px;">

                                    </div>

                                    <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 10px;"></div>

                                    <div>

                                        <span class="btn btn-primary btn-file">

                                            <span class="fileinput-new"> Pilih Gambar </span>

                                            <span class="fileinput-exists"> Ubah </span>

                                            <input type="file" name="file">

                                        </span>

                                        <a href="javascript:void(0);" class="btn btn-danger fileinput-exists" data-dismiss="fileinput"> Hapus </a>

                                    </div>

                                </div>

                            </div>

                        </div>

                    </div>

                    <div class="col-sm-offset-2 text-right">

                        <button type="submit" class="btn btn-primary save">Simpan</button>

                        <a href="{{ route($route.'index')}}" class="btn btn-secondary"> Kembali</a>

                    </div>

                </form>

            </div>

        </div>

    </div>

</div>

@endsection

@section('script')

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>

<script src="{{ asset('js/bootstrap-fileinput.js') }}" type="text/javascript"></script>

<script type="text/javascript">

    $('.datetimepicker').datetimepicker({

        format: 'DD-MM-YYYY',

        locale: 'ru',

        icons: {

            previous: "fas fa-chevron-left",

            next: "fas fa-chevron-right",

            up: "fa fa-arrow-up",

            down: "fa fa-arrow-down"

        },

        sideBySide: true,

        showClose: true

    });

</script>

@endsection
Sekarang Kita lanjut ke view edit nya, edit.blade.php
@extends('layouts.app')

@section('page-title')

{{'Edit '.$title}}

@endsection

@section('style')

<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" rel="stylesheet"/>

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css" rel="stylesheet"/>

<link href="{{ asset('css/bootstrap-fileinput.css') }}" rel="stylesheet" type="text/css"/>

@endsection

@section('content')

<!-- end page-title -->

<div class="row">

    <div class="col-lg-12">

        <div class="card faq-box border-primary m-b-30">

            <div class="card-body">

                <form action="{{ route($route.'update', $data->id) }}" method="POST" enctype="multipart/form-data">

                    @csrf

                    @method('put')

                    <div class="form-group ">

                        <label class="col-sm-8 control-label" for="example-input-normal">Lokasi Pakan</label>

                        <div class="col-sm-12">

                            {!! Form::select('lokasipakan', ['' => 'Silahkan Pilih Lokasi Pakan']+$lokasipakan, $data->lokasi_pakan_id,['class' => 'form-control select2']) !!}

                        </div>

                    </div>

                    <div class="form-group">

                        <label class="col-sm-8 control-label" for="example-input-normal">Mulai Perjanjian</label>

                        <div class="col-sm-12">

                            {!! Form::text('mulai_perjanjian', $data->mulai_perjanjian, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Mulai Perjanjian', 'autocomplete' => 'off']) !!}

                        </div>

                    </div>

                    <div class="form-group">

                        <label class="col-sm-8 control-label" for="example-input-normal">Selesai Perjanjian</label>

                        <div class="col-sm-12">

                            {!! Form::text('selesai_perjanjian', $data->selesai_perjanjian, ['class'=>'form-control datetimepicker', 'placeholder' => 'Masukkan Selesai Perjanjian', 'autocomplete' => 'off']) !!}

                        </div>

                    </div>

                    <div class="col-lg-6">

                        <div class="form-group">

                            <label class="col-sm-8 control-label">File</label>

                            <div class="col-sm-12">

                                <div class="fileinput fileinput-new" data-provides="fileinput">

                                    <div class="fileinput-new thumbnail" style="height: 150px;">

                                        <img src="{{$file.$data->file}}" alt="">

                                    </div>

                                    <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 10px;"></div>

                                    <div>

                                        <span class="btn btn-primary btn-file">

                                            <span class="fileinput-new"> Pilih Gambar </span>

                                            <span class="fileinput-exists"> Ubah </span>

                                            <input type="file" name="file">

                                        </span>

                                        <a href="javascript:void(0);" class="btn btn-danger fileinput-exists" data-dismiss="fileinput"> Hapus </a>

                                    </div>

                                </div>

                            </div>

                        </div>

                    </div>

                    <div class="col-sm-offset-2 text-right">

                        <button type="submit" class="btn btn-primary save">Simpan</button>

                        <a href="{{ route($route.'index')}}" class="btn btn-secondary"> Kembali</a>

                    </div>

                </form>

            </div>

        </div>

    </div>

</div>

@endsection

@section('script')

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>

<script src="{{ asset('js/bootstrap-fileinput.js') }}" type="text/javascript"></script>

<script type="text/javascript">

    $('.datetimepicker').datetimepicker({

        format: 'DD-MM-YYYY',

        locale: 'ru',

        icons: {

            previous: "fas fa-chevron-left",

            next: "fas fa-chevron-right",

            up: "fa fa-arrow-up",

            down: "fa fa-arrow-down"

        },

        sideBySide: true,

        showClose: true

    });

</script>

@endsection

 

Related Articles

Comments