Wednesday, August 3, 2016

Laravel 5.2 සිංහලෙන් - User profile with image

යාළුවනේ අද අපි බලමු user profile එකක් user image එකත් එක්ක හදාගන්නේ කොහොමද කියලා.

මුලින්ම user table එකට image එකේ නම save කරන්න field එකක් දාගන්න ඕන.
<?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('nic')->unique();
            $table->date('birthday');
            $table->string('address');
            $table->string('email')->unique();
            $table->string('password');
            $table->string('avatar')->default('default.jpg');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('users');
    }
}
දැන් පහල තියෙන routes දෙක අපේ project එකේ route file එකේ auth middleware group එක ඇතුලට දා ගන්න ඕන.
Route::group(['middleware'=> ['auth']], function() {

 Route::get('/home', 'HomeController@index');
 Route::get('/profile', 'UserController@profile');
 Route::post('profile1', 'UserController@upateAvatar');
});
දැන් profile view එක හදාගන්න තියෙන්නේ.ඊට කලින් /core/public/uploads/ වල avatar කියලා folder එකක් හදාගන්න ඕන. එකේ තමයි අපි images save කරගන්නේ. /core/public/ folder එක ඇතුලේ  uploads folder එක නැත්නම් එකත් හදාගන්න 

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <h2>{{ $user->name }}'s Profile</h2>
            <img src="/Laravel_5_2_exam1_7_21/core/public/uploads/avatar/{{ $user->avatar }}" style="width:150px; height:150px; float:left; border-radius:50%; margin-right:25px;">
            
            <form enctype="multipart/form-data" role="form" class="form-horizontal" method="POST" action="{{URL::to('profile1')}}">
                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                <label>Update Profile Image</label>
                <input type="file" name="avatar" id="avatar">
                <input type="hidden" name="is_postpone" value="1"/>
                <button type="submit" class="pull-right btn btn-default">Submit</button>
            </form>
        </div>
    </div>
</div>
@endsection
අපි image save කරන්න අපි image intervention කියන package එක භාවිතා කරනවා. එකේ  image resize , blurring වගේ function තියෙනවා.
http://image.intervention.io/getting_started/installation

cmd එකේ පහල command run කරන්න. ඊට කලින් composer.json එකේ require යටතේ තියෙන framework line එක අයින් කරන්න. මොකද composer එක update කරනකොට framework එක update උනොත් laravel authentication වැඩකරන්නේ නැතිව යනවා.

composer require intervention/image;
composer update; 
දැන් තියෙන්නේ config කරන එක. මේ පහලින් තියෙන lines ටික config/app.php file එකට දාන්න.

'providers' => [ 
      Intervention\Image\ImageServiceProvider::class;
]

'aliases' => [ 
     'Image' => Intervention\Image\Facades\Image::class;
]

දැන් UserController කියන නමින්. controller එක හදාගන්න ඕන. එක පහල විදියට වෙනස් කරන්න.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

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

    public function upateAvatar(Request $request)
    {
     if($request->hasFile('avatar')){
      $avatar=$request->file('avatar');
      $filename=time().'.'.$avatar->getClientOriginalExtension();
            $filepath='/uploads/avatar/';
      Image::make($avatar)->resize(300,300)->save(public_path($filepath.$filename));
      $user=Auth::user();
      $user->avatar=$filename;
      $user->save();
     }

     $user=Auth::user(); 
     return view('profile',compact('user'));
    }
}

දැන් ඔක්කොම වගේ හරි. අහ් user avatar එක core\resources\views\layouts\app.blade.php  වල dropdown එකට අපේ avatar image display line එඅ දාන්න.

<ul class="nav navbar-nav navbar-right">
                    <!-- Authentication Links -->
                    @if (Auth::guest())
                        <li><a href="{{ url('/login') }}">Login</a></li>
                        <li><a href="{{ url('/register') }}">Register</a></li>
                    @else
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" style="position:relative; padding-left:50px">
                                <img src="/Laravel_5_2_exam1_7_21/core/public/uploads/avatar/{{ Auth::user()->avatar }}" style="width:32px; height=32px; position:absolate; top:10px; left:10px; border-radius:50%">
                                {{ Auth::user()->name }} <span class="caret"></span>
                            </a>

                            <ul class="dropdown-menu" role="menu">
                                <li><a href="{{ url('/profile') }}"><i class="fa fa-btn fa-user"></i>Profile</a></li>
                                <li><a href="{{ url('/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
                            </ul>
                        </li>
                    @endif
                </ul>
දැන් හරි.

මේ ලිපිය ප්‍රයෝජනවත් කියලා හිතෙනවනම් මේ ලිපිය Share කරලා යාළුවන්ටත් කියන්න. Comment එකක් දාන්නත් අමතක කරන්න එපා. ජය වේවා..!!   









Share/Bookmark

0 comments:

Post a Comment