มีอะไรใหม่ใน Laravel 5.8!!

Laravel 5.8 เพิ่งออกมาครับ เป็น Laravel เวอร์ชันใหม่ล่าสุดที่ถูกพัฒนาและเพิ่ม features ต่างๆจากเวอร์ชัน 5.7 นั่นเอง โดยรวมแล้วมีการเพิ่ม features หลายอย่างด้วยกันยกตัวอย่างเช่น มีการเพิ่ม has-one-through ของ Eloquent relationships, ปรับปรุงเรื่อง validation ของ email รวมถึงอัปเกรดเวอร์ชัน packages ต่างๆ ยกตัวอย่างเช่น PHPUnit 8.0, Carbon 2.0, Pheanstalk 4.0, dotenv 3.0 เป็นต้น


มาดูเป็นข้อๆครับว่าในเวอร์ชันนี้ใหม่นี้มีอะไรบ้าง…

1. มีการเพิ่มคุณสมบัติ Auto-Discovery ให้กับ Model Policies สำหรับคนที่ใช้งาน Policy อยู่ก็ไม่ต้อง register ในไฟล์ AuthServiceProvider แล้วนะครับ แต่เราต้องตั้งชื่อ Model ให้ถูกหลักด้วย เช่น ถ้ามี Model ชื่อว่า Product ก็ให้ตั้งว่า ProductPolicy เก็บไว้ในโฟลเดอร์ app/Policies ครับ แค่นี้ก็ใช้ได้เลย

2. ใน Laravel 5.8 จะเปลี่ยนการระบุเวลาของ Cache จากนาทีเป็นหน่วยวินาทีนะครับ ตามมาตรฐานของ PSR-16 ยกตัวอย่างเช่น

// ใน Laravel 5.7 จากโค้ดด้านล่างนี้หมายถึง 30 นาที
Cache::put(‘foo’, ‘bar’, 30);

// ใน Laravel 5.8 จะหมายถึง 30 วินาที!!
Cache::put(‘foo’, ‘bar’, 30);

// ทั้ง Laravel 5.7 หรือ 5.8 อันนี้หมายถึงใช้วินาทีครับ เขียนแบบนี้จะเข้าใจง่ายกว่า
Cache::put(‘foo’, ‘bar’, now()->addSeconds(30));

**ใครที่ใช้ 5.7 อยู่ต้องระวังเรื่องนี้ด้วยนะครับจะกระทบกับโค้ดเก่าของเราโดยตรงเลยถ้าจะ upgrade มาใช้ 5.8

3. สำหรับคนที่เขียน APIs (ใช้ token guard) ตอนนี้ในส่วนของการสร้าง tokens สามารถ hash tokens ในรูปแบบของ SHA-256 ได้แล้วครับเพื่อความปลอดภัย โดยสามารถตั้งค่า hash เป็น true ได้ในที่ไฟล์ config/auth.php ในส่วนของ api guard ครับ

*ถึงแม้วิธีนี้จะง่าย แต่จริงๆ ถ้าให้ดีก็ควรใช้ Laravel Passport ไปเลยดีกว่าครับ

4. สามารถกำหนด Default Timezone ให้กับ scheduled task ได้แล้วนะครับ ทั้งในส่วนของแต่ละ method หรือจะกำหนด default timezone ให้กับทั้ง scheduled tasks ทั้งหมดก็ได้ เช่น

$schedule->command(‘inspire’)
->hourly()
->timezone(‘Asia/Bangkok’);

.
5. สามารถแสดง path เต็ม และชื่อไฟล์ original ของ Blade Template ที่ผ่านการ Compiled ได้แล้วครับ (แสดงส่วนบนของไฟล์) อันนี้ทำให้เวลา error สามารถดูชื่อ view ได้ง่ายขึ้น ดูภาพที่ http://bit.ly/2C4PRMx

6. เราสามารถใช้ driver เป็น DynamoDB ได้แล้ว เพื่อทำ cache และ session ในโปรเจคของเรา

7. กำลังจะยกเลิก global helpers ในส่วนของ array และ string แล้วครับ ใครที่ใช้อยู่ในเวอร์ชันต่อไป (5.9) จะเอาออกแล้วนะ ถ้าจะใช้ก็ให้ use คลาสมาใช้โดยตรง ยกตัวอย่างเช่น

