Showing results for “laravel”

12 results found

  • สร้าง Helpers เองใน Laravel

    Article
    Save Pongsiri 1 month ago

    อย่างที่รู้กันว่า Laravel มี helpers เริ่มต้นมาให้เราใช้กันอยู่แล้ว (ดูคู่มีได้ที่ https://laravel.com/docs/5.7/helpers)แต่บางโปรเจคเราอาจต้องสร้าง helper ขึ้นมาเอง เพื่อใช้งานกับเฉพาะบางอย่างกับโปรเจคนั้นๆ โดยแนะนำให้สร้างไฟล์ .php ไว้ที่โฟลเดอร์ app เราอาจจะตั้งชื่อไฟล์ว่า app/helpers.php ก็ได้นะจากนั้นก็ตั้งค่าให้ Laravel โหลดไฟล์นี้ก่อนทำอย่างอื่น โดยการเปิดไฟล์ composer.json แล้วหาในส่วนของ autoload จะเห็นหน้าตาประมาณนี้... "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, ...เราจะทำงานเพิ่มชื่อไฟล์ที่เราพึ่งสร้างเข้าไป... "autoload": { "files": [ "app/helpers.php" ], "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } }, ...แล้วก็ dump composer ใหม่ด้วยครับcomposer dump-autoloadตอนนี้ก็ถือว่าไฟล์ Helpers ได้ถูกต้อง autoload ไว้แล้ว เรามาก็ลองสร้าง function ไว้ที่ไฟล์ app/Helpers.php ของเรากัน ตัวอย่างด้านบนเป็น function ไว้เช็คชื่อ Route ที่กำลังเปิดอยู่ เพื่อที่เราจะเอาไปใช้ใส่ class ของ css เวลาที่จะทำให้ลิงค์นั้นมัน active (ดูว่า URL ที่กำลังเปิดอยู่มีชื่อ Route ว่า ... จริงมั้ย? ถ้าใช่ให้ return คำว่า "active" ออกมา)เอาไปใช้ที่ไฟล์ blade ได้เลยนี่เป็นตัวอย่าง helper นึงนะครับ เราสามารถสร้าง helper เองกันได้เลยโดยเพิ่ม function ไว้ที่ไฟล์ app/helpers.php นั่นแหละ (เขียนเช็คสักหน่อยว่ามีฟังก์ชั่นนี้หรือยังด้วยนะ) ที่นี่เราก็มี helpers ของตัวเองสำหรับโปรเจคของเรากันแล้ว

  • วิธีรัน Laravel บนแชร์โฮส แบบไม่ต้อง /public

    Topic
    Save Pongsiri 2 months ago

    เมื่อเราต้องอัปโปรเจค Laravel ของเราขึ้นไปโฮสที่เป็นแชร์โฮสที่มีโฟลเดอร์ public_html มาให้เราอัพเว็บได้อย่างเดียว สิ่งที่เราต้องทำคือ ถ้าเราสามารถอัปไฟล์นอกโฟลเดอร์ public_html ได้ เราก็อัปขึ้นไปที่โฟลเดอร์นอก public_html แล้วเปลี่ยนชื่อโฟลเดอร์ public ใน laravel เป็น public_html แทนก็ได้ แต่ถ้าเราไม่มีสิทธิ์อัปไฟล์นอกโฟลเดอร์ public_html แล้วละก็ ให้ใช้วิธีนี้เป็นวิธีสุดท้าย (เพราะความปลอดภัยมันน้อยกว่า)1. ย้ายทุกอย่างจากโฟลเดอร์ /public ออกมาอยู่ในโฟลเดอร์โปรเจค 2. เปิดไฟล์ index.php ขึ้นมา แล้วแก้ไขตามนี้require __DIR__.'/bootstrap/autoload.php';$app = require_once DIR.'/../bootstrap/app.php';

  • วิธีเซ็ต .htaccess เมื่ออัพ laravel ขึ้น cPanel

    Topic
    Save Pongsiri 5 months ago

    cPanel ใช้ apache เป็นเว็บเซิร์ฟเวอร์อยู่แล้วดังนั้นแก้ไขไฟล์ .htaccessRewriteEngine OnOptions +FollowSymLinksRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^ index.php [L]RewriteRule ^(.*)$ public/$1 [L]

  • Laravel วิธีตั้งค่าให้เป็น https เมื่ออยู่บน production

    Topic
    Save Pongsiri 6 months ago

    <?phpnamespace App\Providers; ...use Illuminate\Support\Facades\Schema;... class AppServiceProvider extends ServiceProvider{    /**     * Bootstrap any application services.     *     * @return void     */    public function boot()    {        ...    }    /**     * Register any application services.     *     * @return void     */    public function register()    {         if (config('app.env') == 'production') {            $this->app['url']->forceScheme('https');        }    }}

  • วิธีเพิ่มคำสั่ง laravel ใน terminal

    Topic
    Save Pongsiri 6 months ago

    1. เปิด terminal แล้วรันคำสั่งแก้ไขไฟล์ .bash_profilenano ~/.bash_profile2. แล้วเพิ่มบรรทัดนี้ลงไปexport PATH="~/.composer/vendor/bin:$PATH"3. กด control + x และพิมพ์ y เพื่อบันทึก4. ปิดและเปิด Terminal ใหม่ ก็จะให้คำสั่ง laravel ได้แล้วครับlaravel new yourprojectname

  • วิธีรัน serve ของ laravel ให้เครื่องอื่นเปิดดูได้

    Topic
    Save Pongsiri 6 months ago

    sudo php artisan serve --host 192.168.1.101 --port 80

  • วิธีแก้ปัญหา paginator หน้าอื่นๆ ไม่เป็น https ใน laravel

    Article
    Save Pongsiri 7 months ago

    กรณีนี้เกิดจาก forceSchema('https') ที่เราตั้งค่าไว้เพื่อให้เปลี่ยนทุกอย่างเป็น https มันไม่ส่งผลกับ url ใน paginator เมื่อมันมีพวก X-FORWARDED อยู่นะสิ ดังนั้นทางแก้ของเราก็คือสร้าง middleware ขึ้นมาสำหรับตั้งค่าเชื่อถือ Proxy ของเราครับตั้งชื่อไฟล์ app/Http/Middleware/HttpsProtocol.phpแล้วก็ไปบอก Kernel.php ให้รู้จักกันซะ ที่ไฟล์ app/Http/Kernel.php

  • ดึง RSS ฟีดมาแสดงใน Laravel

    Article
    Save Pongsiri 7 months ago

    ใครที่ใช้ Laravel 5 และกำลังหาวิธีดึง RSS ฟีดมาแสดงที่เว็บของเรา  วันนี้ผมขอแนะนำแพคเกจ willvincent/feeds ที่ช่วยให้คุณตอบสนองความต้องการนั้นครับติดตั้ง willvincent/feedsใช้คำสั่ง composer require ดาวน์โหลดแพจเกจ willvincent/feeds ลงในโปรเจค Laravel 5 ของเราก่อนครับ composer require willvincent/feedsแล้วก็เข้าไปเพิ่ม provider ในไฟล์ config/app.php     'providers' => [        // ...        willvincent\Feeds\FeedsServiceProvider::class,    ],และเพิ่ม faces ลงในส่วนของ aliases ในไฟล์เดียวกัน    'aliases' => [        // ...        'Feeds'    => willvincent\Feeds\Facades\FeedsFacade::class,    ],ก่อนใช้งานเราก็ต้องดึง config ของแพคเกจออกมาก่อนครับphp artisan vendor:publish --provider="willvincent\Feeds\FeedsServiceProvider"เสร็จแล้วจะไฟล์ config/feeds.php กำเนิดเกิดขึ้น (ถ้าใครไม่ขึ้นหรือรันไม่ผ่านให้ลองรันคำสั่งล้างแคชก่อนนะ php artisan config:cache)การใช้งานใน Controllerเราจะใช้งานด้วยฟังก์ชั่น make()  ซึ่ง 3 พารามิเตอร์- ลิงค์ของ RSS ถ้ามีหลายลิงค์ให้ใส่เป็น array- ตัวเลขจำนวนฟีดที่แสดงไม่เกินกี่ฟีด- บังคับอ่านไฟล์ที่ไม่ถูกรูปแบบ RSS ใส่เป็น Booleanเริ่มด้วยกันเรียกใช้งานคลาสด้วย faces ที่เราเตรียมไว้ส่วนบนๆ ของ controller เราเลยครับ ... use Feeds; class FeedsController extends Controller{     ... }    โค้ดตัวอย่างนี้ เราจะเขียน method สำหรับอ่านข้อมูลจากลิงค์ RSS มาแปลงเป็น array แล้วส่งต่อไปแสดงผลที่ View ครับ    public function news()    {        $feed = Feeds::make('https://www.thaiware.com/rss/rss_latestPost_news.php');        $data = array(          'title'     => $feed->get_title(),          'permalink' => $feed->get_permalink(),          'items'     => $feed->get_items(),        );        return view('feeds', $data);    }ในส่วนของ views/feeds.blade.php เราจะลูป Feeds จาก controller มาแสดงครับ  <h1><a href="{{ $permalink }}">{{ $title }}</a></h1>  @foreach ($items as $item)    <div class="item">       <img alt="Image" src="{{ $item->get_enclosure()->link }}">           <h2><a href="{{ $item->get_permalink() }}">{{ $item->get_title() }}</a></h2>      <p>{{ $item->get_description() }}</p>      <p><small>Posted on {{ $item->get_date('j F Y | g:i a') }}</small></p>    </div>  @endforeachปล. สามารถดูตัวอย่างผลลัพธ์ของโค้ดด้านบนได้เลยที่หน้า RSS ฟีดของไอเดียจิตอลครับ https://www.ideagital.com/news 

  • การติดตั้ง Laratrust ตัวจัดการเรื่องสิทธิ์การใช้งาน (ACL)

    Article
    Save Pongsiri 8 months ago

    Laratrust เป็นแพคเกจสำหรับ Laravel 5 ที่ช่วยให้เราจัดการเรื่องสิทธิ์การใช้งานแบบ ACL โดยเราสามารถกำหนด Role, Permission และ Team เพื่อจัดการการเข้าถึงได้อย่างยืดหยุ่น ติดตั้ง Laratrust Package1. รันคำสั่ง composer require ในโปรเจค Laravel ของเรา ด้วย Terminalcomposer require "santigarcor/laratrust:5.0.*"(สำหรับใครที่ใช้ Laravel 5.5 ขึ้นไป ข้ามไปข้อ 4 ได้เลยครับ)2. เข้าไปเพิ่ม LaratrustServiceProvider ที่อาเรย์ providers ในไฟล์ config/app.phpLaratrust\LaratrustServiceProvider::class,3. และเพิ่ม Laratrust ที่อาเรย์ aliases ด้านล่างของไฟล์ด้วยนะ 'Laratrust'   => Laratrust\LaratrustFacade::class,           4. รันคำสั่งเปิดใช้ไฟล์ config ของ laratrust ทั้งหมดครับphp artisan vendor:publish --tag="laratrust"(ถ้าหากรันคำสั่งด้านบนแล้วไม่มีอะไรตอบสนอง ให้เคลียแคช config ของเราก่อนครับ)php artisan config:clearตั้งค่าในไฟล์ Configตอนนี้เราจะได้ไฟล์ config/laratrust.php สำหรับตั้งค่าต่าง ๆ ของ laratrust ดังนี้ถ้าต้องการสร้างสิทธิ์ผู้ใช้แบบทีมก็ให้เปิดใช้ฟีเจอร์นี้ตรงบรรทัดนี้use_teams => trueปกติ Laratrust จะเซ็ตโมเดล User เป็นโมเดลหลักอันเดียว กรณีมีหลาย User โมเดลก็เพิ่มอาเรย์เป็นชื่อโมเดลต่อลงไปได้เลย'user_models' => [    'users' => 'App\User',     ...],ตอนเรียกใช้ก็เรียก method ตาม key ที่เราตั้งแบบนี้$role->users;$role->users();ติดตั้งแบบอัตโนมัติ (แนะนำ)เมื่อ Config เสร็จแล้ว ต่อจากนี้ก็จะเป็นขึ้นการของติดตั้งเข้าโปรเจคของเรา ถ้าต้องการให้ Laratrust ทำการติดตั้งตัวเองอัตโนมัติ ก็แค่รันคำสั่งนี้ครับphp artisan laratrust:setupคำสั่งนี้ก็จะ Generate ไฟล์ model และ migration มาให้ครับ (ถ้าเปิดใช้ฟีเจอร์ทีมก็จะมีโมเดล Team มาให้ด้วย) และอย่าลืม dump-autoload ใหม่ด้วยนะcomposer dump-autoloadสร้าง Migrationโดยใช้คำสั่งสร้าง migration ของ laratrust ตามนี้ครับphp artisan laratrust:migrationจะได้ไฟล์ ชื่อ แล้วเราก็รันคำสั่ง migrate ได้เลยphp artisan migrateเสร็จแล้วเราจะได้ตารางในฐานข้อมูลเพิ่มขึ้นตามนี้- roles                           ไว้เก็บชื่อ role เช่น admin, user- permissions                ไว้เก็บชื่อ permission- teams                         ไว้เก็บชื่อ team (ถ้าต้ังค่า use_teams = true)- role_user                    ไว้ความสัมพันธ์ของตาราง roles และ users- permission_role          ไว้เก็บความสัมพันธ์ Many to Many ของ roles กับ permissions- permission_user         ไว้เก็บความสัมพันธ์ของตาราง users กับ permissionsสร้างโมเดล Roleตอนนี้เราก็จะไล่สร้าง Model ที่เราจำเป็นต้องไว้ครับเริ่มจากสร้างไฟล์โมเดลใหม่ในโฟลเดอร์ app ตั้งชื่อว่า app/Role.php แล้วเขียนโค้ดตามนี้namespace  App;use Laratrust\Models\LaratrustRole; class Role extends LaratrustRole{ }สำหรับโมเดล Role จะมีแอททริบิวต์หลักมาให้ 3 แอททริบิวต์- name                ชื่อที่ใช้เรียก Role แบบไม่ซ้ำกัน เช่น "admin", "owner", "employee"- display_name   ชื่อ Role แบบแสดงให้คนอ่าน เช่น User "Administrator", "Employee"- description        รายละเอียดของแต่ละ Role (ค่าเริ่มต้นเป็น null)สร้างโมเดล Permissionในโฟลเดอร์ app ให้สร้างไฟล์อีกไฟล์นึงชื่อ Permission.php แล้วเขียนโค้ดตามนี้namespace App;use Laratrust\Models\LaratrustPermission; class Permission extends LaratrustPermission{ }สำหรับโมเดล Permission จะมีแอททริบิวต์หลักมาให้ 3 แอททริบิวต์ เช่นกัน- name                ชื่อที่ใช้เรียก Permission แบบไม่ซ้ำกัน เช่น "create-post"- display_name   ชื่อ Permission แบบแสดงให้คนอ่าน เช่น User "Create Posts"- description        รายละเอียดของแต่ละ Permission (ค่าเริ่มต้นเป็น null)สร้างโมเดล Team (ถ้าเปิดใช้งาน)ในโฟลเดอร์ app ให้สร้างไฟล์ชื่อ Team.php แล้วเขียนโค้ดตามนี้namespace App;use Laratrust\Models\LaratrustTeam; class Team extends LaratrustTeam{ }สำหรับโมเดล Team จะมีแอททริบิวต์หลักมาให้ 3 แอททริบิวต์- name                ชื่อที่ใช้เรียก Team แบบไม่ซ้ำกัน เช่น "my-team"- display_name   ชื่อ Team แบบแสดงให้คนอ่าน เช่น User "My Team"- description        รายละเอียดของแต่ละ Team (ค่าเริ่มต้นเป็น null)ตั้งค่าในโมเดล Userตรงนี้เราจะมีโมเดล User อยู่แล้ว ให้เราเข้าไปเพิ่ม LaratrustUserTrait ในไฟล์ app/User.php ตามตัวอย่างนี้use Laratrust\Traits\LaratrustUserTrait; class User extends Model{   use LaratrustUserTrait; // เรียกใช้ trait   ...}เราก็จะสามารถใช้ความสัมพันธ์ของ Role และ Permission ด้วย method เหล่านี้ roles(), hasRole($name), hasPermission($permission), isAbleTo($permission), can($permission), ability($roles, $permissions, $options) และ rolesTeams()ที่สำคัญอย่าลืม dump autoload ใหม่ด้วยcomposer dump-autoloadสร้าง Seederมาถึงนี้เราก็มีโครงสร้างพร้อมใช้งานแล้วแหละ แต่ขาดข้อมูลเริ่มต้นชื่อ Role, Permission ที่เราจะมีไว้ใช้ก่อนนั่นเอง โดยการรันคำสั่งสร้าง seeder ของ laratrust php artisan laratrust:seederและเช่นเคยcomposer dump-autoloadเสร็จแล้วก็ไปเพิ่มคำสั่งสำหรับรัน method ในไฟล์ database/seeds/DatabaseSeeder.php$this->call(LaratrustSeeder::class);(** ถ้าเราไม่ได้รันคำสั่ง php artisan vendor:publish --tag="laratrust" ตั้งแต่แรก เราต้องจัดการ roles, modules และ permissions เองแต่ละอันครับ)ตอนนี้ในไฟล์ config/laratrust_seeder.php จะมีหน้าแบบนี้return [    'role_structure' => [        'superadministrator' => [            'users' => 'c,r,u,d',            'acl' => 'c,r,u,d',            'profile' => 'r,u'        ],        'administrator' => [            'users' => 'c,r,u,d',            'profile' => 'r,u'        ],        'user' => [             'profile' => 'r,u'        ],    ],    'permission_structure' => [        'cru_user' => [            'profile' => 'c,r,u'        ],    ],    ...];ทำความเข้าใจกับ role_structure ในอาเรย์ด้านบนนี้- ชั้นบนสุดคือชื่อ Role- ชั้นรองลงมาคือโมดูลสำหรับใช้งานแต่ละส่วน- ในแต่ละโมดูลจะมีการระบุชื่อ permission ที่อนุญาตแบบย่อสั้น ๆส่วนใน permission_structure คือ- ชั้นบนสุดคือชื่อ users- ชั้นรองลงมาคือโมดูลสำหรับใช้งานแต่ละส่วน- ในแต่ละโมดูลจะมีการระบุชื่อ permission ที่อนุญาตแบบย่อสั้น ๆถ้าต้องการใช้คำย่ออื่นที่ไม่ใช่ c, r, u, d ตามที่มีมาให้ ก็ให้เข้าไปปรับเองที่ config/laratrust_seeder.php ตรงอาเรย์ permission_map ครับติดตั้งตัวจัดการ Team (ถ้าเปิดใช้)1. ตั้งค่า use_teams เป็น true ในไฟล์ config/laratrust.php2. รันคำสั่งติดตั้งphp artisan laratrust:setup-teams3. รัน migratephp artisan migrateสำหรับใครอ่านที่ถึงตรงนี้แล้ว ยินดีด้วยครับการติดตั้ง Laratrust ของคุณเสร็จเรียบร้อยแล้ว เย้ๆๆ แต่นี่เป็นแค่ครึ่งทางเท่านั้น เพราะอีกครึ่งทางที่เหลือคือการใช้งาน Laratrust ซึ่งมี method ให้ใช้ได้หลายอย่างมาก รวมทั้งตัวอย่างการใช้งานในกรณีต่างๆ อีกเพียบดังนั้นจึงขอแยกเป็นเรื่อง ๆ เพื่อให้ง่ายในการกลับมาดูอีกครั้งนึง และบล็อคนี้ได้ไม่ยาวเกินไปด้วยแหละ เอาหล่ะไปพักสายตาแปป แล้วเจอกันนะครับ :)

  • เขียนเว็บให้รองรับ URL ภาษาไทย

    Article
    Save Pongsiri 8 months ago

    เราก็รู้กันอยู่แล้วว่า URL ที่ Friendly และมี Keyword อยู่ด้วยจะทำให้โอกาสติด SEO นั้นมีมากขึ้น และเรื่องความสวยงามสบายตาด้วยเช่นกันดังนั้นบทความนี้ขอตัวอย่างสั้น ๆ ตอนทำ URL ภาษาไทย มาให้ดูครับโค้ดด้านล่างนี้เป็น method นึงที่ผมสร้างขึ้นมาเพื่อแปลง Title ของโพสที่อ่านอยู่นี้ให้เป็น Slug คือตัดอักขระที่จะทำให้ลิงค์พังออก เช่น ? & # : / \ + - = ! ... พวกนี้ทำให้ URL ของเราไม่สามารถเปิดได้ ก็เลยต้องการฟังก์ชั่น preg_replace() และ str_replace ในการค้นหาอักขระเหล่านั้นและแปลงมันเป็นตัวที่ความหมายเดียวกันใช้แทนกันได้ซะ เช่น & เป็น -and- แบบนี้ อักขระอื่นก็ใช้ Regular Expressions มาด้วยหาครับ     function convertToSlug($string)    {        return preg_replace('/[^A-Za-z0-9ก-๙\-]/u', '-',str_replace('&', '-and-', $string));    }ผลลัพธ์คือสมมติว่า Title คือ "วิธีการทำ Login with Facebook และ Social อื่น ๆ ด้วย Laravel Socialite" จะถูกแปลงเป็น"วิธีการทำ-login-with-facebook-และ-social-อื่น-ๆ-ด้วย-laravel-socialite" แบบนี้ส่วนถ้าใครอยากให้แปลงชื่อหัวข้อเป็น Slug ทันทีเลยที่พิมพ์เสร็จก็เขียน JavaScript ฟังก์ชั่นขึ้นมาครับ        $('#title').on('blur', function(){            var theTitle = this.value.toLowerCase().trim(),                slugInput = $('#slug'),                theSlug = theTitle.replace(/&/g, '-and-')                                    .replace(/[^a-z0-9ก-๙-]+/g, '-')                                    .replace(/\-\-+/g, '-')                                    .replace(/^-+|-+$/g, '');                                slugInput.val(theSlug);        }); ผลลัพธ์ก็จะเหมือนแบบใน Wordpress เลย และรองรับอักขระภาษาไทยด้วยเช่น ' ้ ๊ ๋ หวังว่าจะได้ประโยชน์จากการใช้งานและประยุกต์ใช้กันนะครับ

  • Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

    Topic
    Someone Ontheworld 8 months ago

    ใช้ laravel ตอนรัน php artisan migrate แล้วขึ้นแบบนี้อ่ะ

  • วิธีการทำ Login with Facebook และ Social อื่น ๆ ด้วย Laravel Socialite

    Article
    Save Pongsiri 8 months ago

    บทความนี้จะขอพูดสิ่งที่ปัจจุบันถือได้ว่าเป็นเรื่องพื้นฐานไปแล้วสำหรับเว็บไซต์ที่มีระบบสมาชิกนั่นก็คือการ Login ด้วยบัญชี Social Network ต่าง ๆ ไม่ว่าเป็น Facebook, Google(Gmail), Twitter, Github และอื่น ๆ ซึ่งหลาย ๆ คนก็รู้ดีว่าภายใต้การใช้งานที่เรียบง่าย ๆ แสนง่ายนั้น มันแฝงไปด้วยขั้นตอนการพัฒนาที่วุ่นวาย หลายขั้นตอนซะเหลือเกิน ไปว่าจะเป็นการเปิด App Account ของแต่ละเจ้า การติดตั้ง SDK จนถึงการเขียน API เพื่อเชื่อมต่อกว่าจะใช้งานได้จริงก็สูญเสียพลังงานไปไม่น้อยแต่สำหรับใครที่ใช้ Laravel ก็ง่ายขึ้น เพราะเราก็กำลังจะมาใช้งาน Laravel Socialite ซึ่งเป็น Package ที่ตอบโจทย์ในเรื่องการไม่ต้องการติดตั้ง SDK ของ Social ใด ๆ ที่เราจะ Connect อีกต่อไป แค่ติดตั้ง Package ทีเดียวเราก็เชื่อมต่อได้แทบจะทุก Social ที่เรานึกออกเลยแหละ ถ้าไม่เชื่อคลิกเข้ารายการ Social ที่สามารถ Connect ได้ที่ลิงค์นี้ Socialite Providersเริ่มติดตั้งติดตั้ง Socialite ด้วยคำสั่ง Composercomposer require laravel/socialiteสำหรับ Package นี้เป็น Offcial Package ของ Laravel ก็พร้อมใช้งานแล้วครับตอนนี้เราก็มาเขียน Controller ให้สามารถใช้งาน Socialite ได้ โดยตัวอย่างนี้ผมจะเขียนดัดแปลงให้ Auth/LoginController.php ซึ่งเป็นไฟล์ที่สร้างมาจากคำสั่ง php artisan make:auth สามารถ Login ด้วย Facebook หรือ Social อื่น ๆ ได้ครับเพิ่มคำสั่ง use Socialite; ที่ด้านบนของไฟล์ ใน Class LoginController ให้เพิ่ม Method สำหรับ Redirect ไป Facebook และ รับ Callback กลับมาจาก Facebook แล้วบันทึกหรือดึงข้อมูลของ User ตามโค้ดด่างล่างนี้... use Socialite; use App\User; use App\SocialAccounts; class LoginController extends Controller{    ......     /**     * Social Login     */    public function redirectToProvider($provider = 'facebook')    {        return Socialite::driver($provider)->redirect();    }     public function handleProviderCallback($provider = 'facebook')    {        $providerUser = Socialite::driver($provider)->user();                    $user = $this->createOrGetUser($provider, $providerUser);        auth()->login($user);        return redirect()->to('/home');    } public function createOrGetUser($provider, $providerUser) { /** Get Social Account */ $account = SocialAccount::whereProvider($provider) ->whereProviderUserId($providerUser->getId()) ->first(); if ($account) { return $account->user; } else { /** Get user detail */ $userDetail = Socialite::driver($provider)->userFromToken($providerUser->token);             /** Create new account */ $account = new SocialAccount([ 'provider_user_id' => $providerUser->getId(), 'provider' => $provider, ]); /** Get email or not */ $email = !empty($providerUser->getEmail()) ? $providerUser->getEmail() : $providerUser->getId() . '@' . $provider . '.com'; /** Get User Auth */ if (auth->check()) { $user = auth()->user(); }else{ $user = User::whereEmail($email)->first(); } if (!$user) { /** Get Avatar */ $image = $provider . "_" . $providerUser->getId() . ".png"; $imagePath = public_path(config('app.media.directory') . "users/avatar/" . $image); file_put_contents($imagePath, file_get_contents($providerUser->getAvatar())); /** Create User */ $user = User::create([ 'email' => $email, 'name' => $providerUser->getName(), 'username' => $providerUser->getId(), 'avatar' => $image, 'password' => bcrypt(rand(1000, 9999)), ]); } /** Attach User & Social Account */ $account->user()->associate($user); $account->save(); return $user; } } }แล้วไปเพิ่ม Route ใหม่ที่ไฟล์ routes/web.php สำหรับ Redirect และ Callback กับ Facebook หรือ Social อื่น ๆRoute::prefix('login')->group(function () {    Route::get('/{provider}', 'Auth\[email protected]')->name('login.provider');    Route::get('/{provider}/callback', 'Auth\[email protected]')->name('login.provider.callback');});ต่อมาก็สร้างไฟล์ Migration ใหม่ด้วยคำสั่ง php artisan make:migration create_social_accounts_table ไฟล์ migration จะถูกสร้างใหม่ที่โฟลเดอร์ database/migrations/จะเจอที่ไฟล์ใหม่ประมาณนี้ ........ create_social_accounts_table.php ให้เพิ่ม Field ชื่อ provider และ provider_user_id ตามโค้ดด้านล่างuse Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateSocialAccountsTable extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('social_accounts', function (Blueprint $table) {            $table->increments('id');            $table->integer('user_id');            $table->string('provider');             $table->string('provider_user_id');                        $table->timestamps();        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::dropIfExists('social_accounts');    }}แล้วรันคำสั่ง migratephp artisan migrate(สำหรับใครที่อยากแสดง Avatar ของ Facebook ให้ไปเพิ่ม Field ชื่อว่า avatar ที่ตาราง User ด้วยนะ)เอาละสุดท้ายก็ตั้งค่าข้อมูลสำคัญสำหรับเชื่อมต่อกับ Facebook เข้าไปที่ config/services.php ด้านต่างก็เพิ่ม array ตั้งค่าของ facebook ตามนี้'facebook' => [    'client_id' => env('FACEBOOK_CLIENT_ID', {Your App ID}),    'client_secret' => env('FACEBOOK_CLIENT_SECRET', {Your App Secret}),    'redirect' => env('APP_URL') . 'login/facebook/callback',],สำหรับ Cliend ID, Client Secret ใส่ตามที่ขึ้นที่หน้า app ของเราที่สร้างไว้ที่ Facebook Developer ครับแต่ถ้าใครยังไม่ได้สร้าง app ใน Facebook Developer ให้เข้าไปที่ Facebook Developers สร้าง Facebook Appเจอเว็บแบบนี้แล้วคลิกที่ My Apps > Add New App จะพบการ Modal ให้เราตั้งชื่อ App และใส่ Email ติดต่อของเราไป เสร็จแล้วก็กด Create App ID พอสร้างเสร็จให้คลิกที่เมนู Settings > Basic ให้เราใส่ข้อมูลให้ครบแบบนี้ต่อมาคือการเพิ่ม Product ของ App ในการที่นี้คือ Facebook Login ให้กดปุ่ม + หลังคำว่า Products + หากล่องที่เขียนว่า Facebook Login แล้วกดปุ่ม Set Up ด้านล่างของกล่องคลิกเลือกประเภทเป็น Web แล้วใส่ URL ของเว็บที่จะใช้ Connect เข้ามากด Save และข้าม Step การติดตั้ง SDK ได้ไปเลย เพราะเรากำลังจะใช้ Laravel Socialite มาจัดการตรงนี้ครับคลิกที่ Facebook Login > Settings จะเจอหน้าตั้งแค่แบบนี้สิ่งที่จำเป็นคือการเปิด Client OAuth Login, Web OAuth Login, Use Strict Mode for Redirect URIs, Enforce HTTPS และใส่ Valid OAuth Redirect URIs เป็น URL ที่เราจะให้ Facebook Callback กลับไปที่เว็บเราครับ https://{your_domain}/login/facebook/callbackเอ๊าะ!! เมื่อใช้งานจริงที่โปรดักชั่นให้เปิด Status เป็น ON แบบรูปด้านบนด้วยครับประยุกต์ใช้การใช้งานก็แค่สร้างปุ่ม Login with Facebook แบบไหนก็ได้ขึ้นมาที่ View แล้วใส่ลิ้งค์เป็น Route ที่ใช้ Redirect ไป Facebook ที่เซ็ตไว้คือ /login/facebookพอคลิกที่ปุ่มก็จะ Redirect ไปที่หน้าขอใช้ App ของ Facebook แบบนี้ครับพอเราคลิก Continue as ... Facebook ก็จะ Callback กลับมาที่เว็บเราตาม URL ที่เราเซ็ตไว้คือ /login/facebook/callback ซึ่งเราแล้วเขียนให้เก็บชื่อ อีเมล และ Avatar เอาไว้ และ Redirect ต่อไปที่หน้า /home แบบนี้ครับภารกิจ Login with Facebook เรียบร้อยแล้ว และอย่างที่บอกเราสามารถ Connect กับ Social อื่น ๆ ได้อีกด้วย หวังว่าจะประยุกต์กันอย่างราบรื่นนะครับ