การเริ่มต้นอย่างรวดเร็ว
หมายเหตุ :: url ที่เราจะเรียกใช้งานในตอนเริ่มแรกคือ localhost หรือ 127.0.0.1 ตามด้วยชื่อโฟลเดอร์ของเว็บที่เราสร้าง แล้วตามด้วย public นะครับ ยกตัวอย่าง 127.0.0.1/taqmaninw/public นะครับ
บททนี้จะทำให้เราเห็นภาพรวมของ laravel นะครับ
<a name="installation"></a> ## การติดตั้ง
ถ้าไม่รู้จัก composer แนะนำไปอ่าน ที่นี้ ก่อน เริ่มจากใช้คำสั่ง
1 composer create-project laravel/laravel projectname --prefer-dist
หลังจากนั้น composer จะทำการดาวน์โหลดไฟล์ต่างๆ มาเก็บที่โฟลเดอร์ที่เรากำหนดชื่อไว้
หลังจากนั้นก็ทำความรู้จักกับ โครงสร้างโฟลเดอร์ของ laravel เริ่มแรกเราต้องไปกำหนดค่าต่างๆ ที่โฟลเดอร์ app/config ก่อนในนี้ก็จะมีการตั้งค่าให้มากมายแต่เราอาจต้องการแค่
<a name="routing"></a>
## Routing ( การจัดการเส้นทาง )
เราต้องกำหนด url ที่เราจะอนุญาตให้เข้าถึง ฟังก์ชันต่างก่อนที่ app/routes.php ตัวอย่างการสร้าง Route เบื้องต้น
1 Route::get('users', function()
2 {
3 return 'Users!';
4 });
ตอนนี้เมื่อเราพิมพ์ชื่อโปรเจคของเราบนบราวเซอร์แล้วตามด้วย /users เราจะเห็นคำว่า Users! แสดงอยู่
การสร้าง Route ไปหา Controller
1 Route::get('users', 'UserController@getIndex');
ตอนนี้ /user จะถูกส่งไปที่ฟังก์ชน getIndex ของ UserController
<br /><br />
<a name="creating-a-view"></a>
## การสร้าง View
ต่อมาเรามาสร้างไฟล์ที่จะใช้จัดการรูปแบบในการแสดงผลที่โฟลเดอร์ app/views เราสร้างไฟล์ที่ชื่อ layout.blade.php และ users.blade.phpต่อด้วย layout.blade.php
1 <html>
2 <body>
3 <h1>Laravel Quickstart</h1>
4
5 @yield('content')
6 </body>
7 </html>
ต่อมาในไฟล์ users.blade.php เราจะดึงไฟล์ layout มาลง
1 @extends('layout')
2
3 @section('content')
4 Users!
5 @stop
เพื่อความไม่งงว่าตัวแปรเหล่านี้คืออะไร ตามไปอ่านเรื่อง template เลยครับ
ถ้าเราจะแสดงไฟล์ view ที่เราสร้างก็ต้องอาศัย Route ดังตัวอย่าง
1 Route::get('users', function()
2 {
3 return View::make('users');
4 });
ต่อไปเราจะไปลุยดาต้าเบสกันนะครับ <br /> <a name="creating-a-migration"></a> ## การทำ Migration
เราจะใช้คลาส Migration ในการจัดการฐานข้อมูลนะครับ
เริ่มต้นด้วยการตั้งค่าในการเชื่อมต่อฐานข้อมูลก่อนที่ไฟล์ app/database ในค่าเริ่มต้นเเล้วอาเรย์ driverจะเป็น mysql แล้วเราก็เปลี่ยนค่าตรง mysql เป็นข้อมูลในการเชื่อมต่อฐานข้อมูลของเรา
ต่อมาในการสร้าง migration เราใช้ คำสั่ง artisan ใน commandline จากในโฟลเดอร์โปรเจคของเรา ตัวอย่าง
1 php artisan migrate:make create_users_table
ต่อมาไฟล์ migrration จะไปโผล่ที่โฟลเดอร์ app/database/migrations ในไฟล์จะมีฟังก์ชัร up และ down เราจะสร้าง Schema เพื่อการจัดการฐานข้อมูล
ตัวอย่างการสร้าง Schema
1 public function up()
2 {
3 Schema::create('users', function($table)
4 {
5 $table->increments('id');
6 $table->string('email')->unique();
7 $table->string('name');
8 $table->timestamps();
9 });
10 }
11
12 public function down()
13 {
14 Schema::drop('users');
15 }
ต่อมาเราก็รันคำสั่ง
1 php artisan migrate
ถ้าอยากย้อนคำสั่ง migrate เราต้องใช้คำสั่ง migrate:rollback
<br />
<a name="eloquent-orm"></a>
## Eloquent ORM
Eloquent คือ ชุดคำสั่งที่เราใช้ในการทำ sql query นั่นเองครับ ช่วยให้เราสะดวกสะบาย ทำงานได้รวดเร็วขึ้น เริ่มแรกเราต้องไปสร้าง model ที่โฟลเดอร์ app/models โดยตั้งชื่อว่า User.php ตัวอย่างการประกาศคลาสในโมเดล
1 class User extends Eloquent {}
ตัวอย่างการเรียกใช้ Eloquent Model ครับ
1 Route::get('users', function()
2 {
3 $users = User::all();
4
5 return View::make('users')->with('users', $users);
6 });
เมทอด allที่ต่อจากเนมสเปซ User จะคิวรี่ค่าทั้งหมดจากตาราง users ส่วนใน View เราใช้ฟังก์ชัน with เพื่อดึงเฉพาะคอลัมน์ user ครับ
<a name="displaying-data"></a> ## Displaying Data
ตัวอย่างการแสดงค่าที่มาจากฐานข้อมูลบนไฟล์ view ครับ
1 @extends('layout')
2
3 @section('content')
4 @foreach($users as $user)
5 <p>{{ $user->name }}</p>
6 @endforeach
7 @stop
ต่อไปเราต้องไปเรียนรู้เรื่อง Eloquent และ Blade หรือแวะเข้าไปอ่านเล่นๆ ก่อนที่เรื่อง Queues และ Unit Testing .ถ้าต้องการใช้งานในระดับสูงต่อก็ไปที่ IoC Container
มาเจาะลึกผังการทำงานของ Laravel กันครับ
ตอนที่ 1 Autoloading
มีอยู่ด้วยกัน 4 ช่วง Autoloading,Bootstrap,Application,Run เริ่มที่ Autoloading ก่อนครับ
- เริ่มจากไฟล์
index.phpครับ ช่วงที่เราตั้งค่าvhostเราจะตั้งให้เส้นทางที่เข้าถึงเริ่มแรก คือ/public/พอเริ่มเข้าถึงไฟล์index.phpทำการเรียกไฟล์autoload.phpจากโฟลเดอร์bootstrap - ในไฟล์
autoload.phpจะทำการตั้งค่าเวลาที่ตัวเว็บเริ่มทำงาน
- จากนั้นเราจะ เรียกไฟล์
autoload.phpจากโฟลเดอร์vendorขึ้นมา
- ที่เห็นชื่อยาวขนาดนี้เป็นเพราะถูกสุมมาจากการที่ใช้คำสั่ง
artisan dump autoloadเพื่อสร้าง รายชื่อของpackageใหม่นะครับ แต่ก่อนหน้านั้นเราจะทำการโหลดไฟล์packageทั้งหมดก่อน โดยเรียกไฟล์autoload_real.phpขึ้นมา
- ต่อมาใน ไฟล์
vendor/composer/autoload_real.phpจะทำการเรียกไฟล์Classloaderมาทำการสร้างเป็นวัตถุชื่อ$loaderแล้วก็
- เรียกไฟล์
autoload_classmapกับautoload_namespaceขึ้นมาซึ่งในไฟล์autoload_classmapจะเป็นรายชื่อของไฟล์packageทั้งหมดที่อยู่ในโฟลเดอร์vendorส่วนในไฟล์autoload_namespaceจะเป็นรายชื่อของตัวnamespaceที่ใช้เรียกroot pathของไฟล์packageนั้นครับ
- พอเรียกเสร็จก็จะส่งกลับมาที่ ไฟล์
autoloadแล้วก็ส่งค่าต่อไปให้ClassLoaderของlaravel
- ตามลงมาดูว่า
Classloaderของlaravelมันทำยังไงต่อนะครับ ฟังก์ชันregisterทำการเรียกใช้ ฟังก์ชันload
- ฟังก์ชัน
loadจะทำการเรียกโฟลเดอร์packageที่มีตามรายชื่อในตัวแปรclassที่ส่งมาตอนแรก
- เท่านี้ก็เสร็จการโหลด
packageในโฟลเดอร์vendorครับ อะแต่ยังไม่หมดนะครับ ยังเหลือ package ที่โฟลเดอร์ workbench เรียกใช้คลาสStarterเพื่อทำการลงทะเบียนpackageในโฟลเดอร์workbench
โฟลเดอร์ workbech คือส่วนที่เราใช้ในการพัฒนา package ในเครื่องเราซึ่งยังไม่เสร็จหรือว่าทำขึ้นใช้เอง เราก็จะมาเริ่มต้นจากตรงนี้
package ถือว่าเป็นส่วนสำคัญที่จะต้องรู้ก่อนใน laravel 4 นี้เลย การเขียน package เป็นจะทำให้เราเลือก php libraly ตัวไหนก็ได้บน packagist.org ซึ่งเป็นศูนย์รวมของ libraly ของ php ที่ใช้มาตรฐาน psr-0,psr-1,psr-2 มาสร้างเป็น pakage ใช้เอง ซึ่งผมก็ได้ศึกษาแล้วลองทำไปเเล้วหลายตัวครับ ไว้จบเรื่องนี้ เเล้วจะมาขียนเรื่องการสร้าง package ต่อครับ
ปล.ตัวแปร Laravel_Start ตอนแรกเราสามารถนำไปใช้ ลบกับค่าเวลาปัจจุบันเพื่อหาเวลาที่เว็บใช้ จัดการคำร้องขอ
ตอนที่ 2 Application
- ขั้นตอนนี้จะเป็นการเริ่มสร้างตัวออปเจคหลักของ เว็บกันแล้วนะครับ
เริ่มจากไฟล์
bootstrap/start.phpเราจะดำดิ่งลงไปดูในคลาส ` Application ตรงคลาสนี้เป็นตัวหลักที่คอยขับเคลื่อนเว็บไซต์ของเราเลยครับ เพราะ มีการเรียกใช้ คลาสเข้ามาจำนวนมาก ฟังก์ชันในนี้ ผมจะไม่พยายามไปดูให้ตาลาย ให้รู้ว่าเรา มีฟังก์ชันที่เราต้องเข้าใจ คือApp::share,App::bind,App::instance,App::makeเราไปดูต่อว่าเริ่มมาตัวclass Application`ทำอะไรต่อ - เนื่องจาก ทำการเรียกตัวคลาสเข้ามาแล้ว จึงทำการสร้างวัตถุใหม่ได้ทันทีเลยครับ สิ่งที่ต้องสร้างก่อนสามอันดับแรกเลยก็คือ
Class Exceptionใช้ในการจัดการข้อผิดพลาดClass Routingจัดการๆวิ่งของคำร้องขอClass Eventจัดการเหตุการณ์ต่าง ที่เกิดขึ้น
- กลับมาที่ ไฟล์
start.phpครับ ขั้นต่อมา เราจะทำการตรวจสถานะการทำงานของระบบนะครับ ว่าอยู่ในโหมดไหน ตรงนี้มีประโยชน์มากในกรณีเมื่อเรากำลังพัฒนาอยู่ก็ตั้งให้เป็นdevelopmentส่วนจะไปกำหนดที่ไหนค่อยมาพูดกันอีกทีครับ
- ทำการโหลดไฟล์
path.phpซึ่งจะเป็นclassใช้ในการกำหนดเส้นทางการเข้าหาโฟลเดอร์ต่างๆ
- ทำการเรียกใช้งานตัว
laravelละครับตรงนี้จะเป็นการ เรียกไฟล์startของตัวlaravelขึ้นมา
ตอนที่ 3 Bootstrap
- laravel เริ่มการตรวจว่ามีการติตตั้ง
Mcryptไหม
- ต่อมาก็ตรวจสภาวะการตั้งค่าก่อนว่าเรากำลัง ตั้งให้อยู่ในสถานะการทอบสอบไหม
- คลาส
Facadeจะทำการเคลียร์ ตัวแทนของมัน แล้วก็สร้างขึ้นใหม่
- ทำการโหลดข้อมูลการตั้งค่าจากตัวแปร
$envขึ้นมาใส่ให้คลาสConfigครับ แล้วสร้างตัวแทนให้คลาสConfig
- ทำการตั้งค่าวันเวลาโดยโหลดค่ามาจากตัวแปรในไฟล์
app.php
- โหลดค่าชื่อย่อจากที่ไฟล์
app.phpมา
มาให้ฟังก์ชัน getInstance มาทำการลงทะเบียนไว้