use Illuminate\Support\Arr;

// จะยกเลิกแล้ว
array_add($array, $key, $value);

// ใช้แบบนี้แทน
Arr::add($array, $key, $value);

8. เปลี่ยนโฟลเดอร์ Markdown mail จาก /resources/views/vendor/mail/markdown ไปเป็น /resources/views/vendor/mail/text
ถ้าใครใช้ตัวนี้ ถ้าอัปเกรดอย่าลืมเปลี่ยนชื่อโฟลเดอร์ด้วยครับ

ส่วนเรื่องอื่นๆ สามารถอ่านเพิ่มเติมได้ที่นี่นะครับ => http://bit.ly/2NHfhnY

สำหรับคนที่อยากอัปเกรดดูได้ที่นี่ => http://bit.ly/2ELMGer

ขอบคุณที่ติดตามอ่านครับ
โค้ชเอก

Laravel 5.7 กำลังจะมาครับ

Laravel 5.7 กำลังจะมาครับ (คงจะมาราวๆ สิ้นเดือน ส.ค.61 นี้) ในเวอร์ชันนี้ก็มีการเปลี่ยนแปลงจากเวอร์ชัน 5.6 บ้างครับ แต่โดยรวมไม่เยอะมากเท่าไหร่ สามารถอัปเกรดกันได้เลย

.
ผมลองสรุปให้คร่าวๆนะครับว่ามีอะไรบ้าง มาดูกันเลย

.
1. Symfony Dump Server

เราสามารถที่จะ log หรือ dump ดูข้อมูลจากการเรียก API ได้ที่ console ครับ หรือจะกำหนด output ในรูปแบบ html ก็ได้

โดยใช้คำสั่ง php artisan dump-server

ดูภาพประกอบได้ที่: http://bit.ly/2MWwicx

.
2.Email Verification

ใน Laravel 5.7 จะมีระบบการยืนยันตัวตนทางอีเมลมาให้เลยครับ เราไม่ต้องเขียนเอง!

ดูคู่มือเพิ่มเติมได้ที่: http://bit.ly/2Pmq0Vm

.
3. Guest User Gates / Policies

ในเวอร์ชันนี้ เราสามารถอนุญาต guest ให้เข้าถึงส่วนต่างๆของ app เราได้โดยไม่ต้อง login ครับ เพียงแค่กำหนดเครื่องหมาย ? เข้าไปที่ User argument

Gate::define(‘update-post’, function (?User $user, Post $post) {
// …
})

.
4. Paginator Links

เราสามารถ custom จำนวน link ของการแบ่งหน้าได้โดยใช้ method onEachSide ยกตัวอย่างเช่น

{{ $paginator->onEachSide(5)->links() }}

.
5. จะมีการยกเลิก or Operator ของ Blade ครับ ให้เปลี่ยนมาใช้เครื่องหมาย ?? (null coalesce) แทน

// Laravel 5.6…
{{ $foo or ‘default’ }}

// Laravel 5.7…
{{ $foo ?? ‘default’ }}

.
6. เมธอด Route::redirect() จะมีเปลี่ยนโค้ด default ของ http status จาก 301 ไปเป็น 302 ครับ!
แต่หากอยากใช้เป็น 301 อยู่ก็สามารถใช้เมธอด permanentRedirect() ได้ครับ

// Return a 302 redirect…
Route::redirect(‘/foo’, ‘/bar’);

// Return a 301 redirect…
Route::redirect(‘/foo’, ‘/bar’, 301);

// Return a 301 redirect…
Route::permanentRedirect(‘/foo’, ‘/bar’);

.
.
จริงๆ ยังมีอีกหลายอย่างนะครับ ลองอ่านเพิ่มเติมได้ที่คู่มือของ Laravel ได้เลย http://bit.ly/2MWADfW

แนะนำ Laravel Package ไว้ทำโหมด “Under Construction”

แนะนำ Laravel Package ไว้ทำโหมด “Under Construction” ให้กับเว็บไซต์ของเราครับ สามารถตั้งรหัส 4 หลักได้ คือคนที่มีรหัสเท่านั้นถึงจะเข้าเว็บไซต์ของเราได้ ใช้ง่ายมาก ลองดูครับ

รายละเอียด: https://goo.gl/PBq35c

