Showing results for “laravel”

12 results found

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

    Topic
    Save Pongsiri 2 weeks 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 3 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 4 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 4 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 4 months ago

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

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

    Article
    Save Pongsiri 5 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 5 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 6 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 6 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 6 months ago

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

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

    Article
    Save Pongsiri 6 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 อื่น ๆ ได้อีกด้วย หวังว่าจะประยุกต์กันอย่างราบรื่นนะครับ

  • มาใช้งาน Laravel CRUD Generator ตัวช่วยสร้าง CRUD สำเร็จรูป

    Article
    Save Pongsiri 6 months ago

    Package นี้เป็นตัวช่วยสร้าง CRUD, API, Controller, Model, Migration, View  แบบอัตโนมัติด้วยการรันเพียงคำสั่งเดียว เหมาะกับสำหรับสาย Backend ที่นั่งทำแต่ CRUD วันละหลาย ๆ Module หรือสาย Frontend ที่กำลังหาตัวช่วยจบงานหลังบ้านโดยไม่ต้องง้อ Backend บอกได้เลยว่าคุณมาถูกทางแล้วครับสร้างระบบหลังบ้านก่อนเริ่มต้นโดยการเปิดโปรเจค Laravel ของบน Teminal (หากยังไม่ติดตั้งดูที่ การติดตั้ง Laravel 5.6 แบบสมบูรณ์) ตั้งค่า Database ให้เรียบร้อย แล้วสร้าง auth ไว้เลย ด้วยคำสั่งphp artisan make:authแล้วรัน migration เพื่อสร้างตาราง users และ  password_resets ตามที่ Laravel ให้มาphp php artisanก็จะได้ระบบ Login และ Register หน้าตาประมาณนี้ครับติดตั้ง CRUD Generatorและแล้วก็ถึงเวลาโหลด appzcoder/crud-generator มาลงโล้ดดcomposer require appzcoder/crud-generator --devจากนั้นก็ดึง assets ขึ้นมาใช้งานphp artisan vendor:publish --provider="Appzcoder\CrudGenerator\CrudGeneratorServiceProvider" ** สำหรับใครที่ใช้ Laravel เวอร์ชั่นต่ำกว่า 5.5 ให้เข้าไปเพิ่ม Provider ในไฟล์ app/Providers/AppServiceProvider.php เองด้วยนะpublic function register() { if ($this->app->environment() == 'local') { $this->app->register('Appzcoder\CrudGenerator\CrudGeneratorServiceProvider'); } }เริ่มสร้าง CRUD ตัวอย่างคำสั่งในการสร้างหน้าจัดการโพสทั้ง สร้างโพส, ดูโพส, แก้ไขโพส, และลบโพสphp artisan crud:generate Posts --fields='title#string; content#text; category#select#options={"technology": "Technology", "tips": "Tips", "health": "Health"}' --view-path=admin --controller-namespace=Admin --route-group=admin --form-helper=htmlหลังจากรันคำสั่งแล้วไฟล์ที่ได้คือ - Post.php, - Controllers/Admin/PostController.php, - migrations/2018_04_25_153320_create_posts_table.phpไฟล์ใน views/admin/posts/ ก็มี - index.blade.php, - create.blade.php, - edit.blade.php, - form.blade.php, - show.blade.phpและยังเพิ่ม routes ให้เราด้วย ลองให้คำสั่ง php artisan route:list เพื่อดู routes ทั้งหมดสังเกตุในช่อง Name จะเห็นชื่อ route ที่ขึ้นต้นด้วยคำว่า posts.xxx ถูกสร้างขึ้นมาต่อมาทำการ Migrate ฐานข้อมูล ด้วยคำสั่งphp artisan migrateพร้อมใช้งานสั่งรัน php artisan servephp artisan serveดูผลลัพธ์ที่ Browser เปิดหน้า 127.0.0.1:8000/admin/posts ก็จะเจอหน้า index ของ postsเมื่อกดปุ่ม Add New ก็เป็น Form สำหรับสร้าง Postสร้างเสร็จแล้วก็จะมีปุ่ม View, Edit, Delete เพื่อจัดการโพสของเรา เสร็จแล้วหรอเนี่ยอะไรคือการนั่งทำเป็นวัน ๆ แบบนี้หวานหมูเลยสิ ^^  เอ๊าะ! จะบอกอีกว่าเราสามารถเขียนเป็น json ไฟล์ให้ดูง่าย ๆ แบบนี้ก่อน{ "fields": [ { "name": "title", "type": "string" }, { "name": "content", "type": "text" }, { "name": "category", "type": "select", "options": { "technology": "Technology", "tips": "Tips", "health": "Health" } }, { "name": "user_id", "type": "integer#unsigned" } ], "foreign_keys": [ { "column": "user_id", "references": "id", "on": "users", "onDelete": "cascade" } ], "relationships": [ { "name": "user", "type": "belongsTo", "class": "App\\User" } ], "validations": [ { "field": "title", "rules": "required|max:10" } ] } แล้วก็รันด้วยคำสั่งนี้php artisan crud:generate Posts --fields_from_file="/path/to/fields.json" --view-path=admin --controller-namespace=Admin --route-group=admin --form-helper=htmlคำสั่งอื่น ๆ ก็มีนะสำหรับ Controllerphp artisan crud:controller PostsController --crud-name=posts --model-name=Post --view-path="directory" --route-group=adminสำหรับ Modelphp artisan crud:model Post --fillable="['title', 'body']"สำหรับ Migrationphp artisan crud:migration posts --schema="title#string; body#text"สำหรับ Viewphp artisan crud:view posts --fields="title#string; body#text" --view-path="directory" --route-group=admin --form-helper=htmlสำหรับ API CRUDphp artisan crud:api Posts --fields='title#string; content#text' --controller-namespace=Apiสำหรับ API Controllerphp artisan crud:api-controller Api\\PostsController --crud-name=posts --model-name=Postการปรับแต่ง Templateค่าเริ่มต้นจะเป็นการสร้าง CRUD โดยใช้ Template  จากไฟล์ Layout/app.blade.php ที่ Laravel ให้มา แต่เราเองสามารถปรับแต่ง Template เองได้ด้วยเข้าไปที่ไฟล์ config/crudgenerator.php  ตรงที่ custom_template ให้ตั้งค่าเป็น true'custom_template' => true,หรือเปลี่ยนที่เก็บ Template'path' => base_path('resources/crud-generator/'),ของแถมทิ้งท้ายนี่คือรายชื่อ Fields ที่ใช้งานได้ทั้งหมดForm FieldtexttextareapasswordemailnumberdatedatetimetimeradioselectfileMigration Fieldstringcharvarchardatedatetimetimetimestamptextmediumtextlongtextjsonjsonbbinaryintegerbigintmediuminttinyintsmallintbooleandecimaldoublefloatenumและการใช้ Options ต่าง ๆ ตามไปดูคู่มือนี้ https://github.com/appzcoder/crud-generator/blob/master/doc/options.md