Showing results for “composer”

11 results found

  • ติดตั้ง php บน macos ด้วย brew

    Topic
    Save Pongsiri 4 months ago

    First install Brew on your MACSetup Brew: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew updatebrew tap homebrew/dupesbrew tap homebrew/phpInstall PHP 7.0.+ brew install php70Install mcrypt: brew install mcrypt php70-mcryptFinally, install composer: brew install composerNow if you run $ php -v, you will get PHP 5.5 or something. This is the default PHP version that is shipped with OSX and cannot be removed. You just need to edit your path to ensure that PHP 7.0 is picked up.export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"To debug any issue with any package, you can run brew info php70 etc.Also, if you are getting seemingly unrelated errors, make sure to update bash/zsh: brew upgrade bash and brew upgrade zsh.If everything is setup correctly, running $ php -v should give you 7.0.+.Thank! https://gist.github.com/shashankmehta/6ff13acd60f449eea6311cba4aae900a

  • วิธีเพิ่มคำสั่ง 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

  • คำสั่งเพิ่ม directory ลงใน system path บน macOS

    Topic
    Save Pongsiri 5 months ago

    export PATH=$PATH:~/.composer/vendor/bin

  • ดึง 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 ให้ใช้ได้หลายอย่างมาก รวมทั้งตัวอย่างการใช้งานในกรณีต่างๆ อีกเพียบดังนั้นจึงขอแยกเป็นเรื่อง ๆ เพื่อให้ง่ายในการกลับมาดูอีกครั้งนึง และบล็อคนี้ได้ไม่ยาวเกินไปด้วยแหละ เอาหล่ะไปพักสายตาแปป แล้วเจอกันนะครับ :)

  • วิธีติดตั้ง Composer บน Windows

    Article
    Panachai Meetun 6 months ago

    Download  Composer-Setup.exe1.กด Next2.เลือกที่อยู่ของไฟล์ (แนะนำให้ติดตั้งไว้ที่ไดร์ C:) กด Next3.รอติดตั้งโปรแกรมจนเสร็จ4.กด Next5.จากนั้น กด Install (และรอให้โปรแกรมติดตั้งสักครู่)6.กด Next7.กด Finish 

  • วิธีติดตั้ง Composer บน MacOS

    Article
    Save Pongsiri 6 months ago

    ดาวน์โหลด Composerโดยการเปิดโปรแกรม Terminal ขึ้นแล้ว แล้วรันคำสั่ง curl ดาวน์โหลด composer.pharSome settings on your machine make Composer unable to work properly. Make sure that you fix the issues listed below and run this script again: The detect_unicode setting must be disabled. Add the following to the end of your `php.ini`: detect_unicode = Off A php.ini file does not exist. You will have to create one. If you can not modify the ini file, you can also run `php -d option=value` to modify ini values on the fly. You can use -d multiple times.สำหรับให้เข้าตั้งค่าที่ไฟล์ php.ini จะอยู่ในโฟลเดอร์ /private/etc/ ถ้าหาไม่เจอให้ copy จาก default มาใหม่ด้วยคำสั่งนี้detect_unicode = Offเสร็จแล้วก็รันคำสั่ง curl ข้างบนอีกครั้งใช้งาน Composerพอติดตั้งเสร็จก็จะได้ไฟล์ composer.phar ซึ่งตอนนี้มันสามารถ excute ได้แล้วด้วยคำสั่ง PHP แต่ถ้าหากต้องการให้พิมพ์ง่าย ๆ แต่คำว่า composer เราก็ต้องย้ายไปไว้ที่ /usr/bin และสร้าง alias ด้วยคำสั่งนี้alias composer="php /usr/local/bin/composer.phar"เรียบร้อยตอนนี้ก็สามารถรันคำสั่ง composer บน Terminal ได้แล้วครับ

  • วิธีการทำ 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\LoginControll[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 

  • การติดตั้ง Laravel 5.6 แบบสมบูรณ์

    Article
    Save Pongsiri 6 months ago

    เซิร์ฟเวอร์ต้องมีอะไรบ้าง? Laravel เป็นเฟรมเวิร์คที่ไม่ต้องการทรัพยากรสูงมาก ยิ่งถ้าติดตั้งกับ Laravel Homestead เซิร์ฟเวอร์จำลองที่สร้างมาเพื่อ Laravel ก็แทบไม่ต้องการอะไรเพิ่มเลย ทาง Laravel เองก็ค่อนข้างเชียร์ให้เราใช้ Homestead เป็นเซิร์ฟเวอร์จำลองสำหรับพัฒนาในเครื่องของเราแต่ถ้าเราไม่ได้ใช้ Homestead ล่ะ? คำตอบคือ เราก็ต้องเตรียมเซิร์ฟเวอร์ของเราให้มีทรัพยากรพื้นฐานเลยตามนี้- PHP เวอร์ชั่นตั้งแต่ 7.1.3 ขึ้นไป- OpenSSL PHP Extension- PDO PHP Extension- Mbstring PHP Extension- Tokenizer PHP Extension- XML PHP Extension- Ctype PHP Extension- JSON PHP Extension(ซึ่งส่วนใหญ่ก็มีมาให้กับเซิร์ฟทั่วไปอยู่แล้ว)เริ่มติดตั้งLaravel ใช้ Composer เป็นตัวจัดการเรื่อง Dependencies ดังนั้นก่อนใช้งาน Laravel ก็ควรต้องติดตั้ง Composer ลงในเรื่องของเราก่อนด้วย (วิธีติดตั้ง Composer Windows, Mac)ติดตั้งด้วย Laravel Installerเริ่มจากดาว์นโหลด Laravel Installer ด้วย Composercomposer global require "laravel/installer"เมื่อติดตั้งเรียบร้อยแล้ว เราก็สามารถใช้คำสั่ง laravel new ตามด้วยชื่อโปรเจค เพื่อสร้างโปรเจคใหม่ได้เลยแบบนี้laravel new [ชื่อโปรเจคใหม่]หรือติดตั้งด้วยคำสั่ง Composer Create-Projectเป็นอีกวิธีนึงหากวิธีแรกใช้ไม่ได้ คือติดตั้งด้วยคำสั่ง create-project บน Terminalcomposer create-project --prefer-dist laravel/laravel [ชื่อโปรเจคใหม่]รันเซิร์ฟเวอร์ของเรากันเมื่อเราติดตั้ง Laravel ได้แล้วต่อไปเราก็มาลองรันเซิร์ฟเวอร์ ด้วยคำสั่ง PHP ในการสร้างเซิร์ฟเวอร์สำหรับพัฒนาให้กับเว็บของเราได้เลยphp artisan serveเว็บจะรันที่ http://localhost:8000 ตามค่าเริ่มต้น ถ้าอยากใช้ port อื่นก็พ่วง option ไปแบบนี้ php artisan serve --port=1234สิ่งที่ต้องตั้งค่าก่อนเริ่มเขียนเว็บPublic Directory ตั้งค่าเว็บเซิร์ฟเวอร์ web root ให้เปิดจาก ไดเรคทอรี่ public ของเว็บเรา ไฟล์ public/index.php เป็นไฟล์ที่ใช้รันเว็บของเราตั้งค่าในไฟล์ค่าตั้งค่า ในไดเรคทอรี่ที่ชื่อว่า config จะมีไฟล์สำหรับตั้งค่าหลายไฟล์ เราสามารถตั้งค่า เช่น Database, Email หรืออื่น ๆ ได้เลยที่นี่สิทธิ์การเข้าถึงไดเรคทอรี่ มีบางไดเรคทอรี่ที่ต้องการสิทธิ์ในการเขียนข้อมูล เช่น storage และ bootstrap/cache ให้ตั้งค่า permission ให้สามารถเขียนข้อมูลได้ Application Key เรื่องคีย์นี้สำหรับมากว่าเราไม่ได้เซ็ตไว้ จะทำให้การเข้ารหัสข้อมูลของเราไม่ปลอดภัย ส่วนวิธีกำหนดคีย์ก็ไม่ยาก แค่เราเปลี่ยนชื่อไฟล์ .env.example เป็น .env แล้วรันคำสั่ง geneate ใน Terminalphp artisan key:generateตั้งค่าอื่น ๆ เพิ่มเติม หากต้องการความสมบูรณ์ของเว็บเพิ่มขึ้นก็ให้เขาไปตั้งค่าอื่น ๆ เช่น timezone และ locale ในไดเรคทอรี่ config/app.php ตั้งค่าเว็บเซิร์ฟเวอร์ตั้ง URL ให้สวยงามสำหรับเว็บเซิร์ฟเวอร์ที่ใช้ Apacheในโฟลเดอร์ public จะมีไฟล์ที่ชื่อว่า .htaccess ไว้สำหรับจัดการ URL ของเราไม่ให้เป็น index.php ใน URL ไฟล์นี้จะทำงานได้ ถ้าเครื่องเรามีการติดตั้งโมดูล mod_rewrite ไว้เรียบร้อยแล้วแต่ถ้า .htaccess ไม่ทำงาน ให้ลองให้คำสั่งด้านล่างนี้Options +FollowSymLinksRewriteEngine On RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^ index.php [L]สำหรับเว็บเซิร์ฟเวอร์ที่ใช้ Nginxถ้าเราใช้ Nginx ง่าย ๆ แค่เพิ่มการตั้งค่าของ Site ด้วยคำสั่งด้านล่างนี้location / {    try_files $uri $uri/ /index.php?$query_string;}

  • รวมคำสั่งและวิธีการใช้งาน Laravel Collective ช่วยจัดการเรื่อง Form ให้ง่ายขึ้น

    Article
    Save Pongsiri 6 months ago

    Laravel Collective เป็นตัวช่วยจัดการเรื่อง Form คือมันจะสร้าง Input แบบต่าง ๆ มาให้เราเองครับ จะสะดวกมากตอนนี้เราใช้เชื่อมกับ Model เพราะเมื่อเราทำแบบ form สำหรับ edit ข้อมูลมันจะเติมค่าที่มีอยู่แล้วใน Database ลงใน input ให้เราอัตโนมัติครับแต่ถ้าถามไม่มีข้อมูลมันก็จะเป็นค่า default หรือ ค่าว่างปกติ การติดตั้งก่อนอื่นก็ติดตั้ง Package ด้วย Composer composer require "laravelcollective/html":"^5.4.0"ต่อไปก็เข้าไปเพิ่ม Provider ตรงอาเรย์ชื่อ providers ในไฟล์ config/app.php 'providers' => [ // ... Collective\Html\HtmlServiceProvider::class, // ... ],และเพิ่ม Aliase ตรงอาเรย์ชื่อ aliases ในไฟล์เดียวกัน 'aliases' => [ // ... 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, // ... ],การใช้งานเราจะใช้ได้เลยที่ไฟล์ใน views ของเราครับ เปิด ปิด Form{!! Form::open(['url' => 'foo/bar']) !!} // {!! Form::close() !!}ค่าเริ่มต้น Method ของ Form จะเป็นแบบ Post, แต่เราสามารถกำหนด Method อื่น ๆ อย่าง POST, PUT และ DELETE ได้แบบนี้Form::open(['url' => 'foo/bar', 'method' => 'put']) ส่วน Action ของ Form  เราสามารถกำหนดเป็นชื่อ Route Form::open(['route' => 'route.name'])หรือ เรียก Controller Action เลยก็ได้Form::open(['action' => '[email protected]']) ถ้าต้องการสร้าง Form ให้สามารถอัพโหลดไฟล์ได้ ให้ไฟล์ออฟชั่น Files เข้าไปแบบนี้Form::open(['url' => 'foo/bar', 'files' => true]) ผูก Form เข้ากับ Modelหากคุณต้องการให้ Form มีการใส่ข้อมูลที่มาจาก Database ไปเลย แบบไม่ต้องมาใส่เอง ส่วนนี้เราสามารถผูก Form กับ Model ที่ต้องการเข้าด้วยกัน เช่น Form แก้ไขข้อมูลผู้ใช้ Form::model($user, ['route' => ['user.update', $user->id]])Labelสร้าง Label จากชื่อของ Input อัตโนมัติForm::label('email', 'E-Mail Address');กำหนดชื่อ Label เองForm::label('email', 'E-Mail Address', ['class' => 'awesome']);สร้าง Input ประเภทต่าง ๆสร้าง Input ประเภท TextForm::text('username'); Form::text('email', '[email protected]'); // แบบกำหนดค่าสร้าง Input ประเภท PasswordForm::password('password', ['class' => 'awesome']);สร้าง Input ประเภท EmailForm::email($name, $value = null, $attributes = []);สร้าง Input ประเภท NumberForm::number('name', 'value');สร้าง Input ประเภท DateForm::date('name', \Carbon\Carbon::now());สร้าง Input ประเภท FileForm::file($name, $attributes = []);Checkboxes และ Radio Buttonsสร้าง Checkbox และ RadioForm::checkbox('name', 'value'); Form::radio('name', 'value');ตั้ง Checked ให้กับ Form::checkbox('name', 'value', true); Form::radio('name', 'value', true);Drop-Down Selectสร้าง Select และกำหนดตัวเลือกForm::select('size', ['L' => 'Large', 'S' => 'Small']);กำหนดค่าเริ่มต้น และ Attribute อื่น ๆForm::select('size', ['L' => 'Large', 'S' => 'Small'], 'S');Form::select('size', ['L' => 'Large', 'S' => 'Small'], null, ['placeholder' => 'Pick a size...']);สร้างตัวเลือกแบบจัดกลุ่มForm::select('animal',[ 'Cats' => ['leopard' => 'Leopard'], 'Dogs' => ['spaniel' => 'Spaniel'], ]);สร้างตัวเลือกแบบใส่ช่วงตัวเลขForm::selectRange('number', 10, 20);สร้างตัวเลือกแบบชื่อเดือนForm::selectMonth('month');ปุ่ม Buttonsสร้างปุ่ม SubmitForm::submit('Click Me!');