สรุป 39 คำสั่ง Laravel 5.5 ที่ใช้งานบ่อย

laravel55

สรุป 39 คำสั่ง! Laravel 5.5 ที่ใช้งานบ่อย
———–

1. แสดงผลตัวแปรต่างๆที่ไปที่ view
view(‘task.index’)->with(‘tasks’, Task::all());
หรือ
view(‘task.index’,[‘tasks’, Task::all()]);


2. route cache

php artisan route:cache

3. ล้าง route cache
php artisan route:clear

4. สร้าง csrf tokens field ให้กับฟอร์ม
{{ csrf_field(); }}

5. คำสั่งเกี่ยวกับการ Redirects

return redirect()->to(‘login’);

หรือ
return redirect(‘login’);

6. route redirect เช่น
return redirect()->route(‘home.index’);
return redirect()->route(‘home.show’,[‘id’, 99]);

7. redirect back() ใช้
redirect()->back();
หรือเขียนย่อๆ แค่นี้
back();

8. redirect ไปที่ route ที่ชื่อว่า home
home();

9. refresh หน้า
refresh();

10. redirect โดยใช้ action() เช่น
redirect()->action(‘ชื่อController@ชื่อmethod’);

11. สร้าง flash data session
redirect()->with([‘error’=>true,’message’=>’Whoops!’]);

12. aborting the request
abort(403,’คุณไม่มีสิทธิ์ใช้งานส่วนนี้’);

13. return json
return response()->json(User::all());

14. ดาวน์โหลดไฟล์
return response()->download(‘file1.pdf’,’file2.pdf’);
หรือถ้าต้องการแสดงที่ browser ก็ใช้
return response()->file(‘file1.pdf’);

15. รับ input ทั้งหมดจาก request
$request->all();

16.รับ input ยกเว้นบางตัวใช้ except
$request->except(‘_token’);

17. รับ input เฉพาะที่ต้องการใช้ only
$request->only([‘firstname’,’email’]);

18. ใช้ has จะ return false ถ้ามีตัวแปร และว่าง
if ($request->has(‘file’)) {

}

19. จะ return true ถ้ามีตัวแปร และว่าง
if ($request->exists(’email’)) {

}

20. รับ request ทีละฟิลด์
$request->input(’email’)

21. ถ้าเป็น JSON Input ก็ใช้เหมือนกัน อ้างจุดไปที่ object

22. Accessors = getting data ของ Model

23. Mutators = setting data ของ Model

24. หากอยากซ่อนบางฟิลด์ ก็กำหนดที่ Model นั้นๆ ($hidden) เช่น

class Contact extends Model {

public $hidden = [‘password’,’email’];

หรือ เลือกแสดงบางฟิดล์ก็ใช้ ($visible) เช่น

public $visible = [‘name’,’gpa’];
}

25. เข้าถึงข้อมูลของ user โดยใช้ request เช่นอยากได้อีเมล์ ก็เขียนง่ายๆ ตามนี้
$request->user()->email
หรือเขียนที่ view ก็ได้ เช่น
ยินดีต้อนรับคุณ {{ auth()->user()->name }}

26. ตั้งชื่อให้กับ route เพื่อง่ายต่อการเรียกใช้งาน โดยระบุ ->name(‘ชื่อ route’) เช่น
Route::get(‘/home’, ‘HomeController@index’)->name(‘home’);

27. config cache ใช้คำสั่ง
php artisan config:cache

28. ล้าง config cache ใช้คำสั่ง
php artisan config:clear

29. ล้าง application cache
php artisan cache:clear

30. Compiling Assets (Laravel Mix)
ติดตั้ง Dependencies ใช้คำสั่ง npm install
รัน Laravel Mix ใช้คำสั่ง npm run dev หรือ npm run watch
หรือหากต้องการรันเพื่อ production ก็ใช้คำสั่ง npm run production

31. ดูว่า Laravel เตรียม frontend preset อะไรให้เราบ้างใช้คำสั่ง (ปกติก็มี bootstrap, vue, react, none)
php artisan preset –help

32. สร้างระบบ Authentication ใช้คำสั่ง (มีระบบล็อกอินมาให้เลย)
php artisan make:auth

33. แสดง route ทั้งหมดของ app เรา
php artisan route:list

34. คำสั่งสำหรับลบตารางทั้งหมด และสั่ง migrate ใหม่อีกครั้ง
php artisan migrate:fresh