- ทำการอนุญาตให้ใช้คำร้องขอชนิด
putใช้ทำการแก้ไขข้อมูล กับdeleteใช้ในการลบข้อมูล เพื่อใช้ตอนทำrestfulในกรณีที่firewallไม่อนุญาตุให้เมทอดสองอันนี้ผ่าน เราจึงจำเป็นต้องทำการเปลี่ยนส่วนหัวของเมทอดpostให้กลายเป็นสองเมทอดที่โดนบล็อก
- ทำการวมคลาสทุกตัวที่โหลดมาเข้าด้วยกัน
$config['providers']คือรายชื่อคลาสที่อยู่ในไฟล์app.php
- เรียกใช้ฟังก์ชัน
$app->boot()เพื่อเริ่มต้นการทำงาน เเล้วเรียกไฟล์global.phpซึ่งเป็นไฟล์ที่เราสามารถใช้กำหนดค่าเริ่มต้นเองได้
- รองสุดท้ายดึงไฟล์ที่เราใช้กำหนดสภาวะการตั้งค่าขึ้นมา
- สุดท้ายในบทนี้แล้วครับเรียกไฟล์
routes.phpจบตอนครับ
ตอนที่ 4 Run
ตอนสุดท้ายแล้วครับ เราใกล้ได้คำตอบกลับหรือ Response
- ทำการเขียน
session - ค้นหา
Routeที่ส่งมาว่าตรงกับตัวที่่กำหนดไว้ไหม - สั่งให้
filterเช่นbefore,afterทำงาน - สร้างคำตอบกลับหรือ
Response - ส่งคำตอบกลับ
- เรียกใช้
after filterอย่างเช่นlog
จบแล้วครับกว่าจะได้คำตอบกลับหนึ่งครั้งยาวนานไหมครับ
ที่มา :: Kenny Mayer Per Your Request