เริ่มต้นเรียนรู้ Laravel PHP Framework

Laravel เป็น PHP Framework น้องใหม่มาแรงอีกเจ้าหนึ่ง ที่ได้รวมเอาข้อดีจากหลายๆ Framework ของภาษาอื่นๆ (Ruby on Rails, ASP.Net MVC, Sinatra) มาประกอบกันขึ้น รวมถึงได้นำเอา Composer มาเป็นตัวจัดการ package อีกด้วย (ไม่จำเป็นต้องไปหาดาวน์โหลดเหมือนเดิม แค่ระบุว่าต้องการอะไร เวอร์ชันไหนเท่านั้น) มีการสร้างฟังก์ชันพื้นฐานที่จำเป็นต้องใช้สำหรับทุกๆ โปรเจ็คไว้ให้เลย ไม่ว่าจะเป็น authentication, routing, sessionscaching และยังมี IoC (inversion of control), migration system, unit testing เพื่อเพิ่มความสะดวกในการพัฒนาโปรเจ็คของเราด้วย ^^

เอาล่ะหลังจากได้ทำความรู้จักกับ Laravel พอหอมปากหอมคอแล้วก็มาลองใช้งานเจ้า Laravel ดูกันหน่อยดีกว่าครับ ก่อนอื่นเลย เพื่อนๆ ต้องติดตั้ง composer ก่อนนะครับ จากนั้นก็สั่งให้ composer ติดตั้ง Lavavel ให้เราด้วยคำสั่ง

composer create-project laravel/laravel project-name --prefer-dist

ตรง project-name ก็ให้เปลี่ยนเป็นชื่อโปรเจ็คของเรานะครับ อย่างตอนนี้ผมก็จะเปลี่ยนเป็น quickstart ก็แล้วกันครับ ก็จะได้เป็น

composer create-project laravel/laravel quickstart --prefer-dist

ติดตั้ง Laravel PHP Framework ด้วย Composer

ขั้นตอนนี้อาจจะต้องใช้เวลาในการดาวน์โหลดนิดหน่อยนะครับ หลังจากติดตั้งเสร็จโปรเจ็คของเราก็จะมีโฟลเดอร์ประมาณนี้ครับ

Laravel Project Structure

ส่วนโฟลเดอร์ที่เราต้องไปคลุกคลีอยู่บ่อยๆ ก็จะเป็น app ครับภายใน app ก็จะมี controllers, views, models config ที่เพื่อนๆ คงจะคุ้นเคยกันดีสำหรับใคร ที่พัฒนาโปรเจ็คแบบ MVC ^^

app folder laravel

ก่อนอื่นเลยเราต้องมาสร้าง route สำหรับโปรเจ็คของเราก่อน ซึ่งจะอยู่ในไฟล์ routes.php ที่อยู่ในโฟลเดอร์ app ครับ ซึ่งการสร้าง route จะเป็นการบอกว่า ถ้าเข้ามาทางนี้ จะให้ทำอะไรต่อ เช่น ถ้าเข้ามาที่ /users จะให้แสดงคำว่า Users! ออกมาก็ให้เราเพิ่ม route เข้าไปในไฟล์ routes.php ประมาณนี้ครับ

Route::get('/users', function(){
return 'Users!';
});

ถึงตรงนี้ถ้าเราเข้ามาที่ /users ผ่านเบราว์เซอร์ ก็จะแสดงคำว่า Users! ขึ้นมาครับ ถ้าได้ผลแบบนี้แสดงว่ามาถูกทางแล้วครับ ^^

Users routing

Route สามารถชี้ไปยังฟังก์ชันของ Controller เลยก็ได้ครับ เช่น ถ้าอยากให้ /users ชี้ไปที่ฟังก์ชัน getIndex ของ UserController ก็ให้แก้ไขดังนี้ครับ

Route::get('/users', 'UserController@getIndex');

สามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับ controller routing ได้ที่ controller documentation ครับ

รู้จักกับ Route แล้วก็มาถึง Views กันบ้างครับ โดยไฟล์ที่เป็น view จะถูกเก็บไว้ในโฟลเดอร์ app/views ครับ Laravel มี template system ชื่อว่า Blade จากตรงนี้เราจะสร้างไฟล์ขึ้นมาอีก 2 ไฟล์ที่เป็น view ครับ คือไฟล์ layout.blade.php และ users.blade.php โดยมีโค้ดดังนี้ครับ

ไฟล์ layout.blade.php เป็นโครงสร้างหลักของเว็บเรานะครับ