35. คำสั่งแบ่งหน้า ใช้
$persons = Person::paginate(20);
หรือ
$persons = Person::simplePaginate(15);

36. ตัวอย่างการทำ Validation (เขียนที่ controller)
$request->validate([

‘title’ => ‘required’,

‘price’ => ‘required|numeric’,

‘image’ => ‘mimes:jpeg,jpg,png’
],[

‘title.required’ => ‘กรุณากรอกชื่อสินค้าด้วย’,

price.required’ => ‘กรุณากรอกราคา’,

‘price.numeric’ => ‘กรุณากรอกราคาเป็นตัวเลขเท่านั้น’,

‘image.mimes’ => ‘ไฟล์ที่เลือกต้องนามสกุล jpeg, jpg, png เท่านั้น’

]);

 

37. แสดงวันที่และเวลาปัจจุบัน ใช้คำสั่ง now() หรือ วันที่อย่างเดียวใช้ today() เช่น
{{ now() }}
{{ today() }}

 

38. ใช้ Bcrypt เพื่อ hash รหัสผ่าน เช่น
$password = bcrypt(‘1234’);

 

39. เรียกค่า config จากไฟล์ .env ใช้ config() แต่ตอนอ้างถึงใช้เครื่องหมายจุด แทน _ (underscore) เช่น
$value = config(‘app.timezone’);

 

สุดท้ายหากสนใจเขียน Laravel 5.5 แนะนำ e-Book เล่มนี้ครับ

http://www.codingthailand.com/laravel55ebook/
ขอบคุณครับ

โค้ชเอก
Coding Mentor

Laravel 5.4 มาแล้ว!!

ตอนนี้ Laravel ได้ออกเวอร์ชัน 5.4 มาแล้วนะครับ มาดู features ใหม่กันหน่อยว่ามีอะไรบ้าง คร่าวๆก็มี ดังนี้

1. มีการเพิ่ม middleware 2 ตัว คือ TrimStrings และ ConvertEmptyStringsToNull ประโยชน์คือ ในทุกๆการ request ของฟอร์ม laravel จะทำการตัดช่องว่าง (white space) และแปลงค่าว่าง (empty) ต่างๆให้ไปเป็นค่า null ให้เราแบบอัตโนมัติครับ ต่อไปก็ไม่ต้องเขียน trim หรือแปลงเป็น null เองแล้วนะ

.
2. อัปเกรด และเปลี่ยนชื่อ Laravel Elixir เป็น Laravel Mix และใช้ Webpack!! แทน Gulp ครับ

.
3. มี Laravel Dusk เพิ่มเข้ามา เป็นเครื่องมือสำหรับ testing แบบ end-to-end

.
4. มี Blade Components และ Slots เพื่อให้การใช้งาน templates ยืดหยุ่นมากขึ้น

.
5. มี Markdown Mailables ไว้สำหรับสร้างและเขียน templates สำหรับส่งเมล และสามารถ custom เองได้ (เขียน css เองก็ได้)

ถ้าอยาก custom tempates ให้ใช้คำสั่ง

php artisan vendor:publish –tag=laravel-mail

เสร็จแล้วสามารถแก้ template ได้ที่โฟลเดอร์ vendor/mail ครับ

.
6. Laravel 5.4 ใช้ MySQL 5.7 และใช้ character set เป็น utf8mb4 (default) ถ้าใครใช้ MySQL ที่เวอร์ชันต่ำกว่า 5.7.7 หรือ MariaDB จะต้องเขียนโค้ดเพิ่มนิดหน่อยนะครับ ไม่งั้นจะ error ดูได้ที่นี่ https://goo.gl/VUxAlZ

และอื่นๆ อีกหลายตัว ครับ อ่านเพิ่มเติมได้ที่นี่: https://goo.gl/9AIU3H

.
สำหรับเวอร์ชันต่อไปจะเป็น Laravel 5.5 นะครับ ออกราวๆเดือน ก.ค. ปีนี้ และจะรองรับ PHP 7 ขึ้นไป (แนะนำ 7.1)

.
สำหรับคนที่เขียน PHP ถ้าสร้างโปรเจคใหม่ อย่าลืมเขียนรองรับ PHP 7.1 ไว้เลยนะครับ เพราะเดี๋ยว PHP 5.6 จะหมด support เรื่องความปลอดภัยสิ้นปีหน้านี้แล้ว (2561)

