การเริ่มต้นอย่างรวดเร็ว

หมายเหตุ :: 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 ก่อนครับ

  1. เริ่มจากไฟล์ index.php ครับ ช่วงที่เราตั้งค่า vhost เราจะตั้งให้เส้นทางที่เข้าถึงเริ่มแรก คือ /public/ พอเริ่มเข้าถึงไฟล์ index.php ทำการเรียกไฟล์ autoload.php จากโฟลเดอร์ bootstrap
  2. ในไฟล์ autoload.php จะทำการตั้งค่าเวลาที่ตัวเว็บเริ่มทำงาน
  3. จากนั้นเราจะ เรียกไฟล์ autoload.php จากโฟลเดอร์ vendor ขึ้นมา
  4. ที่เห็นชื่อยาวขนาดนี้เป็นเพราะถูกสุมมาจากการที่ใช้คำสั่งartisan dump autoload เพื่อสร้าง รายชื่อของ package ใหม่นะครับ แต่ก่อนหน้านั้นเราจะทำการโหลดไฟล์ package ทั้งหมดก่อน โดยเรียกไฟล์ autoload_real.php ขึ้นมา
  5. ต่อมาใน ไฟล์ vendor/composer/autoload_real.php จะทำการเรียกไฟล์ Classloader มาทำการสร้างเป็นวัตถุชื่อ $loader แล้วก็
  6. เรียกไฟล์ autoload_classmap กับ autoload_namespaceขึ้นมาซึ่งในไฟล์ autoload_classmap จะเป็นรายชื่อของไฟล์ package ทั้งหมดที่อยู่ในโฟลเดอร์ vendor ส่วนในไฟล์ autoload_namespace จะเป็นรายชื่อของตัว namespace ที่ใช้เรียก root path ของไฟล์ package นั้นครับ
  7. พอเรียกเสร็จก็จะส่งกลับมาที่ ไฟล์ autoload แล้วก็ส่งค่าต่อไปให้ ClassLoader ของ laravel
  8. ตามลงมาดูว่า Classloaderของ laravel มันทำยังไงต่อนะครับ ฟังก์ชัน registerทำการเรียกใช้ ฟังก์ชัน load
  9. ฟังก์ชัน loadจะทำการเรียกโฟลเดอร์ package ที่มีตามรายชื่อในตัวแปร classที่ส่งมาตอนแรก
  10. เท่านี้ก็เสร็จการโหลด 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

  1. ขั้นตอนนี้จะเป็นการเริ่มสร้างตัวออปเจคหลักของ เว็บกันแล้วนะครับ เริ่มจากไฟล์ bootstrap/start.php เราจะดำดิ่งลงไปดูในคลาส ` Application ![](http://resource.thaicreate.com/upload/stock/20130718073801.png?v=1001) ตรงคลาสนี้เป็นตัวหลักที่คอยขับเคลื่อนเว็บไซต์ของเราเลยครับ เพราะ มีการเรียกใช้ คลาสเข้ามาจำนวนมาก ฟังก์ชันในนี้ ผมจะไม่พยายามไปดูให้ตาลาย ให้รู้ว่าเรา มีฟังก์ชันที่เราต้องเข้าใจ คือ App::share,App::bind,App::instance,App::make เราไปดูต่อว่าเริ่มมาตัว class Application`ทำอะไรต่อ
  2. เนื่องจาก ทำการเรียกตัวคลาสเข้ามาแล้ว จึงทำการสร้างวัตถุใหม่ได้ทันทีเลยครับ สิ่งที่ต้องสร้างก่อนสามอันดับแรกเลยก็คือ Class Exception ใช้ในการจัดการข้อผิดพลาด Class Routing จัดการๆวิ่งของคำร้องขอ Class Event จัดการเหตุการณ์ต่าง ที่เกิดขึ้น
  3. กลับมาที่ ไฟล์ start.php ครับ ขั้นต่อมา เราจะทำการตรวจสถานะการทำงานของระบบนะครับ ว่าอยู่ในโหมดไหน ตรงนี้มีประโยชน์มากในกรณีเมื่อเรากำลังพัฒนาอยู่ก็ตั้งให้เป็น development ส่วนจะไปกำหนดที่ไหนค่อยมาพูดกันอีกทีครับ
  4. ทำการโหลดไฟล์ path.php ซึ่งจะเป็น class ใช้ในการกำหนดเส้นทางการเข้าหาโฟลเดอร์ต่างๆ
  5. ทำการเรียกใช้งานตัว laravel ละครับตรงนี้จะเป็นการ เรียกไฟล์ start ของตัว laravel ขึ้นมา

ตอนที่ 3 Bootstrap

  1. laravel เริ่มการตรวจว่ามีการติตตั้ง Mcrypt ไหม
  2. ต่อมาก็ตรวจสภาวะการตั้งค่าก่อนว่าเรากำลัง ตั้งให้อยู่ในสถานะการทอบสอบไหม
  3. คลาส Facade จะทำการเคลียร์ ตัวแทนของมัน แล้วก็สร้างขึ้นใหม่
  4. ทำการโหลดข้อมูลการตั้งค่าจากตัวแปร $env ขึ้นมาใส่ให้คลาส Config ครับ แล้วสร้างตัวแทนให้คลาส Config
  5. ทำการตั้งค่าวันเวลาโดยโหลดค่ามาจากตัวแปรในไฟล์ app.php
  6. โหลดค่าชื่อย่อจากที่ไฟล์ app.php มา

มาให้ฟังก์ชัน getInstance มาทำการลงทะเบียนไว้

  1. ทำการอนุญาตให้ใช้คำร้องขอชนิด put ใช้ทำการแก้ไขข้อมูล กับ delete ใช้ในการลบข้อมูล เพื่อใช้ตอนทำ restful ในกรณีที่ firewall ไม่อนุญาตุให้เมทอดสองอันนี้ผ่าน เราจึงจำเป็นต้องทำการเปลี่ยนส่วนหัวของเมทอด post ให้กลายเป็นสองเมทอดที่โดนบล็อก
  2. ทำการวมคลาสทุกตัวที่โหลดมาเข้าด้วยกัน $config['providers'] คือรายชื่อคลาสที่อยู่ในไฟล์ app.php
  3. เรียกใช้ฟังก์ชัน $app->boot() เพื่อเริ่มต้นการทำงาน เเล้วเรียกไฟล์ global.php ซึ่งเป็นไฟล์ที่เราสามารถใช้กำหนดค่าเริ่มต้นเองได้
  4. รองสุดท้ายดึงไฟล์ที่เราใช้กำหนดสภาวะการตั้งค่าขึ้นมา
  5. สุดท้ายในบทนี้แล้วครับเรียกไฟล์ routes.php จบตอนครับ

ตอนที่ 4 Run

ตอนสุดท้ายแล้วครับ เราใกล้ได้คำตอบกลับหรือ Response

  1. ทำการเขียน session
  2. ค้นหา Route ที่ส่งมาว่าตรงกับตัวที่่กำหนดไว้ไหม
  3. สั่งให้ filter เช่น before,after ทำงาน
  4. สร้างคำตอบกลับหรือ Response
  5. ส่งคำตอบกลับ
  6. เรียกใช้ after filter อย่างเช่น log

จบแล้วครับกว่าจะได้คำตอบกลับหนึ่งครั้งยาวนานไหมครับ

ที่มา :: Kenny Mayer Per Your Request