<html>
    <body>
        <h1>Laravel Quickstart</h1>

        @yield('content')
    </body>
</html>

ไฟล์ users.blade.php จะเป็น view ที่แสดงรายชื่อของ user ที่สืบทอด (inherit) ข้อมูลมาจาก layout.blade.php อีกทีครับ

@extends('layout')

@section('content')
    Users!
@stop

หลังจากสร้าง views เสร็จแล้วเราก็ต้องเปลี่ยน routes ซะหน่อยเพื่อบอกให้รู้ว่าเราจะใช้ view แล้วนะ โดยการ return View::make(‘…’) แทน Users! ครับ

Route::get('/users', function(){
    return View::make('users');
});

เอาล่ะครับมาถึงตรงนี้ เราก็ได้ route และ view ของเราแล้วต่อไปก็จะเป็นการจัดการกับฐานข้อมูล (database layer) กันบ้าง ในการจัดการกับฐานข้อมูลเราจะใช้ระบบ migration ของ Laravel ที่จะช่วยให้การทำงานกับฐานข้อมูลของเรารวดเร็วและเป็นระบบมากขึ้น ก่อนอื่นก็ให้เราไปตั้งค่าว่าจะใช้ฐานข้อมูลอะไรในไฟล์ app/config/database.php ซึ่งค่าเริ่มต้นที่ Laravel เลือกให้จะเป็น MySQL ครับ ในบทความนี้ผมเลือกใช้ sqlite ก็จะต้องไปเปลี่ยน driver จาก mysql เป็น sqlite ซะก่อน

Laravel มี Artisan CLI ที่เป็นอีกหนึ่งตัวช่วยให้การพัฒนาของเราเร็วขึ้น ในส่วนนี้เราจะใช้ artisan เพื่อสร้างไฟล์ migration ของฐานข้อมูล ซึ่งตอนนี้เราต้องการสร้าง table user เพื่อเก็บข้อมูล user โดยเข้าไปที่โฟลเดอร์โปรเจ็คของเราและรันคำสั่ง สร้างไฟล์ migration ดังนี้ครับ

php artisan migrate:make create_user_table

หลังจากรันคำสั่งเสร็จ Laravel จะมีการสร้างไฟล์ migration ขึ้นมาเก็บไว้ที่ app/database/migrations

Artisan migrate user table

ซึ่งภายในไฟล์ xxx_create_user_table.php ก็จะมีฟังก์ชัน up() และ down() เราก็แก้ไขฟังก์ชันทั้งสองดังนี้ครับ

public function up()
{
    Schema::create('user', function($table)
    {
        $table->increments('id');
        $table->string('email')->unique();
        $table->string('name');
        $table->timestamps();
    });
}

public function down()
{
    Schema::drop('user');
}

จากนั้นก็ลับไปที่ command-line ของเราและสั่งให้ทำการ migrate ฐานข้อมูลด้วยคำสั่ง

php artisan migrate

เท่านี้ก็เรียบร้อยครับ
Artisan migrate database

ต่อไปก็เป็น Model ทีจะดึงข้อมูลจากฐานข้อมูลมาแสดงกันแล้ว Laravel มี Eloquent ORM ที่ช่วยให้เราสะดวกสบายขึ้นในการดึงข้อมูลมาแสดง ก่อนอื่นก็สร้าง model ขึ้นมาก่อนและเก็บไว้ที่ app/models ตัวอย่างนี้ผมก็จะตั้งชื่อ model ว่า User.php ภายในจะมีโค้ดประมาณนี้ครับ

<?php
class User extends Eloquent {}

ไม่ต้องตกใจนะครับมีแค่นี้จริงๆ ^^ จากนั้นก็ไปปรับโค้ดที่ routes.php ซะหน่อยให้ดึงข้อมูล user มาแสดงแทนที่จะเป็น User! ในช่วงต้น โดยใช้ฟังก์ชัน all() เพื่อดึงข้อมูลและส่งต่อไปยัง view ด้วยฟังก์ชัน with ครับ

Route::get('users', function()
{
    $users = User::all();

    return View::make('users')->with('users', $users);
});

แก้ไข view (ไฟล์ users.blade.php) เพื่อแสดงข้อมูล user ที่รับมาจาก route ข้างบนครับ

@extends('layout')

@section('content')
    @foreach($users as $user)
        <p>{{ $user->name }}</p>
    @endforeach
@stop

เท่านี้ก็เรียบร้อยครับ หวังว่าเพื่อนๆ จะสนุกกับการใช้งาน Laravel นะครับ ^^