.
ส่วนมือใหม่ที่อยากใช้ Laravel อย่ากังวลกับเวอร์ชันครับ เพราะ concept การเขียนยังเหมือนเดิม เริ่มเวอร์ชันไหนก็ได้นะครับ ขอให้ได้เริ่มเป็นพอ 🙂


โค้ชเอก

สรุป 11 สิ่งใหม่ที่น่าสนใจใน “Laravel 5.5” ครับ

สรุป 11 สิ่งใหม่ที่น่าสนใจใน “Laravel 5.5” ครับ ปลายๆเดือน ก.ค. 60 นี้น่าจะได้ใช้กันแล้ว 

1. Hosting หรือ Server ที่ใช้ต้องรองรับ PHP 7.0 ขึ้นไปครับ ส่วน MySQL ถ้าให้ดีแนะนำเวอร์ชัน 5.7+ เลยครับผม

.
2. เป็น LTS (Long Term Support) ครับสำหรับเวอร์ชันนี้ จะมีการดูแล bug ต่างๆให้ 2 ปี และดูแลเรื่องความปลอดภัยให้ 3 ปี

.
3. กลับมาใช้ Whoops ซึ่งเป็น framework สำหรับแสดงและจัดการ errors ต่างๆ (เคยมีใช้ใน Laravel 4)

.
4. หากเราใช้คำสั่ง php artisan vendor:publish จะมีเมนูให้เลือกครับว่าจะ publish provider หรือ tag ตัวไหน

.
5. มี Email Themes มาให้เลยครับ (ยืดหยุ่นกว่าเดิม) เขียนส่งเมล์ปุ๊บ ผู้รับเตรียมรับอีเมล์สวยๆได้เลย แถม custom จัดการ theme ได้ยืดหยุ่นกว่าเวอร์ชันก่อนหน้านี้

.
6. เราสามารถทดสอบการแสดงผลของ template mail ต่างๆ ได้บน Browser แล้วครับ

.
7. มีคำสั่ง migrate:fresh มาให้ครับ คือจะ drop table ทุกตัว และ migrate อีกครั้ง (สะดวกมาก)

.
8. มี Automatic Package Discovery ให้ใช้ครับ สำหรับคนที่เขียน Package เอง ตัว Laravel จะ register Service Provider และ Facade ให้เราอัตโนมัติเลยครับ โดยให้เราตั้งชื่อเล่น (aliases) และ providers ให้กับ package ของเราได้ในไฟล์ composer.json ส่วนคนใช้ก็สบายเลยครับ ติดตั้ง package เสร็จก็ใช้ได้ทันที ไม่ต้องเพิ่มเองแล้ว

.
9. เพิ่ม Frontend Presets มาให้ด้วยครับ เราสามารถเลือกได้ว่าจะใช้ frontend ตัวไหน ได้แก่ Bootstrap (css) , Vue, React หรือจะ custom เองก็ได้ ปกติ default จะเป็น Vue.js นะครับ แต่หากต้องการใช้ react ก็ใช้ได้ด้วยคำสั่ง php artisan preset react หรือไม่ต้องการใช้อะไรเลยก็ใช้คำสั่ง php artisan preset none

.
10. สามารถสร้างหรือตั้งกฏการตรวจสอบความถูกต้องของข้อมูลขึ้นมาเองได้ และกำหนด message ที่จะแสดงได้ด้วยครับ (Custom Validation Rules)

.
11. สามารถ debug พวก collection ต่างๆ ที่ซับซ้อนได้ ด้วยคำสั่ง dump() และ dd() (สามารถต่อคำสั่ง dump() ระหว่าง method ที่เชื่อมกันได้)

.
ตอนนี้ผมลองติดตั้งทดสอบดูแล้วครับ ถ้าใครอยากลองก็ลงผ่าน composer ได้นะครับ ด้วยคำสั่ง

composer create-project laravel/laravel <ชื่อโปรเจค> dev-develop

โค้ชเอก

Laravel 5.3 มาแล้วครับ!

53

ใน Laravel 5.3 คร่าวๆ จะมี Features ใหม่ ที่น่าสนใจ ดังนี้

– Laravel Scout เป็นระบบค้นหา (รองรับ full-text search) สำหรับ Eloquent ไม่ต้องเขียนเองแล้ว และมาพร้อมกับ Pagination ด้วย
– Laravel Mailable เป็นคลาสใหม่ สำหรับใช้ส่งเมล แน่นอนง่ายกว่าเดิม
– Laravel Passport เป็น package สำหรับ OAuth 2 สำหรับทำล็อกอินเชื่อมต่อ facebook, twitter และอื่นๆ
– Laravel Notifications เป็นระบบแจ้งเตือน ไว้แจ้งเตือน SMS, Email หรือ Slack ก็ได้
– Rollback one migration สามารถ rollback migration ทีละ step ได้แล้ว
– Customize simple pagination สามารถ Custom View ของการแบ่งหน้าได้แล้ว
– Blade Loop Variable ทำให้เราเข้าถึงและเขียนเกี่ยวกับตัวแปรภายใน Loop ได้ง่ายขึ้น เช่น count, first, last เป็นต้น
– Storing Uploaded Files สามารถอัพโหลดไฟล์แบบง่ายๆได้เพียงบรรทัดเดียว!

ตัวอย่างโค้ด

$request->file(‘inputfile’)->store(‘images’);

และก็มี method storeAs() ให้เรา custom ได้ด้วย จะ save ลง disk หรือ Amazon S3 ก็ได้ ด้วยการเขียนโค้ดเพียง 2-3 บรรทัดครับ

ดู features ทั้งหมด ได้ที่นี่
https://laravel.com/docs/5.3/releases

สำหรับคนที่ใช้ Laravel 5.2 อยู่ ดูการอัปเกรดได้ที่นี่
https://laravel.com/docs/master/upgrade#upgrade-5.3.0

แนะนำ Guzzle สำหรับทำ RESTful APIs (PHP)

สำหรับคนที่เขียน PHP อยากเขียนต่อกับ RESTful APIs หรือ Web Services แนะนำตัวนี้ครับ “Guzzle”

 

 

รายละเอียด
http://goo.gl/BKjZXv

– Guzzle เป็น PHP HTTP client ที่ใช้สำหรับส่ง HTTP requests และเชื่อมต่อกับ web services ครับ

– สามารถดึงข้อมูล เพิ่ม แก้ไข ลบ หรืออัพโหลดไฟล์ไปที่ web services ได้ง่ายมากเพียงใช้โค้ดไม่กี่บรรทัด

– สามารถเขียนเชื่อมกับ APIs เจ้าดังๆ ได้ไม่ว่าจะเป็น Twitter, Facebook, GitHub ได้สบายๆ

แน่นอนมันติดตั้งผ่าน Composer เราสามารถใช้ได้ทั้ง เขียน PHP แบบปกติ หรือใช้ PHP framework ก็ได้

 

ถ้าง่ายหน่อยสำหรับคนใช้ Yii Framework 2 ดูที่นี่
https://goo.gl/PLq6gg

สำหรับคนใช้ Laravel 5 ดูที่นี่
https://goo.gl/4kq0PT

ลองใช้ดูกันได้ครับ

รวมลิงก์ 11 library ที่น่าใช้สำหรับ Laravel 5

l55

1. Role-based Permissions for Laravel 5 (RBAC)
https://goo.gl/bMN7kU

2. Scaffold generator for Laravel 5 with bootstrap 3 (Gen CRUD)
https://goo.gl/KpxMNC

3. A package to backup your Laravel 5 app (Backup site and DB)
https://goo.gl/NNPKxX

4. An eloquent way of importing and exporting Excel and CSV files
https://goo.gl/dLCKuh

5. Get started with Laravel 5.2 and Angular (material)
https://goo.gl/PNKmbW

6. Simple laravel5 example for tutorial
https://goo.gl/MhA5Ru

7. jQuery DataTables API for Laravel 5
https://goo.gl/J44a0z

8. Lavalite – CMS built on Laravel 5.2
https://goo.gl/9wxP3G

9. A library to help you work with dates in multiple languages, based on Carbon.
https://goo.gl/5LGZsz

10. No CAPTCHA reCAPTCHA For Laravel.
https://goo.gl/vFiPsS

11. A MongoDB based Eloquent model and Query builder for Laravel
https://goo.gl/TUIZ1C