187
คู่มือการใช้งาน Laravel 4 ฉบับแปล Page 1 of 187

คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

  • Upload
    vudiep

  • View
    338

  • Download
    17

Embed Size (px)

Citation preview

Page 1: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

คมอการใชงาน Laravel 4 ฉบบแปล

Page 1 of 187

Page 2: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

กอนอาน

เมอหลายเดอนกอนผมพยายามมองหา framework ตวใหมทจะมาใชแทน Cakephp มาเจอกบ Laravelเพราะเขาไปอานบทความใน nettut บอยเลยลองใชดเเลวพบวา โคดจานวนมากบท Cakephpสามารถยอเหลอไมกบรรทดบน Laravel และทสาคญมากสาหรบผม การทไมตองมาพมพ $this ทกครง มนสดยอดมากผมใหคะแนนเกาเตมสบ สาหรบเรองความงายในการอานโคด ผมนกถงสมมตถาเรานาเอาไปทาโปรเจคขนาดใหญการทโคดอานงายมาก แคอานคมอเสรจ แลวมานงไลโคดทไดทาไวเเลว จะเปนอะไรทเรยนรไดเรวมาก แตขอเสยของ laravel กคอไมมระบบอตโนมตมาให Route กตองเขยนเอง UI กไมมตวสรางอตโนมตให

เนอหาตอไปนผมไดทาการแปล มาจากคมอหลกทอยบนเวบ ซงทาการแปลตามคาอธบาย และเสรมความเขาใจตามทผมไดทดลองทามาหลายเดอน และบางหวขอ ในหนงสอนเปนเรองหลกการของ php 5.3 ทงเรองnamespace,reflectionclass สาหรบคนทไมเคยรมากอนอาจ จะงงเหมอนผม ในตอนแรก ซงจะเขยนไวในนกจะยาวไปเพอการนนผมจงไดทาการอธบายเพมเตมไวท blog ของผม ในหนงสอน อาจมขอผดพลาดมากมายซงผมอยากใหใครทเหนขอผดพลาด ชวยทาการแจงใหผมทราบ หรอเขาไปชวยกนแกไขและเพมเตมตวอยางการใชงานฟงกชนตางๆ ไดท github

Page 2 of 187

Page 3: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

แนะนาตวกนกอน

ปรชญาของ LaravelLaravel เปน php framework ทเนนไปทความเรยบงายของการใชงานตวแปรตางๆ .เราเชอวาในการพฒนาเวบของคณตองเตมไปดวยความสนกสนานแนนอน,ประสบการณความคดสรางสรรคทจะตอบสนองความตองการอยางแทจรง.Laravel พยายามลดงานในระหวางการพฒนาโดยสรางระบบสาเรจรปมาใหอยาง authentication, routing, sessions,และ caching.

Laravel ทจะเปนหนงใน เครองมอในการพฒนาทนกพฒนาชนชอบและสามารถใชงานไดโดยทไมตองเสยสละฟงกชนไหนไปเลย เราเชอวา นกพฒนาทมความสขจะสรางโคดทเยยมยอดเราพยายามนาสงทดของภาษาอนๆ เชน Ruby on Rails, ASP.NET MVC, และ Sinatra เขามาผสมผสานเขากบlaravel

Laravel เตรยมเครองมอทใชเพอการสรางเวบแอพลเคชน ทยดหยนดวย inversion of control container,ระบบmigration , และการทา unit testing ทแสนงายดาย

เรยนร Laravelหนงในทางเลอกทดคอการศกษาคมอการใชงาน หรอซอหนงสอในนครบ

Code Bright by Dayle ReesLaravel Testing Decoded by Jeffrey WayLaravel From Aprentice to Artisan by Taylor Otwell

นกพฒนาหลก

Laravel ถกสรางโดย Taylor Otwell, และ Dayle Rees, Shawn McCool, Jeffrey Way, Jason Lewis, Ben Corlett,Franz Liedke, Dries Vints, Mior Muhammed Zaki, และ Phil Sturgeon.

Page 3 of 187

Page 4: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ผสนบสนน Laravel

UserScapeCartalystElli Davis - Toronto RealtorJay Banks - Vancouver Lofts & CondosJulie Kinnear - Toronto MLSJamie Sarner - Toronto Real Estate

Page 4 of 187

Page 5: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Installationการตดตง laravel

Install ComposerLaravel ใช Composer ในการจดการไลบราลตางๆ รวมจนถงคลาสหลกของระบบ เรมแรกเราตองไปโหลด

composer.phar. เราจะไดไฟลทมนามสกลเปน phar มาแลวเอาไปวางไวท usr/local/bin เพอใหระบบมองเหน

บนวนโดเราม Windows installer อยากรเพมเตมเขาไปดไดบลอกของผมไดครบ

การตดตง Laravel

ใช Composer ในการตดตง

พมพคาสงขางลางไปท commandline composer จะทาการดาวนโหลดมาลงตรงทเราเรยกใช

composer create-project laravel/laravel

ดาวนโหลดเอง

เมอตดตง laravel เวอรชนลาสด แลวกแตกไฟลไปลงทโฟลเดอรของ server เปด command lineเลอกทอยใหตรงกบทเอา laravel ไปวางแลวรนคาสง php composer.phar install (หรอ composer install) กเสรจสน

ถาเราตองการอพเดทกใชคาสง php composer.phar update

ความตองการของระบบ

PHP >= 5.3.7MCrypt PHP Extension

Page 5 of 187

Page 6: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การตงคา

laravel ไมไดตองการปรบแตงอะไรมากเพยงแคเราเขาไปท app/config/app.php โดยอาจปรบแค timezone กบ locale

Note: และมคา key ทอยใน app/config/app.php. เราตองใชคาสง php artisan key:generateเพอสรางคยทจะใชสราง

private key ในการสรางรหสผาน hash ในระบบ

สทธ

laravel ตองการสทธในการอานเขยนโฟลเดอร app/storage

เสนทาง

การกาหนดเสนทางสามารถทาไดท bootstrap/paths.php

URLs ทสวยงามlaravel เตรยมไฟล public/.htaccess ทอนญาตใหเราเรยกใชงานโดยไมตองใส index.php. โดยตองการใชงานขอ

mod_rewrite บน server กอน

Page 6 of 187

Page 7: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Laravel Lifecycle

ตอนท 1 Autoloading

มาดวฏจกรการทางานของ Laravel กนครบ มอยดวยกน 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 ขนมา

Page 7 of 187

Page 8: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

5. ตอมาใน ไฟล vendor/composer/autoload_real.php จะทาการเรยกไฟล Classloader มาทาการสรางเปนวตถชอ $loaderแลวก

6. เรยกไฟล autoload_classmap กบ autoload_namespaceขนมาซงในไฟล autoload_classmap จะเปนรายชอของไฟล packageทงหมดทอยในโฟลเดอร vendor สวนในไฟล autoload_namespace จะเปนรายชอของตว namespace ทใชเรยก root pathของไฟล package นนครบ

Page 8 of 187

Page 10: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

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 มาสรางเปนPage 10 of 187

Page 11: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

pakage ใชเอง ซงผมกไดศกษาแลวลองทาไปเเลวหลายตวครบ ไวจบเรองน เเลวจะมาขยนเรองการสราง packageตอครบ

ปล.ตวแปร Laravel_Start ตอนแรกเราสามารถนาไปใช ลบกบคาเวลาปจจบนเพอหาเวลาทเวบใช จดการคารองขอ

ตอนท 2 Application

1. ขนตอนนจะเปนการเรมสรางตวออปเจคหลกของ เวบกนแลวนะครบเรมจากไฟล bootstrap/start.php เราจะดาดงลงไปดในคลาส Application

ตรงคลาสนเปนตวหลกทคอยขบเคลอนเวบไซตของเราเลยครบ เพราะ มการเรยกใช คลาสเขามาจานวนมากฟงกชนในน ผมจะไมพยายามไปดใหตาลาย ใหรวาเรา มฟงกชนทเราตองเขาใจ คอ App::share,App::bind,App::instance,App::make เราไปดตอวาเรมมาตว class Applicationทาอะไรตอ

2. เนองจาก ทาการเรยกตวคลาสเขามาแลว จงทาการสรางวตถใหมไดทนทเลยครบสงทตองสรางกอนสามอนดบแรกเลยกคอ Class Exception ใชในการจดการขอผดพลาดClass Routing จดการๆวงของคารองขอClass Event จดการเหตการณตาง ทเกดขน

Page 11 of 187

Page 12: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

3. กลบมาท ไฟล start.php ครบ ขนตอมา เราจะทาการตรวจสถานะการทางานของระบบนะครบวาอยในโหมดไหน ตรงนมประโยชนมากในกรณเมอเรากาลงพฒนาอยกตงใหเปน developmentสวนจะไปกาหนดทไหนคอยมาพดกนอกทครบ

4. ทาการโหลดไฟล path.php ซงจะเปน classใชในการกาหนดเสนทางการเขาหาโฟลเดอรตางๆ

5. ทาการเรยกใชงานตว laravel ละครบตรงนจะเปนการ เรยกไฟล start ของตว laravel ขนมา

Page 12 of 187

Page 13: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตอนท 3 Bootstrap

1. laravel เรมการตรวจวามการตตตง Mcrypt ไหม

2. ตอมากตรวจสภาวะการตงคากอนวาเรากาลง ตงใหอยในสถานะการทอบสอบไหม

3. คลาส Facade จะทาการเคลยร ตวแทนของมนแลวกสรางขนใหม

Page 13 of 187

Page 14: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

4. ทาการโหลดขอมลการตงคาจากตวแปร $env ขนมาใสใหคลาส Config ครบ แลวสรางตวแทนใหคลาส Config

5. ทาการตงคาวนเวลาโดยโหลดคามาจากตวแปรในไฟล app.php

6. โหลดคาชอยอจากทไฟล app.php มา

มาใหฟงกชน getInstance มาทาการลงทะเบยนไว

7. ทาการอนญาตใหใชคารองขอชนด put ใชทาการแกไขขอมล กบ delete ใชในการลบขอมล เพอใชตอนทา restfulในกรณท firewall ไมอนญาตใหเมทอดสองอนนผาน เราจงจาเปนตองทาการเปลยนสวนหวของเมทอด postใหกลายเปนสองเมทอดทโดนบลอก

Page 14 of 187

Page 15: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

8. ทาการวมคลาสทกตวทโหลดมาเขาดวยกน $config['providers'] คอรายชอคลาสทอยในไฟล app.php

9. เรยกใชฟงกชน $app->boot() เพอเรมตนการทางาน เเลวเรยกไฟล global.phpซงเปนไฟลทเราสามารถใชกาหนดคาเรมตนเองได

10. รองสดทายดงไฟลทเราใชกาหนดสภาวะการตงคาขนมา

11. สดทายในบทนแลวครบเรยกไฟล routes.php จบตอนครบ

ตอนท 4 Run

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

1. ทาการเขยน session2. คนหา Route ทสงมาวาตรงกบตวทกาหนดไวไหม3. สงให filter เชน before,after ทางาน Page 15 of 187

Page 16: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

4. สรางคาตอบกลบหรอ Response5. สงคาตอบกลบ6. เรยกใช after filter อยางเชน log

จบแลวครบกวาจะไดคาตอบกลบหนงครงยาวนานไหมครบ

ทมา :: Kenny Mayer Per Your Request

Page 16 of 187

Page 17: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การเรมตนอยางรวดเรว

หมายเหต :: url ทเราจะเรยกใชงานในตอนเรมแรกคอ localhost หรอ 127.0.0.1ตามดวยชอโฟลเดอรของเวบทเราสราง แลวตามดวย public นะครบ ยกตวอยาง 127.0.0.1/taqmaninw/publicนะครบ

บททนจะทาใหเราเหนภาพรวมของ laravel นะครบ

การตดตง

ถาไมรจก composer แนะนาไปอาน ทน กอน เรมจากใชคาสง

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

หลงจากนน composer จะทาการดาวนโหลดไฟลตางๆ มาเกบทโฟลเดอรทเรากาหนดชอไว

หลงจากนนกทาความรจกกบ โครงสรางโฟลเดอรของ laravel เรมแรกเราตองไปกาหนดคาตางๆ ทโฟลเดอร app/configกอนในนกจะมการตงคาใหมากมายแตเราอาจตองการแค การกาหนดคาเบองตน

Routingเราตองกาหนด url ทเราจะอนญาตใหเขาถง ฟงกชนตางกอนท app/routes.php ตวอยางการสราง Route เบองตน

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

ตอนนเมอเราพมพชอโปรเจคของเราบนบราวเซอรแลวตามดวย /users เราจะเหนคาวา Users! แสดงอย

การสราง Route ไปหา Controller Page 17 of 187

Page 18: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

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

ตอนน /user จะถกสงไปทฟงกชน getIndex ของ UserController

การสราง View

ตอมาเรามาสรางไฟลทจะใชจดการรปแบบในการแสดงผลทโฟลเดอร app/views เราสรางไฟลทชอ layout.blade.php และusers.blade.phpตอดวย layout.blade.php

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

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

ตอมาในไฟล users.blade.php เราจะดงไฟล layout มาลง

@extends('layout')

@section('content') Users!@stop

เพอความไมงงวาตวแปรเหลานคออะไร ตามไปดทนเลยครบ Blade documentation

ถาเราจะแสดงไฟล view ทเราสรางกตองอาศย Route ดงตวอยาง

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

ตอไปเราจะไปลยดาตาเบสกนนะครบ Page 18 of 187

Page 19: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การทา Migrationเราจะใชคลาส Migration ในการจดการฐานขอมลนะครบเรมตนดวยการตงคาในการเชอมตอฐานขอมลกอนทไฟล app/database ในคาเรมตนเเลวอาเรย driverจะเปน mysqlแลวเรากเปลยนคาตรง mysql เปนขอมลในการเชอมตอฐานขอมลของเรา

ตอมาในการสราง migration เราใช คาสง artisan ใน commandline จากในโฟลเดอรโปรเจคของเรา ตวอยาง

php artisan migrate:make create_users_table

ตอมาไฟล migrration จะไปโผลทโฟลเดอร app/database/migrations ในไฟลจะมฟงกชร up และ down เราจะสรางSchema เพอการจดการฐานขอมล

ตวอยางการสราง Schema

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

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

ตอมาเรากรนคาสง

php artisan migratePage 19 of 187

Page 20: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ถาอยากยอนคาสง migrate เราตองใชคาสง migrate:rollback

Eloquent ORMEloquent คอ ชดคาสงทเราใชในการทา sql query นนเองครบ ชวยใหเราสะดวกสะบาย ทางานไดรวดเรวขนเรมแรกเราตองไปสราง model ทโฟลเดอร app/models โดยตงชอวา User.php ตวอยางการประกาศคลาสในโมเดล

class User extends Eloquent {}

ตวอยางการเรยกใช Eloquent Model ครบ

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

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

เมทอด allทตอจากเนมสเปซ User จะควรคาทงหมดจากตาราง users สวนใน View เราใชฟงกชน withเพอดงเฉพาะคอลมน user ครบ

Displaying Dataตวอยางการแสดงคาทมาจากฐานขอมลบนไฟล view ครบ

@extends('layout')

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

ตอไปเราตองไปเรยนรเรอง Eloquent และ Blade. หรอแวะเขาไปอานเลนๆ กอนทเรองQueues และ UnitTesting.ถาตองการใชงานในระดบสงตอกไปท IoC Container. Happy In Laravel krub :) Page 20 of 187

Page 21: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Page 21 of 187

Page 22: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Artisan CLI

IntroductionArtisan คอ ชดคาสงทใชเรยกงานผานทาง command lineเพอชวยใหจดการงานตางใหงาย รวดเรวขน ซง laravel นาClass console ของ symfony มาปรบใช

การใชงาน

ในการเรยกดคาสงทงหมดใชคาสง list

php artisan list

ทกคาสงจะมวธการใชใหเราด โดยเพม parameter help เขาไปนะครบ

ตวอยางการใชงาน help

php artisan help migrate

เราสามารถเรยก พรอมกบเปลยนการตงคาโดยรวมของเวบโดยเพมพารามเตอร --env

ตวอยางนเราเรยกในการตงคาแบบ local

php artisan migrate --env=local

จะเรยกดรนของ laravel กไดโดยพารามเตอร --version

php artisan --version

การสรางคาสงขนใชงานเองPage 22 of 187

Page 23: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เราสามารถสรางคาสง artisan ขนมาใช โดยไฟลจะเกบทโฟลเดอร app/commandsถาเราไมอยากเกบไวตรงนกไปตงคาทไฟล composer.json ได

การสรางคาสง

เรมสรางคลาส

เราจะใชคาสง command:make ใน command line เพอสราง class ขนมากอนครบ

ตวอยางการใช command line สรางคาสง

php artisan command:make FooCommand

ถาเราอยากจะเปลยนทอยใหกบไฟลคาสงของเรา กใชคาสงนไปเลยครบ

php artisan command:make FooCommand --path="app/classes" --namespace="Classes"

การตงคาคาสง

เรมตนโดยการตง name และ description รวมถงสวนประกอบอนของคลาส, โดยคาเหลานจะไปปรากฏตอนคาสงartisan list ฟงกชน fire ใชในการเรยกฟงกชนตางๆ ทจะทางานในคาสงน

การตงคาตางๆ

getArguments กบ getOptions เมทอด เปนทๆ เราะทาการตงคาจะตางๆ ทง พารามเตอรท 1 ท 2การตงคาจะมลกษณะการสงคาลงอาเรย.

เมอเรา คาสงของเรามการใหปอนพารามเตอร ตวของ array ตองมรปแบบดงน

array($name, $mode, $description, $defaultValue)

ตวแปร mode เรากาหนดใหเปนแบบตองม InputArgument::REQUIRED หรอไมมกได InputArgument::OPTIONAL.Page 23 of 187

Page 24: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมอเรากาหนดใหมการใสคาสงเพมเตม ลกษณะอาเรยจะเปนแบบน

array($name, $shortcut, $mode, $description, $defaultValue)

ในการกาหนด mode ใหเปนไดหลายๆแบบไดเชน

InputOption::VALUE_REQUIRED, InputOption::VALUE_OPTIONAL, InputOption::VALUE_IS_ARRAY, InputOption::VALUE_NONE.

ตวอยางรปแบบคาทตองปอนใหเมอกาหนด mode เปน VALUE_IS_ARRAY

php artisan foo --option=bar --option=baz

การเขาถงตวแปร

เมอคาสงทางาน เรากตองมตวจดการในการ ดงคาตางๆ ในพารามเตอรของการตงคา ทรบมา

การดงคาจากพารามเตอรเฉพาะตว

$value = $this->argument('name');

การดงคาทงหมด

$arguments = $this->argument();

การรบคาจากคาการตงคาแบบเฉพาะตว

$value = $this->option('name');

การรบคาจากคาการตงคาแบบทงหมด

$options = $this->option();

สงผลการทางานPage 24 of 187

Page 25: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

มประเภทของคาสงทจะแสดงออกทาง commandline 4 ประเภท คอ info , comment , question และ error ทง 4มรปบแบบ unicode เปน ANSI

สงขอมลของคาสงออกทางหนาจอ

$this->info('Display this on the screen');

สงขอความออกไปทางหนาจอ

$this->error('Something went wrong!');

ใหผใชงานเลอก

เราสามารถใชการถามคาถาม และ ยนยน เพอความรวดเรวในการใชงาน

การถามคาถาม

$name = $this->ask('What is your name?');

การถามคาถามและคาทปอนมาเปนรปแบบ

$password = $this->secret('What is the password?');

ยนยนการเลอก

if ($this->confirm('Do you wish to continue? [yes|no]')){ //}

เราสามารถกาหนดคาเรมตนของคาสง confirm ใหเปนtrue หรอ false ได

$this->confirm($question, true);

Page 25 of 187

Page 26: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การลงทะเบยนคาสง

เมอการสรางคาสงเสรจสน เราตองนาไปลงทะเบยนทไฟล app/start/artisan.php โดยใชคาสง Artisan::addเพอลงทะเบยน

ตวอยางการใชงาน

Artisan::add(new CustomCommand);

ถาคาสงเราใชใน IoC container เราตองใชคาสง Artisan::resolve เพอผกคาสงของเราไปกบ IOC ดวย

ตวอยางการใชงาน

Artisan::resolve('binding.name');

การเรยกใชคาสงอนรวม

บางเวลาเราตองการจะเรยกใชคาสงอนๆ สามารถใชฟงกชน call เรยกได

ตวอยางการใชงาน

$this->call('command.name', array('argument' => 'foo', '--option' => 'bar'));

Page 26 of 187

Page 27: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Cache

การตงคา

Laravel เตรยมรปแบบของการ cache ไวใหเราใชเเลวหลายตวเลยนะครบ . ซงรายชอและการตงคาอยทapp/config/cache.php. ในไฟลเราสามารถตงคาใหกบ cache ทเราชนชอบไดเลย Laravel สนบสนนทง Memcached กบRedis อยแลวครบ.

กอนจะทาการตงคาใดๆ ลองไปศกษากอนนะครบ ตว laravel ใช file cache เปนตวเรมตนนะครบถาเวบไซตมขนาดใหญควรเปลยนไปใช Memcached หรอ APC จะดกวา

การใชงาน Cache

การเกบคาลง cache

Cache::put('key', 'value', $minutes);

เกบลงในกรณทไมมคานนอย

Cache::add('key', 'value', $minutes);

ตรวจวามคาไหม

if (Cache::has('key')){ //}

ดงคาจากแคช

$value = Cache::get('key'); Page 27 of 187

Page 28: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ดงคาโดยเรยกคาเรมตน

$value = Cache::get('key', 'default');

$value = Cache::get('key', function() { return 'default'; });

กาหนดใหคาชนดนไมมวนหมดอาย

Cache::forever('key', 'value');

บางเวลาเราตองการเรยกใชคาจากแคช แตไมมคาแลว เราสามารถเรยกใช Cache::rememberโดยการดงคาจากฐานขอมลขนมาเกบไวในแคช

$value = Cache::remember('users', $minutes, function(){ return DB::table('users')->get();});

และยงสามารถผสมคาสง remember กบ forever

$value = Cache::rememberForever('users', function(){ return DB::table('users')->get();});

เราสามารถเกบคาชนดใดกไดเพราะรปแบบการเกบคาใชแบบ serialize

การลบคาออกจากคย

Cache::forget('key');

การเพมและการลดคา

แคชทกชนดยกเวน file กบ database สนบสนนการทาเพมและลดคาของแคชPage 28 of 187

Page 29: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การเพมคา

Cache::increment('key');

Cache::increment('key', $amount);

การลดคา

Cache::decrement('key');

Cache::decrement('key', $amount);

Cache Sections

หมายเหต: Cache sections ไมสนบสนนแคชแบบ file หรอ database

Cache sections คอการใหเราสามารถจบกลมใหกบแคชทมรปแบบการเกบคาทคลายๆ กนโดยใชคาสงsection

ตวอยางการใชงาน Cache section

Cache::section('people')->put('John', $john);

Cache::section('people')->put('Anne', $anne);

การเขาถงคาของแคช

$anne = Cache::section('people')->get('Anne');

flush คอการลบคาออก:

Cache::section('people')->flush();

การเกบแคชไวในฐานขอมลPage 29 of 187

Page 30: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมอเราจะใชฐานขอมลเกบคาแคช เราตองเพมตารางทจะใชเกบกอนนคอตวอยางการสรางตารางทใชเกบแคชในรปแบบ ของ laravel

Schema::create('cache', function($table){ $table->string('key')->unique(); $table->text('value'); $table->integer('expiration');});

Page 30 of 187

Page 31: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เราสามารถสรางคาสง artisan ขนมาใชโดยไฟลจะเกบทโฟลเดอร app/commandsถาเราไมอยากเกบไวตรงนกไปตงคาทไฟล composer.json ได

การสรางคาสง

เรมสรางคลาส

เราใชคาสง command:make ใน command line เพอสราง class ขนมากอนครบ

ตวอยางการใช command line สรางคาสง

php artisan command:make FooCommand

ถาเราอยากจะเปลยนทอยใหกบไฟลคาสงของเรา กใชคาสงนไปเลยครบ

php artisan command:make FooCommand --path="app/classes" --namespace="Classes"

เรมลงรายละเอยด

เรมตนโดยการตง name และ description รวมถงสวนประกอบอนของคลาส, โดยคาเหลานจะไปปรากฏตอนคาสงartisan list. ฟงกชน fire ใชในการเรยกฟงกชนตางๆ ทจะทางานในคาสงน

การตงคาตางๆ

getArguments กบ getOptions เมทอด เปนทๆ เราะทาการตงคาจะตางๆ ทง พารามเตอรท 1 ท 2 .การตงคาจะมลกษณะการสงคาลงอาเรย.

เมอเรา คาสงของเรามการใหปอนพารามเตอร array ตองมรปแบบดงน

array($name, $mode, $description, $defaultValue)

ตวแปร mode เรากาหนดใหเปนแบบตองม InputArgument::REQUIRED ไมมกได InputArgument::OPTIONAL. Page 31 of 187

Page 32: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมอเรากาหนดใหมการใสคาสงเพมเตมลกษณะอาเรยจะเปนแบบน

array($name, $shortcut, $mode, $description, $defaultValue)

ในการกาหนด mode ใหเปนไดหลายๆแบบไดเชน: InputOption::VALUE_REQUIRED, InputOption::VALUE_OPTIONAL,InputOption::VALUE_IS_ARRAY, InputOption::VALUE_NONE.

ตวอยางรปแบบคาทตองปอนใหเมอกาหนด mode เปน VALUE_IS_ARRAY

php artisan foo --option=bar --option=baz

การเขาถงตวแปร

เมอคาสงทางาน เรากตองมตวจดการๆ ดงคาตางๆ ในพารามเตอร การตงคา ทรบมา

การดงคาจากพารามเตอรเฉพาะตว

$value = $this->argument('name');

การดงคาทงหมด

$arguments = $this->argument();

การรบคาแบบเฉพาะตว

$value = $this->option('name');

การรบคาแบบทงหมด

$options = $this->option();

สงผลการทางานPage 32 of 187

Page 33: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

มประเภทของคาสงทจะแสดงออกทาง commandline 4 ประเภท คอ info , comment , question และ error ทง 4 มรปบบunicode เปน ANSI

สงขอมลของคาสงออกทางหนาจอ

$this->info('Display this on the screen');

สงเออเรอออกไปทางหนาจอ

$this->error('Something went wrong!');

ใหผใชงานเลอก

เราสามารถใชการถามคาถาม และ ยนยน เพอความรวดเรวในการใชงาน

การถามคาถาม

$name = $this->ask('What is your name?');

**การถามคาถามและคาทปอนมาเปนรปแบบ ** **

$password = $this->secret('What is the password?');

Asking The User For Confirmation

if ($this->confirm('Do you wish to continue? [yes|no]')){ //}

เราสามารถกาหนดคาเรมตนใหคาสง confirm ใหเปนtrue หรอ false ได

$this->confirm($question, true);

Page 33 of 187

Page 34: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การลงทะเบยนคาสง

เมอการสรางคาสงเสรจสน เราตองนาไปลงทะเบยนทไฟล app/start/artisan.php โดยใชคาสง Artisan::addเพอลงทะเบยน

ตวอยางการใชงาน

Artisan::add(new CustomCommand);

ถาคาสงเราใชใน IoC container,เราตองใชคาสงArtisan::resolve เพอมดคาสงของเราไปกบ IOC ดวย

ตวอยางการใชงาน

Artisan::resolve('binding.name');

การเรยกใชคาสงอนรวม

บางเวลาเราตองการจะเรยกใชคาสงอนๆ สามารถใชฟงกชน call เรยกได

ตวอยางการใชงาน

$this->call('command.name', array('argument' => 'foo', '--option' => 'bar'));

Page 34 of 187

Page 35: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การดงคาของการตงคาหลกมาใช

สวนการตงคาหลกๆ ของเวบเราจะอยทโฟลเดอร app/config ในบทนเราจะมาดวา laravel เตรยมฟงกชนอะไร

ใหเราใชในการดงคาจากไฟลทงหลายในโฟลเดอร config ออกมาใชไดบาง.

laravel เตรยม class ทชอวา Config ไวใหเราเเลวนะครบ

ยกตวอยางการดงคา timezone ออกมา

Config::get('app.timezone');

เราสามารถกาหนดคาของตวแปรนนใหมได กรณทรปแบบไมเปนไปตามทเราตองการ:

$timezone = Config::get('app.timezone', 'UTC');

สงเกตวาถาเปนการเขาถงคาในอาเรยของไฟล laravel จะใชเครองหมายดอท ในการเขาถงนะครบ

กาหนดคาแบบไมตองเขาไปในไฟลเลย

Config::set('database.default', 'sqlite');

การกาหนดคาแบบนจะไมไปเขยนทบการตงคาในไฟล app.php นะครบ จะเกดผลเฉพาะตรงทเราประกาศไวเทานน.

การกาหนดชดรปแบบของการตงคาพนฐาน

ในการพฒนาเวบเรามกจะเปด การตงคาตางๆเพอทจะเอออานวยใหเราทราบขอมล ไดมากทสด

แตในกรณทเวบออนไลนแลวการแสดง การแสดงขอมลการทางานผดพลาด การลมไปแลววาเคยทงคาสง debugไวตรงไหน

เรมตนสรางไฟลชดการตงคาในโฟลเดอร config ยกตวอยางชอ local.ยกตวอยางการตงคาในไฟล

สมมตเราตองการใชแคชแบบ file กทาแบบตวอยางเลยครบ Page 35 of 187

Page 36: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

<?php

return array(

'driver' => 'file',

);

Note: testing เปนชอทถกกาหนด ไวกบ laravel แลววาถาอยในชอนการตงคาทงหมดจะอยในการโหมด unit testฉะนน เราอยาไปตงทบมนเลยครบ

สวนการตงคาทเราไมไดตงไว จะอางองกลบไปทไฟลหลกนะครบ

ตอมาเราตองไปตงคาใหตว laravel รวาขณะนอยในโหมดไหน โดยเขาไปตงคาท bootstrap/start.phpตวโฟลเดอรจะอยขางหนาสดเลย. เขาไปคนหา $app->detectEnvironment ตวฟงชนจะใชคนหารปแบบการตงคาของเวบเรา

<?php

$env = $app->detectEnvironment(array(

'local' => array('your-machine-name'),

));

เรากจะเปลยนใหเปนเหมอนตวอยาง

$env = $app->detectEnvironment(function(){ return $_SERVER['MY_LARAVEL_ENV'];});

ตวอยางการเรยกใช

$environment = App::environment();

Page 36 of 187

Page 37: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การปรบปรงเวบไซต

เมอเราตองการปดเวบเพอทาการปรบปรง เราจะกาหนดเมทอด App::down ไวท app/start/global.phpซงจะทาใหทกคารองถกพาไปทหนา ทบอกวาตอนน เวบกาลงอยในสถานะปรบปรง.

ตองการทาใหรวดเรวขนกใช command line กได

php artisan down

up เปนคาสงใหเวบกลบไปอยในสถานะออนไลนอกครง

php artisan up

ถาตองการเปลยนหนาทใชในการแสดงผลกเขาไปตงคาท app/start/global.php ตวอยาง

App::down(function(){ return Response::view('maintenance', array(), 503);});

Page 37 of 187

Page 38: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Controllers

การทางานเบองตน

แทนทเราจะวางฟงกชนไวทไฟล routes.php ควรเขยนลงไปท controller ดกวาครบ จะทาใหโคดมระเบยบเรยบรอยอานงาย

เราจะสราง Controllers ไวทโฟลเดอร app/controllers โฟลเดอรนจะถกกาหนดทอยไวในตวแปร classmap ในไฟลcomposer.json โดยเรมตน .

ตวอยางการเรยกใช controller:

class UserController extends BaseController {

/** * */ public function showProfile($id) { $user = User::find($id);

return View::make('user.profile', array('user' => $user)); }

}

ทก controller จะสบทอดคลาส BaseController จะเกบไวทโฟลเดอร app/controllersโดยคลาส BaseControllerกสบทอดตอมาจาก Controller ตอไปคอตวอยางการลงทะเบยน controller ไวท route ครบ

Route::get('user/{id}', 'UserController@showProfile');

ตวอยางนเปนการเรยกใชงาน controller แบบใช namespace นะครบ

Route::get('foo', 'Namespace\FooController@method');Page 38 of 187

Page 39: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เราสามารถตงชอยอใหเพอสะดวกตอการใชงาน ตามตวอยางขางลางเลยครบ

Route::get('foo', array('uses' => 'FooController@method','as' => 'name'));

จะสรางลงไปท controller กใชฟงกชน URL::action

$url = URL::action('FooController@method');

ใชฟงกชน currentRouteAction เพอเรยกคารองขอทผานมา

$action = Route::currentRouteAction();

Controller Filtersคอการกรองคา ทสงเขามายงตวเวบซง laravel กมรปแแบบการทา filter ไวใหอยแลวเหมอนในตวอยางคอเมอเวบเรมทางาน กตรวจวาไดลงชอเขาใชงานไหม แลวคาทสงมาปลอดภยไหม สงเครองหมายแปลกประหลาดมาไหมโดยทาการตรวจดวย filter ชอ csrf แลวถามการเรยก fooAction กบ barAction กทาการเกบ log ไวดวย

class UserController extends BaseController {

/** * �

������� _construct ���

�������������

����������

�����

������

��

*/ public function __construct() { $this->beforeFilter('auth');

$this->beforeFilter('csrf', array('on' => 'post'));

$this->afterFilter('log', array('only' => array('fooAction', 'barAction'))); }

}Page 39 of 187

Page 40: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เราสามารถจบกลมใหตวกรองได เหมอนในตวอยางนะครบ

class UserController extends BaseController {

/** * Instantiate a new UserController instance. */ public function __construct() { $this->beforeFilter(function() { //�������

������

������������

�����

}); }

}

RESTful Controllersrestful controller ของ laravel คอการกาหนดวาเมอมการสงคาขอแบบนไปทฟงกชนนใหตอบสนองแบบไหนนะครบเปนการกรองตามชนดของคารอง ทง get,post,put,delete การกรองระดบชนดของคารองขอ ทาใหเราจดการไดงายขน

การกาหนดคา restful controller ใน route

Route::controller('users', 'UserController');

เมอเรากาหนด ดงตวอยางดานบนแลว คลาส UserController กจะรบแคคาทเรากาหนดโดยเราจะใสชนดของคารองขอทเราจะรบไวทหนาตวฟงกชน

class UserController extends BaseController {

public function getIndex() { // �

������������������

������

���������� get ��

������

}

public function postProfile() Page 40 of 187

Page 41: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

{ // �

������������������

������

���������� post ��

������

}

}

ในกรณทชอฟงชนเรามหลายคาใชเครองหมาย - เพอเรยกไดดงตวอยางเราเรยกใชฟงกชน adminprofile ซงมสองคาusers/admin-profile

public function getAdminProfile() {}

Resource ControllersResource controllers คอการลงทะเบยน restful controller ของเรากบ Route มคาสงใน command lineทชวยใหเราสราง restful controller ไดรวดรวขน. ตวอยาง เราอยากจะสราง controller เพอจดการภาพเรากใชคาสงcontroller:make ตามตวอยาง

php artisan controller:make PhotoController

แลวกลงทะเบยนบอก route วา controller นเปน restful

Route::resource('photo', 'PhotoController');

การใชคาสงอตโนมตสรางจะทาใหเราได restful controller แบบเตมรปแบบ ยงเปนการสรางตวอยางการใชงาน restfulใหดวย

รปแบบของ restful controller ทคาสง artisan จะสรางให

Verb Path Action Route Name

GET /resource index resource.index

GET /resource/create create resource.create Page 41 of 187

Page 42: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

POST /resource store resource.store

GET /resource/{id} show resource.show

GET /resource/{id}/edit edit resource.edit

PUT/PATCH /resource/{id} update resource.update

DELETE /resource/{id} destroy resource.destroy

ถาเราไมตองการสรางทงหมดตามในตารางกกาหนดเปนรายตวไปเลยครบ ดงตวอยาง

php artisan controller:make PhotoController --only=index,show

php artisan controller:make PhotoController --except=index

แลวกกาหนดคาใน route ใหใชงานไดเฉพาะฟงกชนกได

Route::resource('photo', 'PhotoController', array('only' => array('index', 'show')));

การแสดงผลเมอมคารองทไมถกตอง

เราจะใชฟงกชน missingMethodเพอจดการคารองขอทไมตรงตามทเรากาหนดไว จะสงไปไหนจะแสดงอะไรกกาหนดไดเลยครบ:

ตวอยาง

public function missingMethod($parameters){ //}

Page 42 of 187

Page 43: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การจดการฐานขอมลเบองตน

การตงคา

เราจะไปตงคาท app/config/database.php. ซงเราจะไปตงคาการเชอมตอขางในนครบ

laravel ในขณะนสนบสนน: MySQL, Postgres, SQLite, and SQL Server.

การทา Queriesเราใชคลาส DB ในการเรยกใชการควรนะครบ

ตวอยางการควร

$results = DB::select('select * from users where id = ?', array(1));

ฟงกชนselectจะสงคาเปน arrayกลบมาเสมอ

ตวอยางการเพมขอมล

DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));

ตวอยางการแกไขขอมล

DB::update('update users set votes = 100 where name = ?', array('John'));

ตวอยางการลบขอมล

DB::delete('delete from users');

หมายเหต: คาสง update กบ delete จะคนคาเปนจานวนของแถวทไดทาการจดการไป.Page 43 of 187

Page 44: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการใชคาสงทวไป

DB::statement('drop table users');

เราสามารถกาหนดใหฟงกชนนทางานเมอมการควรเกดขนโดยใชฟงกชน DB::listen

ตวอยางการใชงาน

DB::listen(function($sql, $bindings, $time){ //});

Database Transactionsเมอเราจะทาการควรหลายๆ คาสงเราจะใชฟงกชน transaction ในการควบคม เหมอนในตวอยางขางลาง

DB::transaction(function(){ DB::table('users')->update(array('votes' => 1));

DB::table('posts')->delete();});

การเขาถงการเชอมตอฐานขอมล

สมมตเวบของเราใชฐานขอมลหลายชนด สามารถใชฟงกชน DB::connection ในการเรยกฐานขอมลเฉพาะทเราตองการดงตวอยาง

$users = DB::connection('foo')->select(...);

แลวกสามารถเชอมตอใหมดวยคาสง reconnect

DB::reconnect('foo');Page 44 of 187

Page 45: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การเกบประวตการควร

โดยคาเรมตน laravel จะเกบประวตไวในหนวยความจาอยเเลว ในกรณทเวบของเรามคารองขอจานวนมากการเกบประวตจะใชหนวยความจามาก เราจะใชฟงกชน disableQueryLog เพอทาการหยดเกบประวต ตวอยาง

DB::connection()->disableQueryLog();

Page 45 of 187

Page 46: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Eloquent ORM

ทาความรจกกอน

Eloquent ORM คอการทเราจาลองตารางเปนคลาสแลว เรยกใชงานเปนชอของตารางนนเลยทาใหเขาใจการพฒนารวดเรวขน เขาใจงายขน ทเรยกวา Eloquent เพราะตวมนมความเรยบงาย

การใชงานเบองตน

เรมตนดวยการสราง moedel ไวทโฟลเดอร app/models

ตวอยางการสราง model

class User extends Eloquent {}

ถาคลาสนจะไมใชตารางตามชอ model เรากสามารถใชตวแปร table ในการกาหนดชอตารางทเราจะใช เหมอนในตวอยาง

class User extends Eloquent {

protected $table = 'my_users';

}

หมายเหต: Eloquent จะถอวาคอลมน id เปนคยหลกเสมอ เราสามารถใชตวแปร primaryKeyเพอกาหนดคยหลกไดเอง และเชนเดยวกน เราสามารถใชตวแปร connectionเพอกาหนดฐานขอมลทเราจะใชในmodel น

ถาในตารางของเรามคอลมนทชอ updated_at กบ created_at จะถกใชในการเกบเวลาทขอมลในแถวนถกเพมหรอแกไข.ถาเราไมตองการเพยงแคตงคาตวแปร $timestamps ใหเปน false

Page 46 of 187

Page 47: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การควรโดยใช eoloquent

คนหาขอมลทงหมดจากตาราง user

$users = User::all(); //

คนหาตามเงอนไข

คนหาโดยคา id เทากบ 1

$user = User::find(1); //

แสดงคาในคอลมนออกมา

var_dump($user->name); //

Note: ทกคาสงทใชใน query builder สามารถใชกบ eloquent ไดเชนกน

การควรแลวสงตอ

บางเวลาเมอคนหาเเลวไมเจอเราตองการใหเกดหนาแสดงขอผดพลาดขนมา สามารถใชฟงกชน findOrFailเหมอนในตวอยางเลยครบ ถาคนไมเจอเราจะสงไปหนา 404 ทนท

$model = User::findOrFail(1);

$model = User::where('votes', '>', 100)->firstOrFail();

อยากจะสรางการแสดงขอผดพลาดโดยทเรากาหนดเองกสามารถทาตามตวอยางเลยครบ สมมตเราจะสรางฟงกชนModelNotFoundExceptionเรากเรยกตวคลาสหลกเขามากอน

use Illuminate\Database\Eloquent\ModelNotFoundException;

App::error(function(ModelNotFoundException $e){ return Response::make('Not Found', 404);

Page 47 of 187

Page 48: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

});

ตวอยางการควรแบบหลายเงอนไข

$users = User::where('votes', '>', 100)->take(10)->get();

foreach ($users as $user){ var_dump($user->name);}

Eloquent Aggregates

$count = User::where('votes', '>', 100)->count();

ถาเราอยากเขยนคาสงควร ขนมาใชเองกตองใชฟงกชน whereRaw

$users = User::whereRaw('age > ? and votes = 100', array(25))->get();

การสงคาอาเรยลงฐานขอมล

เราสามารถสง คาจานวนมากอยางเชน อาเรย ลงฐานขอมลไดงายๆ แตตองใชตวแปร

fillable เพอกาหนดวาคอลมนไหนทสามารถใสอาเรยได

guarded เพอกาหนดวาคอลมนไหนใสอาเรยลงไปไมได

ตวอยางการกาหนดคา fillable

class User extends Eloquent {

protected $fillable = array('first_name', 'last_name', 'email');

} Page 48 of 187

Page 49: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการตงคาตวแปร guard

class User extends Eloquent {

protected $guarded = array('id', 'password');

}

ตวอยางคอลมน id and password เราจะไมอนญาตใหทาการใสคาทมาในรปแบบอาเรยลงไป

การปองกนไมใหทาการเพมขอมลเปนอาเรย

protected $guarded = array('*');

เพม, ลบ, แกไขตวอยางการแกไขขอมลแบบไมใช namespace

$user = new User;

$user->name = 'John';

$user->save();

หมายเหต: โดยเรมตน laravel จะทาการเพมคาคยหลกใหอตโนมต ถาเราไมตองการกตงคาตวแปร incrementingในmodel ใหเปน false.

เราสามารถใชคาสง create เพอสรางขอมลใหมได แตกอนหนานนตองกาหนดตวแปร fillable หรอ guardedไมงนเพมไมไดตด error

การสรางขอมลใหม

$user = User::create(array('name' => 'John'));

Page 49 of 187

Page 50: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการแกไขขอมล

$user = User::find(1);

$user->email = '[email protected]';

$user->save();

บางเวลาเราตองบนทกคาในตารางทอางองกน เราจะใชคาสง push

บนทกคาพรอมกบบนทกลงตารางทมการเชอมกนอย

$user->push();

ตวอยางการลบขอมล

$user = User::find(1);

$user->delete();

ลบโดยกาหนด id เปนเงอนไข

User::destroy(1);

User::destroy(1, 2, 3);

ตวอยางการลบแบบมเงอนไข:

$affectedRows = User::where('votes', '>', 100)->delete();

ถาเราตองการแกไขเฉพาะคอลมนทใชบนทกเวลา เราจะใชคาสง touch

ตวอยางการใชงาน

$user->touch();Page 50 of 187

Page 51: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การกาหนดวาขอมลนถกลบเเลว

เราสรางตวแปร $softdelete เพอบอก model วาไมตองลบจรง เหมอนกบเราเอาไปเกบไวในถงขยะกอนยงไมไดเอาไปเผาทงจรงๆ

class User extends Eloquent {

protected $softDelete = true;

}

แลวกเพมคอลมน deleted_at ลงในตาราง เพอกาหนดวาขอมลแถวนถกลบแลวหรอยง

เมอเราเรยกคาสง delete กบ model นคอลมน deleted_at จะถกเพมคาใหเปนวนเวลาทเราลบ เมอเราคนหาขอมลโดยใช model นขอมลแถวทเราทาการลบจะไมถกดงขนมา

ตวอยางการคนหา โดยรวมแถวทถกตงคาวาลบแลว

$users = User::withTrashed()->where('account_id', 1)->get();

ตวอยางการคนหา โดยคนหาเฉพาะแถวทถกตงคาวาลบแลว

$users = User::onlyTrashed()->where('account_id', 1)->get();

ถาตองการยกเลกการลบ ใชคาสง restore ไดเลยครบ

$user->restore();

หรอจะเรยกคนเฉพาะแถวกตามตวอยางนเลย

User::withTrashed()->where('account_id', 1)->restore();

Page 51 of 187

Page 52: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ฟงกชน restore สามารถใชกบความสมพนธไดดวย

$user->posts()->restore();

ถาตองการลบขอมลจรงๆ กใชคาสง forceDelete

$user->forceDelete();

คาสง forceDelete กสามารถใชกบความสมพนธกได

$user->posts()->forceDelete();

ฟงกชน trashed ใชในการตรวจวาโมเดลนมการตงคา softdelete ไวไหม

if ($user->trashed()){ //}

Timestamps การบนทกเวลาโดยคาเรมตน laravel ใชคอลมน created_at และ updated_at ในตารางของเราโดยอตโนมต.

ตวอยางการยกเลกการเกบเวลาในการจดการขอมล

class User extends Eloquent {

protected $table = 'users';

public $timestamps = false;

}

ฟงกชน freshTimestampใชในการกาหนดรปแบบวนเวลาทเราจะเกบ

ตวอยางการใชงาน Page 52 of 187

Page 53: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการใชงาน

class User extends Eloquent {

public function freshTimestamp() { return time(); }

}

Query Scopesเราใชคานาหนาฟงกชนวา scope เพอทาการสรางฟงกชนทใชควรแบบเฉพาะของเราเอง:

ตวอยางการใชงาน scope

class User extends Eloquent {

public function scopePopular($query) { return $query->where('votes', '>', 100); }

}

การใชงานควรทมาจาการใชคาสง scope

$users = User::popular()->orderBy('created_at')->get();

ความสมพนธ

การจดการความสมพนธตารางใน laravel ม 4 รปแบบ

1 ตอ 11 ตอ กลม

Page 53 of 187

Page 54: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

กลม ตอ กลมความสมพนธแบบซบซอน

1 ตอ 1

ตวอยางความสมพนธแบบ 1 ตอ 1 ผใชงานมโทรศพทไดเเคเครองเดยว

ตวอยางความสมพนธแบบ 1 ตอ 1

class User extends Eloquent {

public function phone() { return $this->hasOne('Phone'); }

}

เราใชฟงกชนเปนตวกาหนดตารางทเราจะเชอมดวย ตวอยางขางลางการคนหาโทรศพทของผใชงานทม id เทากบ 1

$phone = User::find(1)->phone;

ถาเขยนเปน php ธรรมดากจะไดเเบบนครบ

select * from users where id = 1

select * from phones where user_id = 1

โดยคาเรมตนเเลว Eloquent จะใชคอลมน user_id ในตาราง Phone เปน คยเชอม ถาเราไมเอาจะเอาชอทเราตงเองกใชตวแปร hasOne เปนตวแกดงตวอยาง

return $this->hasOne('Phone', 'custom_key');

ในการเชอมโมเดลสงทสาคญคอการตงคาความสมพนธใหตรงกนใน Phone model เรากจะใชฟงกชน belongsToในการเชอมกลบไปยง User Page 54 of 187

Page 55: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการเชอมกลบไปยง User Model

class Phone extends Eloquent {

public function user() { return $this->belongsTo('User'); }

}

เหมอนกบขางบนครบ เราไมเอา user_id เปนคยเชอมกตองกาหนดดวย ตามตวอยาง

class Phone extends Eloquent {

public function user() { return $this->belongsTo('User', 'custom_key'); }

}

1 ตอ กลม

ความสมพนธแบบ 1 ตอ กลม มตวอยางคอ 1 โพสมไดหลาย ความคดเหนตวอยางการใช hasMany

class Post extends Eloquent {

public function comments() { return $this->hasMany('Comment'); }

}

ตวอยางการคนหาตารางทเชอมกนอย Page 55 of 187

Page 56: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$comments = Post::find(1)->comments;

ตวอยางการคนหาแบบหลายเงอนไขครบ ดงตวอยาง เราจะคนหาความคดเหนทม title ชอ foo โดยเอาคาเเรกทเจอกอน

$comments = Post::find(1)->comments()->where('title', '=', 'foo')->first();

อกครง อยาลมเชอมกลบไปยงตารางทเชอมมานะครบ

ตวอยางอกครง

class Comment extends Eloquent {

public function post() { return $this->belongsTo('Post'); }

}

กลม ตอ กลม

กลมตอกลม จะเปนความสมพนธทยงยากพอสมควรเลยครบ เรามตวอยางคอ ผใชงานมสทธการใชงานไดหลายสทธทงเรยกด,ลบ,แกไข,เพม แลวแตละสทธกถกใชไดในหลายผใชงาน เราตองม 3 ตาราง users, roles, กบ role_user.ตาราง role_userจะเกบ user_id กบ role_id เพอบอกวา ผใชงานคนนมสทธทาอะไรไดบาง

laravel ใชฟงกชน belongsToMany ในการเชอมความสมพนธ:

class User extends Eloquent {

public function roles() { return $this->belongsToMany('Role'); }

}Page 56 of 187

Page 57: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตอนนเราสามารถตรวจไดเเลววาผใชงานหมายเลข 1 มสทธทาอะไรไดบาง

$roles = User::find(1)->roles;

ถาเราตองการใชชอตาราง ตามใจเรากสามารถทาไดโดยการ สงพารามเตอรไป ดงตวอยางครบ

return $this->belongsToMany('Role', 'userroles');

หรอจะเปลยนไปจนถงชอคอลมนเลยกได แตตองสงชอ คอลมนทเราตงเองไปบอก model ดวย

return $this->belongsToMany('Role', 'userroles', 'user_id', 'foo_id');

อยาลมเชอมความสมพนธกลบมาดวยนะครบ

class Role extends Eloquent {

public function users() { return $this->belongsToMany('User'); }

}

ความสมพนธทยงยากมากขน

เพอชวยใหเขาใจไดงายขนจะมตวอยางมาใหดกนครบตวอยางโครงสรางตาราง

staff id - integer name - string

orders id - integer price - integer

photos Page 57 of 187

Page 58: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

id - integer path - string imageable_id - integer imageable_type - string

มนพเศษตรงทคอลมน imageable_id กบ imageable_type ของตาราง photos ทเราจะใชเกบคยทใชเชอมตาราง photoเขากบตาราง staff หรอ order ใชเกบคยเชอมรวมกนได โดยใชคอลมนเมอเรากาหนดคยเชอมและชอของตารางทเชอมไป ORM จะทาการตรวจสอบโดยใชคอลมนท imageable_typeในการหาวาคยนเปนของตารางไหน โดยเราตองตงชอฟงกชนวา imageable เราตองประกาศ model แบบนครบ

class Photo extends Eloquent {

public function imageable() { return $this->morphTo(); }

}

class Staff extends Eloquent {

public function photos() { return $this->morphMany('Photo', 'imageable'); }

}

class Order extends Eloquent {

public function photos() { return $this->morphMany('Photo', 'imageable'); }

}

ตอนนเราสามารถใช id ของ staff หรอ order มาคนหารปภาพได Page 58 of 187

Page 59: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยาง

$staff = Staff::find(1);

foreach ($staff->photos as $photo){ //}

ความพเศษจรง ๆอยทเมอเราใช Photo model ในการคนครบ

ตวอยาง

$photo = Photo::find(1);

$imageable = $photo->imageable;

ความสมพนธทชอ imageable บน model Photo จะสงขอมลของทง Staff และ Order หรอตารางใดตารางหนงขนอยกบคาทเราใชคนหาจะไปตรงกบ model ไหน

การควรโดยใชความสมพนธเปนเงอนไข

เราสามารถจากดผลการคนหาดวยฟงกชน has

คนหาโดยจากดเฉพาะความสมพนธ

$posts = Post::has('comments')->get(); // ������������������� post ������������

���� comment

You may also specify an operator and a count:

$posts = Post::has('comments', '>=', 3)->get(); // ����� post �

���� comment �����

������������� 3

การคนหาแบบยดหยน

Eloquent ทาใหเราสามารถคนหาแบบตอเนองโดย Page 59 of 187

Page 60: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

พยายามใหเราจากดขอบเขตการคนหาใหไดลกลงทสดเพอใหไดเฉพาะขอมลทตองการจรงๆ

และพลกแพลงรปแบบของฟงกชนไดมากมาย ดงตวอยาง

class Phone extends Eloquent {

public function user() { return $this->belongsTo('User'); }

}

$phone = Phone::find(1);

แทนทเราจะทาแบบขางบน ซงจะทาใหเราไดคาทไมตองการออกมามาก เรากเปลยนมาใชแบบขางลางเราสามารถเขาถง อเมล ของผใชงาน คนแรกไดเลย

echo $phone->user()->first()->email;

หรอจะใหสนไดอก กทาตามนเลยครบ

echo $phone->user->email;

Eager LoadingEager loading มเพอแกปญหาการควรแบบ N + 1 ตวอยางคอ, ผเเตงหนงคนสามารถแตงหนงสอไดหลายๆ เลมความสมพนธจะออกมาแบบน

class Book extends Eloquent {

public function author() { return $this->belongsTo('Author'); }

} Page 60 of 187

Page 61: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

แลวการควรทมปญหากประมาณน

foreach (Book::all() as $book){ echo $book->author->name;}

1 ควร จะทาการดงคาหนงสอทงหมดจากตาราง, แลวการควรครงตอไปกจะทาเหมอนกน. ถามหนงสอ 25เลม,จะมการควรถง 26 ครง คอเราใชขอมลทงหมดของตารางหนงสอไปคนหาผแตง 1ผแตงกจะไปดงหนงสอทงหมดของเขาออกมา

select * from books

select * from authors where id = ?

นกถงเรามขอมลเรมตน 1000 แถว ปญหานสวนใหญจะเกดขนกบความสมพนธแบบ hasManyเพราะเราตองนาทงหมดไปคนหาตอแลวแตละแถวจะไดผลลพทออกมาหลายๆ

แถวจานวนผลการคนหาทมหาศาลจะทาใหการควรชามากแต ซงถาขอมลตงตนยงมากกวานลงไปแตงควรเองโดยใช Fluent Query Builder แตถายงจะใช Eloquent กยงโชคดท laravel มฟงกชน with ใชในการทาใหเรวขน

foreach (Book::with('author')->get() as $book){ echo $book->author->name;}

sql ทเกดขนจะมหนาตาแบบนครบ เรมจากคนหาหนงสอทหมดกอนแลว คอยเอา id ทไดไปคนตอในตาราง authorsเราเปลยนไปใช in แทน

select * from books

select * from authors where id in (1, 2, 3, 4, 5, ...)Page 61 of 187

Page 62: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

จะทาใหเวบของเราโหลดเรวขนอยางมากเลยครบ

ตวอยาง การใช eager loading ในกรณตารางมการเชอมกบอกหลายตาราง

$books = Book::with('author', 'publisher')->get();

จะใชการทา eager load กบคอลมนอนได

$books = Book::with('author.contacts')->get();

In the example above, the author relationship will be eager loaded, and the author's contacts relation will alsobe loaded.

Eager Load Constraints

บางเวลาเราตองการเฉพาะบางคอลมจาการทา eager loading แลวใสเงอนไขเขาไปอก สามารถกาหนดไดดงนครบ:

$users = User::with(array('posts' => function($query){ $query->where('title', 'like', '%first%');}))->get();

Lazy Eager Loading

เราสามารถใชการทา eager loading ไปยงตารางทเชอมกนไดเหมอนในตวอยางครบเราเขาไปคนตอไปในตาราง publisher ทเชอมกบตาราง author อก

$books = Book::all();

$books->load('author', 'publisher');

การบนทกขอมลแบบมความสมพนธ

สมมตอเราจะเพมความคดเหนลงบทความนแลวเรากตองนา id Page 62 of 187

Page 63: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ของบทความทเราโพสความคดเหนใสไปมาใสในความคดเหนดวย

ตวอยางการเกบขอมลทตองมความสมพนธ

$comment = new Comment(array('message' => 'A new comment.'));

$post = Post::find(1);

$comment = $post->comments()->save($comment);

ในตวอยางคอลมนpost_id จะถกใสคาใหอตโนมต

Associating Models (Belongs To)

เมอเราจะทาการแกไขขอมลทมความสมพนธแบบ กลมตอหนง เราตองใชฟงกชน associateในการเพมคาคยเชอมไปยงตารางทมความสมพนธอยดวย

$account = Account::find(10);

$user->account()->associate($account);

$user->save();

การเพมขอมลแบบกลมตอกลม (Many To Many)

ตวอยางคอเราจะทาการเพมความสามารถใหผเราตอง laravel มฟงกชน attach มาใหใชเเลว

การเพมขอมลแบบกลมตอกลม

$user = User::find(1);

$user->roles()->attach(1);

ตวอยางขางลาง เราจะทาการเพมขอมลไปยงตารางทใชเชอม สามารถสงเปนอาเรยกได:

$user->roles()->attach(1, array('expires' => $expires)); Page 63 of 187

Page 64: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมอเพมแลวกลบได ฟงกชน detach ใชลบคาในตารางทใชเชอม

$user->roles()->detach(1);

เราสามารถใชฟงกชน syncเมทอด เพอการเพมคาไปยงตารางทเชอมอยดวยได ในขณะทเพมลงในตารางหลก

ตวอยางการใช sync กบความสมพนธแบบกลมตอกลม

$user->roles()->sync(array(1, 2, 3));

Aตวอยางการใช sync กบตารางกลาง

$user->roles()->sync(array(1 => array('expires' => true)));

การใชเมทอด save เพอทาการเพมขอมลงตารางทเชอมกนอย

$role = new Role(array('name' => 'Editor'));

User::find(1)->roles()->save($role);

ในตวอยางเราสราง Role model แลวแนบไปกบ User model. แลวยงสามารถแนบอาเรยเขาไปไดอก

User::find(1)->roles()->save($role, array('expires' => $expires));

การแกไขคอลมนทเกบเวลาในตารางทเชอมดวย

ตวอยาง เมอเราแกไขขอมลในตาราง Comment เราตองการแกไขขอมลในตาราง Post ในแถวทเชอมกนดวย laravelเตรยมฟงกชน touch มาใหเเลว วธการใชงานในตวอยางเลยครบ

class Comment extends Eloquent {

protected $touches = array('post');

public function post() Page 64 of 187

Page 65: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

{ return $this->belongsTo('Post'); }

}

ตอนนถาเราทาการแกไขขอมลในตาราง Comment, คอลมน updated_at ขอมลในตาราง Postทเชอมดวยกจะถกแกไขดวย

การจดการตารางทใชเชอม

laravel เตรยมฟงกชน pivot มาใหเราใชในการจดการขอมลของตารางทใชเชอมตรงกลางระหวางสองตารางดงตวอยางเลยครบ

$user = User::find(1);

foreach ($user->roles as $role){ echo $role->pivot->created_at;}

คลาส Role model จะดงคาออกมาจากตารางกลาง โดยใชฟงกชนpivot โดยอตโนมต

โดยคาเรมตนแลวคาทไดจาก ตารางทเปนตวเชอมจะมคาเดยวทใชอางองไปยง อกตารางคอ id เทานนแตถาเราตองการเพม กตองเพมไปตอนทกาหนดความสมพนธแบบในตวอยาง

return $this->belongsToMany('Role')->withPivot('foo', 'bar');

ตอนนตวแปร foo กบ bar จะถกใชกบฟงกชน pivot ในการจดการตาราง Role

และถาเราตองการ คอลมน created_at กบ updated_at เพอใชกาหนดเวลา laravel มฟงกชน withTimestampsซงเราตองกาหนดตอนประกาศความสมพนธครบ

return $this->belongsToMany('Role')->withTimestamps();

ตอมาถาเราตองการลบขอมลในตารางในตารางกลาง เพอความถกตองของขอมลเราจะใชฟงกชน detachนะครบPage 65 of 187

Page 66: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการใชงาน

User::find(1)->roles()->detach();

เราจะทาการแกไขไมใหผใชงานหมายเลข 1 มสทธในการทาอะไรเลย

Collectionsขอมลทเปนผลลพทของการคนหานนจะกลบออกมาเปน อาเรย eloquent อานวนความสะดวกใหเราโดยมฟงกชนcontains ใหในการตรวจสอบขอมล

ตรวจวาในผลลพททไดมามขอมลทมคยหลก เปน 2 ไหม

$roles = User::find(1)->roles;

if ($roles->contains(2)){ //}

เพอความสบายของเรายงขนไปอกเมอคนเสรจกเอาเฉพาะคา role แปลงเปนอาเรย หรอ json เสรจสรรพเลย

$roles = User::find(1)->roles->toArray();

$roles = User::find(1)->roles->toJson();

แทนทจะใชการทา foreach แบบปกตเหมอนเดม eloquent มฟงกชน each กบ filter มาให การใชงาน each และ filter

$roles = $user->roles->each(function($role) {

});

$roles = $user->roles->filter(function($role)Page 66 of 187

Page 67: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$roles = $user->roles->filter(function($role) {

});

เพมการ Callback

$roles = User::find(1)->roles;

$roles->each(function($role){ //});

เรยงลาดบคาทอยในอาเรยดวยฟงกชน sortby

$roles = $roles->sortBy(function($role){ return $role->created_at;});

บางครงเราตองการเปลยนแปลงคาทงออปเจคเลย eloquent กมฟงกชน newCollection ใหใชในการเขยนทบ

ตวอยางการใชงาน

class User extends Eloquent {

public function newCollection(array $models = array()) { return new CustomCollection($models); }

}

Accessors & Mutatorsถายงไมเขาใจวาสองฟงกชนนมนคออะไร ทาอะไรไดบาง แนะนาเขาไปอานทผมสรปไวกอนใน บลอก ครบบางเวลาเราตองการ จดรปแบบขอมลใหอยในรปแบบทเราตองการ กอนจะบนทกหรอดงมาใช eloquent เตรยมฟงกชนPage 67 of 187

Page 68: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

getFooAttribute แตการตงชอฟงกชนคาเรมตนของคาทเปนชอของคอลมน ตองขนตนดวยตวพมพใหญในกรณทมเครองหมาย _ มาคน คาหลงจากนนกตองขนตนดวยตวพมพใหญครบ

ตวอยาง

class User extends Eloquent {

public function getFirstNameAttribute($value) { return ucfirst($value); }

}

ในตวอยางเราทาการสราง accessor ของคอลมน first_name ทนคาทเราสงเขาฟงกชนนกจะถกสงไปเกบถกทละครบ

การสรางฟงกชน Mutator กคลายๆ กน

ตวอยาง

class User extends Eloquent {

public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); }

}

Date Mutatorsโดยคาเรมตนเเลว Eloquent จะทาการตงคาใหคอลมน created_at, updated_at, และ deleted_at ตามคาเบองตนของphp.ini อยเเลวนะครบ

แตถาเราตองการแกไขหรอเรยกใชงานแบบไมอยากเขาไปยงตรงๆ กสามารถใชฟงกชน getDates Page 68 of 187

Page 69: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

แบบในตวอยางเลยครบ

public function getDates(){ return array('created_at');}

ขางในเราสามารถจดการกอนเอาไปใชไดเลย และ laravel กมคลาสจดการ วนเวลาทมฟงกชนหลากหลายมากอยางCarbon มาใหใชดวย แตตองไปประกาศชอยอในไฟล app.php กอนนะครบ โดยคาเรมตนเเลวไมม

Model EventsEloquent เตรยมฟงกชนทคอยดกจบเหตการณตางๆ มาใหเราดงนครบ creating, created, updating, updated, saving,saved, deleting, deleted. แตถาคาทสงกลบมาเปน false เหตการณ creating, updating, หรอ saving จะถกยกเลก

การยกเลกการแกไขขอมล

User::creating(function($user){ if ( ! $user->isValid()) return false;});

การทเราจะสรางฟงกชนในการจดการเหตการณของ model ตองประกาศฟงชน boot กอนนะครบ

การประกาศฟงกชน boot

class User extends Eloquent {

public static function boot() { parent::boot();

// Setup event bindings... }

} Page 69 of 187

Page 70: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Model ObserversEloquent มคลาสชอ Observer ในการสรางฟงกชนทใชจดการเหตการณ ฟงกชนcreating, updating, savingกตงตามเหตการณทจะใหฟงกชนนนจดการครบ ตวอยาง

class UserObserver {

public function saving($model) { // }

public function saved($model) { // }

}

แลวเรากตองประกาศโดยใชฟงชน observe แบบตวอยาง

User::observe(new UserObserver);

การแปลงคาเปน Arrays หรอ JSONการแปลงผลลพททคนมาใหกลายเปน array

$user = User::with('roles')->first();

return $user->toArray();

return User::all()->toArray();

การแปลงผลลพธใหกลายเปน json

return User::find(1)->toJson(); Page 70 of 187

Page 71: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การใชงาน Eloquent จากใน route เลย

Route::get('users', function(){ return User::all();});

บางเวลาาเราไมอยากใหบางคอลมนถกเรยกไปพรอมกบ toJson หรอ toArray เรากใชตวแปร hidden ในการนน

ตวอยางการใชงาน

class User extends Eloquent {

protected $hidden = array('password');

}

Page 71 of 187

Page 72: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Errors & Logging

การแสดง Errorโดยคาเรมตนเเลวการแสดงขอผดพลาดจะถกเปดใชงานอยเเลว หากเราพฒนาเวบเสรจกอนจะสงขนโฮสตงกควรเขาไปตงคาตวแปร debug ท app/config/app.php ใหเปน false

การจดการ Errorsโดยคาเรมตนเเลวการจดการขอผดพลาดตางๆเราจะทาในไฟล app/start/global.php

App::error(function(Exception $exception){ Log::error($exception);});

ถาเราอยากกาหนดการทางานหลงจากเกด RuntimeException เรากทาไดดงตวอยางครบ

App::error(function(RuntimeException $exception){ // Handle the exception...});

เมอเราใชการ return ในฟงกชนขางลางน คาจะถกสงกลบไปยงบราวเซอรเสมอครบ:

App::error(function(InvalidUserException $exception){ Log::error($exception);

return 'Sorry! Something is wrong with this account!';});

การดกรอ PHP fatal errors เราใชฟงกชน App::fatalPage 72 of 187

Page 73: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

App::fatal(function($exception){ //});

HTTP Exceptionsกรณขอผดพลาดทเกดขนเพราะไมพบหนาทเรยก (404), กบไมมสทธเขาถง (401)เราสามารถแกไขคาทจะไปแสดงไดดงน

App::abort(404, 'Page not found');

App::abort(401, 'You are not authorized.');

คา 404 คอรหสขอผดพลาดครบ

การจดการขอผดพลาด 404เราสามารถสรางหนาแสดงขอผดพลาดทเรา สามารถออกแบบไดเอง แลวตองมาตงคาแบบในตวอยางนพารามเตอรทหนงคอ ทอยของไฟล view

App::missing(function($exception){ return Response::view('errors.missing', array(), 404);});

การเกบ logคลาสทใชในการเกบ log ของ laravel เปนการใชคลาส Monolog มาพฒนาตอ Laravel ตงคาเรมตนใหเกบ logทกวนแลวสงไปเกบไวใน app/storage/logsเราสามารถกาหนดคา log ทจะเขยนไดดงตวอยาง

Log::info('This is some useful information.');

Log::warning('Something could be going wrong.'); Page 73 of 187

Page 74: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Log::error('Something is really going wrong.');

ประเภทของ log ถกประกาศไวในมาตรฐาน RFC 5424 ม debug, info, notice, warning, error, critical, และ alert.

ตวอยางการสงคาทเปนอาเรยใหฟงกชน info ทอยในคลาส log

Log::info('Log message', array('context' => 'Other helpful information'));

การดงคามาใชกใชฟงกชนตามตวอยางเลยครบ

$monolog = Log::getMonolog();

เราสามารถกาหนดเหตการณทเราจะใหเกบ log ไดโดยใชฟงกชน listen:

ตวอยาง

Log::listen(function($level, $message, $context){ //});

Page 74 of 187

Page 75: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Events

การใชงานเบองตน

คลาส Event เตรยมมาใหเราใชในการดกจบเหตการณตางๆทเกดขนบน เวบของเรา หมายเหต Eventคอเหตการใดทเกดขนบนเวบเรา ยกตวอยางการเพมลบแกไข , Listener คอ ฟงกชนทคอยดกจบเหตการ , fireคอฟงกชนทสงใหเกดเหตการขนเพอให listerner ทางาน

การดกรอฟงเหตการณ

Event::listen('user.login', function($user){ $user->last_login = new DateTime;

$user->save();});

การสงใหเกดเหตการณขน

$event = Event::fire('user.login', array($user));

เราสามารถกาหนดลาดบเหตการทจะใหเกดได โดยคาลาดบทเกดเรยงจากนอยไปหามาก.

การใชลาดบควบคมการทางาน

Event::listen('user.login', 'LoginHandler', 10);

Event::listen('user.login', 'OtherHandler', 5);

บางครงเราอยากจะใหฟงกชนทดกฟงอยทางานแคครงเดยว เราสามารถใชการ return false เพอหยดฟงกชนนได

หยดการทางานของเหตการPage 75 of 187

Page 76: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Event::listen('user.login', function($event){ // Handle the event...

return false;});

Wildcard Listenersคอการดกฟงทกเหตการเลย ไมเฉพาะเจาะจงเเลว

การใชงาน

Event::listen('foo.*', function($param, $event){ // Handle the event...});

ทนถามเหตการณอะไรทขนตนดวย foo..ฟงกชนในตวอยางกจะทางาน

ใช Classes กบ Listenersในบางกรณ เราสามารถผกคลาสเขากบเหตการได โดย laravel จะใชการทา Laravel IoC container,ในการจดการ

ตวอยาง

Event::listen('user.login', 'LoginHandler');

โดยคาเรมตนฟงกชน handle ในคลาส LoginHandlerจะถกเรยกกอนเลย เหมอนกบ _construct

ฟงกชน handle จะถกเรยกใชเลย

class LoginHandler {

public function handle($data) { Page 76 of 187

Page 77: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

// }

}

ถาเราไมตองการ กผกเมทอดทเราตองการเขาไปดงนครบ

Event::listen('user.login', 'LoginHandler@onLogin');

การเรยงลาดบเหตการ

ใชฟงกชน queue กบ flush ในการเรยงลาดบการเกดเหตการ

การสรางลาดบ

Event::queue('foo', array($user));

Event Subscribersคอคลาสทเราแบงกลมฟงกชนทใชจดการเหตการ โดยตนทางมาจากฟงกชน subscribe

ตวอยางการสรางคลาส Subscriber

class UserEventHandler {

/** * �

����������

������������

��������

*/ public function onUserLogin($event) { // }

/** * �

������������������

*/ public function onUserLogout($event) Page 77 of 187

Page 78: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

{ // }

/** * ��

��������������������������

* * @param Illuminate\Events\Dispatcher $events * @return array */ public function subscribe($events) { $events->listen('user.login', 'UserEventHandler@onUserLogin');

$events->listen('user.logout', 'UserEventHandler@onUserLogout'); }

}

เมอประกาศคลาสแลว การนาไปใชงานเรากตองเอาไปลงทะเบยนกบคลาสหลก

ตวอยาง

$subscriber = new UserEventHandler;

Event::subscribe($subscriber);

Page 78 of 187

Page 79: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Facadesความเหนสวนตว บทนจะตองใชจนตนาการเยอะหนอยนะครบ เพราะเปนเรองของแนวคดทใชสรางจดขายของตวlaravel เลยครบ ในการตด $this-> ทงไปทาใหโคดอานงาย ทาความเขาใจงาย ลดบรมาณการเขยนลงใครทอยากจะเอาคลาสบน packagist มาทาเปน package ใชเองตองอานครบ

รจกดานหนาของตกกนกอน

ถายงไมรจกวามนคออะไรลองไปอานทผมสรปไวกไดครบ

Facades แปลเปนไทยคอ ดานหนาของตก ทมาของมนคอการใช facade design pattern เขามาจดการทาใหคลาสทเราเรยกใชงานกลายเปนแบบ static แทนทจะสรางเปนออปเจคเหมอนทผานมา การทาแบบ staticคอการเรยกใชคลาสนนตรงๆ เลยครบ การทาแบบนจะทาใหรปแบบของฟงกชนดเขาใจไดงายมาก บางครงเราไปเจอคลาสทเจงๆ และอยากเอาเขามาใชใน laravel เรากอยากใหมนเรยกแบบ staticไดเพราะฉะนนเราจงตองมาดบททนครบ

Note: กอนทจะมาเจาะลกลงไปในโครงสรางหลกของ laravel แนะนาใหไปอานบบทน IoC container กอนครบ

หลกการเบองตน

โดยโครงสรางหลกของ laravel แลว, facade คลาสถกวางใหใชในการเรยกใชงาน วตถทถกลงทะเบยนไวในคลาสContainer ในการสราง facade ขนใชเองนน เราตองการแคเมทอด getFacadeAccessorแคตวเดยวครบ ตวคลาส Facadeหลกจะทาการใช __callStatic() ซงเปน magic-method ของ phpจะไปทาการเรยกออปเจคของคลาสทเราทาการลงทะเบยนไวทคลาส Service Providerของ ไลบราล นนๆ

การประยกตใชงานPage 79 of 187

Page 80: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ในตวอยาง, เรายกตวอยาง คลาส Cache. ซงเรยกตวฟงกชน get ซงตอนนเปนรปแบบ static นะครบ

$value = Cache::get('key');

แตถาเราตามเขาไปดตามเสนทางน Illuminate\Support\Facades\Cache เราจะไมเหนฟงกชน get อยเลย

class Cache extends Facade {

/** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'cache'; }

}

การทางานคอเมทอด getFacadeAccessor()จะทาการสงคาทเราทาการผกไวในคลาสหลก โดยใชสตรงทเรากาหนดตรงreturn ในการคนหาคลาสทตรงกนให

เมอผใชงานอางองถงตว Cache คลาสในรปแบบ static, Laravel จะผกcache เขากบ IoC containerและสงคาขอฟงกชนตามในตวอยาง (กรณนเปน get)

ถาจะเขยน Cache::get แบบปกตจะไดแบบนครบ

$value = $app->make('cache')->get('key');

การสราง Facadesการสราง Facade ให package หรอ คลาสภายนอกตองการ 3 อยางครบ

การทา IoC bindคลาส facadeการสราง alias ให facade Page 80 of 187

Page 81: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการสราง package แบบงายครบPaymentGateway\Payment.

namespace PaymentGateway;

class Payment {

public function process() { // }

}

เราตองทาการผกคลาสเขากบตวคลาสหลกกอน

App::bind('payment', function(){ return new \PaymentGateway\Payment;});

ทๆ เราจะนาฟงกชนขางบนไปเขยนไวคอทไฟล service provider ทชอ PaymentServiceProvider โดยใสไวขางในเมทอดregisterเราตองเอาเสนทางทอยของคลาส PaymentServiceProvider ไปใสตรงท app/config/app.php ดวย

ตอมา เรากสรางคลาส Facade ใหกบคลาส Payment

use Illuminate\Support\Facades\Facade;

class Payment extends Facade {

protected static function getFacadeAccessor() { return 'payment'; }

}

สดทาย เรานาทอยของไฟล Facade ไปใสทอาเรยชอ aliases ใน app/config/app.php และตองใชคาสงphp artisan dump-autoload กอนนะครบไมงน laravel จะไมเจอคลาส แลวสดทายเราสามารถเรยกเมทอด process ของPage 81 of 187

Page 82: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

คลาส Payment ในรปแบบ static ไดเเลว

Payment::process();

Page 82 of 187

Page 83: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Helper Functionsเปนคลาสอเนกประสงคทรวมการจดการอาเรย,สตรง,ยอารแอล อนๆ

Arrays

array_add

ฟงกชน array_add ใชเพม key / value ลงในอาเรยถาไมม key นนอย

$array = array('foo' => 'bar');

$array = array_add($array, 'key', 'value');

array_divide

ฟงกชน array_divide จะทาการแบงอาเรยทสงเขาไปออก เปนสองกอน กอนหนงเปน key กอนหนงเปน value

$array = array('foo' => 'bar');

list($keys, $values) = array_divide($array);

array_dot

ฟงกชน array_dot จะทาการแผอาเรยหลายมต ออกเปนมตเดยวโดยเราจะใชเครองหมายดอทในการเขาถงหลงจากใชฟงกชนแแลว

$array = array('foo' => array('bar' => 'baz'));

$array = array_dot($array);

// array('foo.bar' => 'baz');

array_except Page 83 of 187

Page 84: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ฟงกชน array_except ใชลบคา key หรอ value ออกจากอาเรย

$array = array_except($array, array('keys', 'to', 'remove'));

array_fetch

ฟงกชน array_fetch จะสงอาเรยมตเดยวทเรากาหนดไดวาจะเอาคาเฉพาะ คยชออะไร

$array = array(array('name' => 'Taylor'), array('name' => 'Dayle'));

var_dump(array_fetch($array, 'name'));

// array('Taylor', 'Dayle');

array_first

ฟงกชน array_first จะสงคาแรกของอาเรยคนมา

$array = array(100, 200, 300);

$value = array_first($array, function($key, $value){ return $value >= 150;});

array_flatten

ฟงกชน array_flatten ทาการแตกอาเรยหลายมตลงมาเหลอมตเดยว

$array = array('name' => 'Joe', 'languages' => array('PHP', 'Ruby'));

$array = array_flatten($array);

// array('Joe', 'PHP', 'Ruby');

array_forget Page 84 of 187

Page 85: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ฟงกชน array_forget ใชลบคาออกจากอาเรยโดยกาหนดตาแหนง ดวยใชเครองหมายดอท $array = array('names' =>array('joe' => array('programmer')));

$array = array_forget($array, 'names.joe');

array_get

ฟงกชน array_get ใชดงคาออกจากอาเรยโดยกาหนดตาแหนง ดวยเครองหมายดอท

$array = array('names' => array('joe' => array('programmer')));

$value = array_get($array, 'names.joe');

array_only

ฟงกชน array_only ใชดงคาจากเฉพาะ key ทเรากาหนด ไดคาเดยว

$array = array('name' => 'Joe', 'age' => 27, 'votes' => 1);

$array = array_only($array, array('name', 'votes'));

array_pluck

ฟงกชน array_pluck ใชดงคาตามคยทกาหนด ไดหลายๆคา

$array = array(array('name' => 'Taylor'), array('name' => 'Dayle'));

$array = array_pluck($array, 'name');

// array('Taylor', 'Dayle');

array_pull

ฟงกชน array_pull ใชดงคาออกมาพรอมกบลบไปดวย.

$array = array('name' => 'Taylor', 'age' => 27); Page 85 of 187

Page 86: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$name = array_pull($array, 'name');

array_set

ฟงกชน array_set ใชเพมคาลงอาเรยโดยกาหนดทอยโดยใชเครองหมายดอท

$array = array('names' => array('programmer' => 'Joe'));

array_set($array, 'names.editor', 'Taylor');

array_sort

ฟงกชน array_sort ใชเรยงลาดบคาในอาเรย

$array = array( array('name' => 'Jill'), array('name' => 'Barry'),);

$array = array_values(array_sort($array, function($value){ return $value['name'];}));

head

ใชคนคาแรกของ อาเรย มประโยชมากในการทาการเรยกฟงกชนแบบตอเนอง

$first = head($this->returnsArray('foo'));

last

ใชคนคาสดทายของ อาเรย มประโยชมากในการทาการเรยกฟงกชนแบบตอเนอง

$last = last($this->returnsArray('foo'));Page 86 of 187

Page 87: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Pathsตวแปรทใชเกบคาทอยของโฟลเดอร

app_path

เกบคาทอยของโฟลเดอร application

base_path

เกบคาทอยของเวบระดบ root เลย

public_path

เกบคาทอยของโฟลเดอร public

storage_path

เกบคาทอยของโฟลเดอร application/storage

Stringsคลาสน ใชจดการตวอกษร เชนแปลงเปนตวใหญ รปแบบไวยกรณ

camel_case

แปลงคาใหขนตนดวยตวใหญซงเรยกวา camelCase.

$camel = camel_case('foo_bar');

// fooBar

class_basename

ใชดงชอคลาสจาก namespace path. Page 87 of 187

Page 88: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$class = class_basename('Foo\Bar\Baz');

// Baz

e

เรยกใชฟงกชน htmlentites เพอกรองคา

$entities = e('<html>foo</html>');

ends_with

ใชตรวจวาในประโยคจบดวยคาทกาหนดไหม

$value = ends_with('This is my name', 'name');

snake_case

แปลงคาใหไปอยในรปแบบ snake_case คออกษรขนตนคาเปนตวเลกแลวแบงคาดวยเครองหมายอนเดอรสกอร

$snake = snake_case('fooBar');

// foo_bar

starts_with

ใชตรวจวาในประโยคขนตนดวยคาทกาหนดไหม

$value = starts_with('This is my name', 'This');

str_contains

ใชตรวจวาในประโยคมคาทกาหนดไหม

$value = str_contains('This is my name', 'my'); Page 88 of 187

Page 89: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

str_finish

เพมตวอกษรทกาหนดลงไปทายคา

$string = str_finish('this/string', '/');

// this/string/

str_is

ตรวจวาคาทปอนเขามาตรงกบรปแบบทกาหนดไหม

$value = str_is('foo*', 'foobar');

str_plural

แปลงตวอกษรจากเอกพจนเปนพหพจ ปล.เตม s,es,ies

$plural = str_plural('car');

str_random

สมตวอกษรขนมาโดยกาหนดความยาวตามคาทปอนเขามา

$string = str_random(40);

str_singular

แปลงตวอกษรจากเอกพจนเปนเอกพจน

$singular = str_singular('cars');

studly_case

แปลงคาใหไปอยในรปแบบ StudlyCase คออกษรขนตนคาเปนตวใหญถามเครองหมายอนเดอรสกอรกลบออก Page 89 of 187

Page 90: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$value = studly_case('foo_bar');

// FooBar

trans

ใชแปลภาษาเหมอนกบใช Lang::get.

$value = trans('validation.required'):

trans_choice

แปลโดยเรมตนจากคาทกาหนดโดยนบตอไปตามคาจากตวแปร $count เหมอนกบ Lang::choice.

$value = trans_choice('foo.bar', $count);

URLsเปนฟงกชนทใชจดการ URL

action

สรางลงจาก controller

$url = action('HomeController@getIndex', $params);

asset

สรางลงจากไฟลทอยในโฟลเดอร asset

$url = asset('img/photo.jpg');

link_to

สรางลงโดยกาหนดคาตางๆเอง Page 90 of 187

Page 91: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

echo link_to('foo/bar', $title, $attributes = array(), $secure = null);

link_to_asset

สรางลงจากไฟลทอยในโฟลเดอร asset

echo link_to_asset('foo/bar.zip', $title, $attributes = array(), $secure = null);

link_to_route

สรางลงโดยอางองจากคา route

echo link_to_route('route.name', $title, $parameters = array(), $attributes = array());

link_to_action

สรางลงเขาไปหาฟงกชนใน controller

echo link_to_action('HomeController@getIndex', $title, $parameters = array(), $attributes = array());

secure_asset

สรางลงจากไฟลทอยในโฟลเดอร asset โดยใช https

echo secure_asset('foo/bar.zip', $title, $attributes = array());

secure_url

สรางลงทเปน https

echo secure_url('foo/bar', $parameters = array());

urlPage 91 of 187

Page 92: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

สรางลงจากการกาหนดเอง

echo url('foo/bar', $parameters = array(), $secure = null);

Miscellaneousฟงกชนอเนกประสงค

csrf_token

สรางคา hash ทใชปองกนการโจมตแบบ csrf

$token = csrf_token();

dd

ใชในการดงคาทงหมดในตวแปรออกมาแสดง

dd($value);

value

ดงคาจากฟงกชนทไมมชอ

$value = value(function() { return 'bar'; });

with

ใชดงคากลบมาเปนวตถ

$value = with(new Foo)->doWork();

Page 92 of 187

Page 93: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Forms & HTMLเปนคลาสทใชจดการ Form กบ html

การเปดฟอรม

ตวอยาง

{{ Form::open(array('url' => 'foo/bar')) }} //{{ Form::close() }}

โดยคาเรมตนชนดของคารองขอจะเปน POST ถาจะเปลยนกเเคใสพารามเตอรไปเหมอนในตวอยางครบ

echo Form::open(array('url' => 'foo/bar', 'method' => 'put'))

สามารถกาหนดเปาหมายของไฟลทจะสงคาไปไดหลายรปแบบตามตวอยางเลยครบ

echo Form::open(array('route' => 'route.name'))

echo Form::open(array('action' => 'Controller@method'))

จะกาหนดพารามเตอรโดยเฉพาะเลยกตามตวอยางครบ:

echo Form::open(array('route' => array('route.name', $user->id)))

echo Form::open(array('action' => array('Controller@method', $user->id)))

ถาจะสรางฟอรมมาอพโหลดไฟลกตองตงคาแบบตวอยางครบ files

echo Form::open(array('url' => 'foo/bar', 'files' => true))

การปองกน CSRF Page 93 of 187

Page 94: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Laravel เตรยมการปองกนโดยสรางคา hash ขนจาก session ของ user แลวสราง hidden form ขนมาใสไว เราเพยงแตใชเมทอด tokenประกาศไวกเสรจเเลวครบ

ตวอยาง

echo Form::token();

การปองกน csrf จากใน route

Route::post('profile', array('before' => 'csrf', function(){ //}));

การดงคาจากตารางมาใสในฟอรม

laravel เตรยมเมทอด Form::model มาเพอการนนครบ

ตวอยาง

echo Form::model($user, array('route' => array('user.update', $user->id)))

ถาชอของคอลมนตรงกบ ชอของฟอรมคากจะปรากฏมาโดยอตโนมต อยางเชนฟอรมชอ email,ตรงกบโมเดลชอ emailแตคาทจะปรากฏบนฟอรมไมไดมแคคาทมาจากโมเดลอยางเดยว มจาก session คาทมาจากการสงพารามเตอรอกลาดบการแสดงคาจงตามขางลางนครบ 1. คาจาก Session (คาเกาทเกดจาการปอน) 2. คาจากการสงพารามเตอร 3.คาจากโมเดล

ซงเมอ server สงคาการตรวจสอบคาทปอนมาวาผดพลาด คาทสงมาจากโมเดลกจะตามกลบขนมาดวย

หมายเหต: เมอใช Form::modelอยาลม Form::close!

การใสปายชอ Page 94 of 187

Page 95: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การใสปายชอใหฟอรม

echo Form::label('email', 'E-Mail Address');

การใสคลาสใหฟอรม

echo Form::label('email', 'E-Mail Address', array('class' => 'awesome'));

หมายเหต: หลงจากใสคา label ชอฟอรม คา id กจะตงตามคา label โดยอตโนมต.

Text, Text Area, Password & Hidden Fieldsตวอยางฟอรมทใชรบคา

echo Form::text('username');

กาหนดคาเรมตนใหฟอรม

echo Form::text('email', '[email protected]');

หมายเหต: hidden และ textarea ฟงกชนใชงานเหมอน text เมทอด

สรางฟอรมรบรหสผาน

echo Form::password('password');

สรางฟอรมชนดอน

echo Form::email($name, $value = null, $attributes = array());echo Form::file($name, $attributes = array());

Checkboxes and Radio ButtonsPage 95 of 187

Page 96: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

สรางฟอรมชนดเลอกคา

echo Form::checkbox('name', 'value');

echo Form::radio('name', 'value');

สรางฟอรมชนดเลอกคาโดยคาเรมตนคอเลอกไวเเลว

echo Form::checkbox('name', 'value', true);

echo Form::radio('name', 'value', true);

File Inputสรางฟอรมอพโหลดไฟล

echo Form::file('image');

Drop-Down Listsสรางฟอรมใหเลอกคาแบบดรอบดาวน

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));

สรางฟอรมชนดเลอกคาแบบดรอบดาวนโดยคาเรมตนคอเลอกไวเเลว

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');

แบงกลมใหตวเลอก

echo Form::select('animal', array( 'Cats' => array('leopard' => 'Leopard'), 'Dogs' => array('spaniel' => 'Spaniel'),));

Page 96 of 187

Page 97: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Buttonsสรางป มสงคา

echo Form::submit('Click Me!');

หมายเหต: ถาจะสรางป มธรรมดากใช button

Custom Macrosmacro คอชดของ html ทเราเขยนเตรยมไว สามารถนาเอาไปแทรกตามใจเราได

การสราง Form Macro

Form::macro('myField', function(){ return '<input type="awesome">';});

เรยก Form Macro มาใช

echo Form::myField();

Page 97 of 187

Page 98: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

IoC Container

Introduction

หมายเหต :: ถาใครยงไมคอยเขาใจวาสองตวนมนคออะไรลองไปอานทผมสรปไวทนกอนครบ

IOC คอคลาสทใชในการจดการ library ภายนอกทเรานาเขามาใช หรอทดงเขามาใชโดย composerตอไปนจะเรยกยอๆวาIOC นะครบIOC จะชวยในการเรยกใชงานคลาสตาง การทาความเขาใจ IOC ถอวาเปนหวใจเลยในการปทางสการทาเวบขนาดใหญสาหรบ

laravel นะครบ เพราะหลกการนจะเกยวโยงไปถงเรอง Service Provider กบ Facade

การใชงานเบองตน

การใชงาน IOC ในการผก object

App::bind('foo', function($app){ return new FooBar; //});

งายคอตอไปนพารามเตอรชอ foo จะใชเปนตวแทนของ class FooBar ทถกสรางเปนวตถแแลว

การเรยกใชงาน

$value = App::make('foo');

เมอเราเรยกใชงาน App::make เมทอด ฟงกชนขางบนกจะถกเรยกใชงาน ตวแปร valueกจะรบคณสมบตตางๆ ของคลาส FooBar เขามา

บางครงเราไมตองการสราง instane ทกครงทรเฟรช laravel มฟงกชน singleton มาใหใชในการนเลยครบPage 98 of 187

Page 99: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการใชงาน

App::singleton('foo', function(){ return new FooBar;});

ถาไมตองการจดเพมเขาไปทงคลาสจะยดเขาไปเปนออปเจคกใชฟงกชน instance ไดเลยครบ

ตวอยางการผกออปเจคเขาไป

$foo = new Foo;

App::instance('foo', $foo);

Automatic Resolutionตวอยางการผกคลาสอยางรวดเรวขนโดยไมตองใช App::bind แลวแตขอใหชอตรงกนกพอ

ตวอยาง

class FooBar {

public function __construct(Google $baz) { $this->baz = $baz; }

}

$fooBar = App::make('FooBar');

ในตวอยางน ตวแปร $foofBar จะเกบคาคลาส Google ทถกแทรกเขามา

laravel จะทาการเรยกใช reflection class ของ php เพอทาการตรวจสอบคาตางๆ ในคลาสนนใหเองครบPage 99 of 187

Page 100: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

บางกรณคลาสทเราจะใชงานดนไปดงคลาสทเปน interface เขามาใชดวย เพอการนนเราตองใช App::bind เมทอดในการผก ดงตวอยาง

ตวอยางการผก class ทเปนเรยกใชงาน interface

App::bind('UserRepositoryInterface', 'DbUserRepository');

คลาสทเราเรยกใชงาน

class UserController extends BaseController {

public function __construct(UserRepositoryInterface $users) { $this->users = $users; }

}

ตอนน UserRepositoryInterface จะถกเรยกใชงานแลว

การประยกตใชงาน

เพอความยดหยนในการทดสอบและใชงาน Laravel เตรยมการใหเราใชงาน IOC ไในหลายกรณเลยครบ

ตวอยางการเรยกใชงาน Class OrderRepository

class OrderController extends BaseController {

public function __construct(OrderRepository $orders) { $this->orders = $orders; }

public function getIndex() { Page 100 of 187

Page 101: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$all = $this->orders->all();

return View::make('orders', compact('all')); }

}

ในตวอยางคลาส OrderRepository แทรกเขาไปโดยอตโนมตเมอ คลาส OrderController ทางาน เมอมการทา unit testingคลาส OrderRepository กจะถกเพมเขามาเหมอนกน

Filters, composers, และ event handlers อยนอกเหนอการทางานของ IoC containerเมอเราจะใชตองทาตามตวอยางครบ

การใชงาน View::composer,Route::filter และ Event::listen กบ IOC

Route::filter('foo', 'FooFilter');

View::composer('foo', 'FooComposer');

Event::listen('foo', 'FooHandler');

Service ProvidersService providers เปนการจบคลาส IOC ททางานคลายกนเขามาไวในทเดยวกน.แลวเรยกใชงาน ดวย facade โดยหลกเเลวทกคลาสหลกของ laravel ใชการทา service providerในการจดการเราสามารถเขาไปดไดตรงทตวแปรอาเรย providers ตรงทapp/config/app.php

จะสราง Service Provider ขนมาใชกบคลาสของเราเรมแรกตองดงคลาส Illuminate\Support\ServiceProviderและประกาศเมทอด register

ตวอยางการสราง Service Provider

use Illuminate\Support\ServiceProvider; Page 101 of 187

Page 102: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

class FooServiceProvider extends ServiceProvider {

public function register() { $this->app->bind('foo', function() { return new Foo; }); }

}

ในเมทอด register คลาส IOC จะเปนตวแปร $this->app ถาเราทาเสรจแลวกตองเอาเสนทางทอยของคลาส Providerของเราไปเพมในอาเรย providers ใน app.php ดวย

การเรยกใชงาน Service Provider ดวยเมทอด App::register

ตวอยาง

App::register('FooServiceProvider');

Container Eventsใน IOC กม event อยชอเมทอดวา resolving

การใชงาน resoliving เพอรอดวาม IOC ตวไหนทางานบาง

App::resolving(function($object){ //});

Page 102 of 187

Page 103: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Localization

แนะนา

คลาส Lang จะทาหนาทแปลภาษาในเบองตนใหกบเมนหรอปายกาหบตางๆ ในเวบของเรา

ไฟลทเกบขอมลภาษา

ถกเกบไวทโฟลเดอร app/lang โดยโครงสรางจะเปนแบบน

/app /lang /en messages.php /es messages.php

ไฟลทเกบภาษาจะเกบในรปแบบอาเรย:

ตวอยางของไฟลภาษา

<?php

return array( 'welcome' => 'Welcome to our application');

โดยคาเรมตนเเลว คาภาษาจะถกกาหนดไวท app/config/app.php แตถาจะตงเราจะตงแบบไมใหคลมไปทงเวบกใชเมทอดApp::setLocale

ตวอยาง

App::setLocale('es');Page 103 of 187

Page 104: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การใชงานเบองตน

การดงคาจากไฟลภาษา

echo Lang::get('messages.welcome');

ฟงกชน get ใชดงคาโดยมพารามเตอรคอชอภาษาและแถวทตองการดง

การสงพารามเตอรไป

พารามเตอรทสองจะใชรบคาทจะสงมา

'welcome' => 'Welcome, :name',

ตวอยางการใชงาน

echo Lang::get('messages.welcome', array('name' => 'Dayle'));

ตรวจวาในไฟลภาษามคอลมนนอย

if (Lang::has('messages.welcome')){ //}

PluralizationPluralization คอโครงสรางไวยากรณของแตละภาษาทมความแตกตางกน แตเราใชเครองหมายในการสรางตวเลอกระหวางเอกพจนกบพหพจน:

'apples' => 'There is one apple|There are many apples',

เเลวเรากใชฟงกชน Lang::choice ในการเลอกPage 104 of 187

Page 105: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

echo Lang::choice('messages.apples', 10);

เนองจากการแปลภาษาของ laravel สบทอดมาจากของ Symfony เราจงสามารถสรางเงอนไขทซบซอนดงตวอยางได

'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',

Page 105 of 187

Page 106: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Mail

การตงคา

Laravel นาไลบราล SwiftMailer มาใชงาน การตงคาอยท app/config/mail.php,โดยจะใหเราเปลยน SMTP host, port,และ username กบ password, แลวกคา from คอคาเรมตนของชอผรบ. ถาเราตองการใชไลบราร php mailในการสงกเพยงเปลยน driver เปน mail

การใชงานเบองตน

ฟงกชน Mail::send ใชในการสงอเมล

Mail::send('emails.welcome', $data, function($message){ $message->to('[email protected]', 'John Smith')->subject('Welcome!');});

เมทอด send ตวแปรแรกคอไฟล html ทเปนรปแบบขอมความในเมล. ตวทสองคอขอมลทจะเขยนลงเมล $dataซงจะถกสงไปยง view ตวทสามเปนฟงกชนทใชกาหนดคาตางๆของอเมล

Note: ตวแปร $message คอออปเจคของตว Swiftmailer class ซงเราจะใชกาหนดคาตางๆของเมล

Mail::send(array('html.view', 'text.view'), $data, $callback);

ตวอยางคอเราเลอกทจะสงไปในรปแบบใด html หรอ text

Mail::send(array('text' => 'view'), $data, $callback);

ตวอยางการปรบแตงเนอหาภายในเมล:

Mail::send('emails.welcome', $data, function($message){ Page 106 of 187

Page 107: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$message->from('[email protected]', 'Laravel');

$message->to('[email protected]')->cc('[email protected]');

$message->attach($pathToFile);});

เมอจะทาการแนบไฟลเราตองใสนามสกลกบชอใหมนดวย:

$message->attach($pathToFile, array('as' => $display, 'mime' => $mime));

การแทรกไฟลไวระหวางบรรทด

เราสามารถแนบรปไปโดยไมใหเเสดงไดโดยใชฟงกชน embed

ตวอยางการใชงาน

<body> Here is an image:

<img src="<?php echo $message->embed($pathToFile); ?>"></body>

เรยงลาดบการสงอเมล

Laravel เตรยมคลาส Queue มาใหเราใชในการเรยงลาดบการสงอเมล

ตวอยาง

Mail::queue('emails.welcome', $data, function($message){ $message->to('[email protected]', 'John Smith')->subject('Welcome!');});

เราสามารถหนวงเวลาการสงโดยใชฟงกชน later ตามตวอยางครบPage 107 of 187

Page 108: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Mail::later(5, 'emails.welcome', $data, function($message){ $message->to('[email protected]', 'John Smith')->subject('Welcome!');});

ถาเรามหลายคว มฟงกชนใหเราเรยงควอก คอ queueOn และ laterOn

Mail::queueOn('queue-name', 'emails.welcome', $data, function($message){ $message->to('[email protected]', 'John Smith')->subject('Welcome!');});

Mail & Local Developmentในการพฒนานน เรายงไมตองใชงานเมลจรงๆในการสงกได laravel เตรยมฟงกชน Mail::pretend หรอตงคา pretend ในapp/config/mail.php เปน true. เพอเขาส pretend mode ขอความบนเมลทถกสงจะถกเขยนบนลอกแทย

Page 108 of 187

Page 109: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Migrations & Seeding

คาอธบายเบองตน

Migrations คอการเกบประวตสรางจดเซฟของฐานขอมล. ทาใหเราสามารถเพมลบตาราง โดยยอนกลบไดหากไมถกใจสวนการเขยนตารางตองไปดเรอง Schema Builder การทา migration จะเปนการควบคมการทางานของ schema.

สราง Migrationsเรมดวยการรนคาสง migrate:make บน commandline:

การสรางตารางโดยใช commandline

php artisan migrate:make create_users_table

ไฟล migration ถกเกบไวทโฟลเดอร app/database/migrations แตละไฟลจะมวนกากบชอ

ดวยเพอใหระบบรลาดบการสรางไฟล

เราสามารถกาหนดทอยของไฟลไดโดยพารามเตอร --path เหมอนตวอยางขางลางครบ

php artisan migrate:make foo --path=app/migrations

พารามเตอร --table และ --create ใชในการสราง ตารางทงคเลยครบ

php artisan migrate:make create_users_table --table=users --create

Running Migrationsการสงใหคาสง migration ทางาน

php artisan migrate Page 109 of 187

Page 110: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

กาหนดทอยของไฟลทจะรน

php artisan migrate --path=app/foo/migrations

สงรนเฉพาะตรง package

php artisan migrate --package=vendor/package

หมายเหต: ถาเราเจอ error Class not foundใหรนคาสง composer update.

Rolling Back Migrationsการยอนกลบการทางานครงลาสด

php artisan migrate:rollback

การยอนกลบทงหมด

php artisan migrate:reset

การยอนกลบแลวทางานใหมอกรอบ

php artisan migrate:refresh

php artisan migrate:refresh --seed

Database SeedingLaravel เตรยมการฟงกชนทชวยในการปอนขอมลจาลอง ทอาจจะใชทดสอบการทางานของเวบไวในโฟลเดอร

app/database/seeds. ชอคลาสเรากตงชอตามตารางและรปแบบใหเปนไปตามแบบนครบ UserTableSeeder,โดยคาเรมตนเเลวจะเปน DatabaseSeeder โดยใชฟงกชน call เพอรนคลาสอนๆ ทาใหเราลาดบการทางานได

Page 110 of 187

Page 111: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยาง

class DatabaseSeeder extends Seeder {

public function run() { $this->call('UserTableSeeder');

$this->command->info('User table seeded!'); }

}

class UserTableSeeder extends Seeder {

public function run() { DB::table('users')->delete();

User::create(array('email' => '[email protected]')); }

}

การทางานกใชคาสง db:seed command บน Artisan CLI:

php artisan db:seed

ทาการยอนกลบการทางานดวย

php artisan migrate:refresh --seed

Page 111 of 187

Page 112: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Package Development

คาอธบายเบองตน

Packages คอการนาไลบรารภายนอกเขามาใชงานใน laravel ซงสวนมากจะอยบน Packagistและสวนมากอกไมไดปรบแตงใหเขากบ framework ไหนเปนพเศษ ซงตรงนเรากตอง ออกเเรงกนหนอยครบถาอยากจะม package เปนของเราเอง สวน การตดตง package ถามาเขยนในนคงจะยาว ผมเลยเขยนไวทเวบแลวอยากรตองทาไงตองตามไปดเลยครบ

การสราง Packageสถานทๆ เราจะทาการพฒนาคอโฟลเดอรชอ workbench ครบ แตตอนแรกเราตองเขาไปตงคาทไฟลapp/config/workbench.php ในไฟลนเราตองเปลยน name และ email ซง composer.json จะนาไปใสเวลาเราสราง packageขนมา

สรางโครงของ package ขนมาดวย CommandLine

php artisan workbench vendor/package --resources

parameter แรก vendor คอชอผพฒนา package คอชอของ package resources เปนพารามเตอรทบอกใหสราง migrations,views, config, ดวย

เมอคาสงขางบนทางาน packageของเราจะไปปรากฏทโฟลเดอร workbench ตอมาเราจะสราง ServiceProviderซงการตงชอจะเปนแบบน [Package]ServiceProvider สวนการนาไปลงททะเบยนทไฟล app.phpนนเสนทางของไฟลจะเปนแบบนครบ Taylor\Zapper\ZapperServiceProvider ซงตองนาไปวางไวทอาเรยชอ providers

กอนทจะเรมพฒนา package ของเรา ควรมารจกโครงสรางของมนกอนครบ

โครงสรางของ package Page 112 of 187

Page 113: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

โครงสรางโฟลเดอรของ package

/src /Vendor /Package PackageServiceProvider.php /config /lang /migrations /views/tests/public

เมอตามเขาไปดในโฟลเดอร src/����������/�

���package������ จะเจอกบไฟล ServiceProviderกบโฟลเดอร config, lang,

migrations, และ views ซงจะเหมอนในตวโฟลเดอร app หลกของเราแตยอสวนลงมาครบ

Service Providersเรมแรกในไฟล Service Provider จะมฟงกชน boot และ register. ซงในนเราจะสามารถใสฟงกชนอะไรกไดทจะชวยจดการ package ของเรา เชน ดงไฟล route เขามา,ใช IOC ดงคลาสอนเขามาชวยเพมevent เขามาดกฟง

ฟงกชน register จะเรมทางานทนทเมอ package เรมทางาน, ถาเรา package ของเราตองการคลาสอนๆในการทางานรวมดวยตองใชเมทอด boot ครบ

โดยคาเรมตนเเลวฟงกชน boot จะมคามาใหดงน

$this->package('vendor/package');// �

�����������������

��������

���������

������ boot package

ClassLoader::addDirectories(array( app_path().'/widgets' ));

ถาลบบรรทดแรกออกไปผลกคอ package ไมทางานครบ laravel จะไมรจก package นเลย Page 113 of 187

Page 114: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Package Conventionsตวอยางการเรยกใชงานคาตางๆใน package

เรยก view ของ package

return View::make('package::view.name');

เรยกคาของการตงคา

return Config::get('package::group.option');

หมายเหต: ถา package ของเราม migrations ควรใสชอ package เขาไปอยไฟลดวย เพอปองกนการเหมอนกบpackages อน

ขนตอนในการพฒนา

พอสรางโปรเจคเสรจ เรากใชคาสง php artisan dump-autoload เพอสรางไฟลทบอกทอยของ package ของเราขนมา

ตวอยาง

php artisan dump-autoload

Package Routingการทจะโหลดไฟล route เขามาใชตองใชฟงกชน include ในฟงกชน boot ครบ

ตวอยางการดง route มาใชใน Service Provider

public function boot(){ $this->package('vendor/package');

Page 114 of 187

Page 115: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

include __DIR__.'/../../routes.php';}

หมายเหต:ถาตองการใช controller ดวยมนใจวามนตองถกเพมไวในไฟล composer.json ในสวน autoload

การตงคา Packageบาง package เราตองดงคาตางๆ เชน appid,appsecret มาใช โดยเรมตนไฟล config.php จะอยในตว packageกรณทดงลงมาดวย composer แลวตดตงเสรจไฟล จะอยทโฟลเดอร /app/config/package

การเขาถงไฟล config

Config::get('package::file.option');

ตวพารามเตอรแรกคอชอของ package หลงจาก semicolon คอชอไฟล หลงเครองหมายดอทคอชอ อาเรย config.php.ถาโฟลเดอรทใชเกบไฟล config ของ package มไฟลเดยวกไมตองใสชอกไดครบ

ตวอยางกรณโฟลเดอรมไฟลเดยว

Config::get('package::option');

บางครงไฟลทตองใชใน package มนกดนไมไดอยใน package สามารถใชฟงกชน addNamespace ซงมอยในคลาส View,Lang, กบ Configดงตวอยางเลยครบ

View::addNamespace('package', __DIR__.'/path/to/views');

ทนเรากสามารถใชงานคลาส View ใน package ไดละ

return View::make('package::view.name');

Cascading Configuration Files

เมอเราดาวนโหลดไฟล package มาดวย composer ตองนาไฟลโฟลเดอร config ของ package ออกมาใชกอนPage 115 of 187

Page 116: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการใชงาน

php artisan config:publish vendor/package

เมอคาสงทางานเสรจจะปรากฎอยท app/config/packages/vendor/package

Package Migrationsเราสามารถทา migration ใหกบ package โดโดยใชพารามเตอร --bench ตามตวอยางเลยครบ

สราง migration ให package ในโฟลเดอร workbench

php artisan migrate:make create_users_table --bench="vendor/package"

สงให migration ของ package ทางาน

php artisan migrate --bench="vendor/package"

เมอพฒนาเสรจอยากจะลองใชงานจรงเองกอนเราตองใชพารามเตอร --packageเพอสง package ไปไวทโฟลเดอร vendor

ตวอยางคาสงการยาย package ไปไวท vendor

php artisan migrate --package="vendor/package"

Package Assetsบาง package จะมไฟล JavaScript, CSS, และ images.เราไมสามารถสรางลงโดยตรงจากโฟลเดอร vendor หรอworkbench ฉะนนเราตองยายไปไวท โฟลเดอร public

การยายไฟล css,js,image โดยใช commandline

php artisan asset:publishPage 116 of 187

Page 117: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

php artisan asset:publish vendor/package

แตถา package ยงอยในโฟลเดอร workbench ตองใชคาสงนครบ

php artisan asset:publish --bench="vendor/package"

ตอนนโฟลเดอรจะถกสงไปไวท โฟลเดอรpublic/packages ตวอยางชอโฟลเดอร userscape/kudos ตวอยางเสนทางทอยpublic/packages/userscape/kudos.

การแบงปน Packages ของเราเมอพฒนาเสรจแลว เราเกดอยากใหคนอนชวยพฒนาตอ หรชวยหาบกให เราตองอพ package ของเราขน github หรอbitbucket กอนครบ หลงจากนนไปสมคร Packagist เพอนา package ของเราไปผกไวกบฐานขอมลหลกของ composerหลงจากนน กใช composer โหลดลงมาใชเลย

Page 117 of 187

Page 118: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Paginationคอแบงการแสดงขอมลเปนหนาไปครบ

การตงคา

การตงคาการของอยท app/config/view.php ตวแปรชอ pagination ในการแบงหนา ฟงกชน pagination::sliderใชในการสรางเลขหนา pagination::simple ใชสรางป ม "previous" และ "next"

การใชงาน

การใชงานมอยหลายรปแบบ เเตทงายทสดใชเมทอด paginateบน query builder หรอ Eloquent model.

ตวอยางโดยใช query builder

$users = DB::table('users')->paginate(15);

You may also paginate Eloquent models:

ตวอยางโดยใช Eloquent Model

$users = User::where('votes', '>', 100)->paginate(15);

ในตวอยางเรากาหนดจานวนขมลตอหนาได สวนการแสดงผลบน view เราจะใชฟงกชน links

<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?> <?php endforeach; ?></div>

<?php echo $users->links(); ?>Page 118 of 187

Page 119: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เพยงแคนกจะไดการแบงหนาละครบ.

เราสามารถจดการๆ แบงหนาไดโดยฟงกชนตอไปนครบ:

getCurrentPage

getLastPage

getPerPage

getTotal

getFrom

getTo

บางครงเราอยากสรางเองเพราะอาจจะมขอมลทตองผานการคานวนหลายขน กใชเมทอดนเลยครบ Paginator::make

ตวอยาง

$paginator = Paginator::make($items, $totalItems, $perPage);

Appending To Pagination Linksเราสามารทาการเรยงลาดบการแสดงผลไดโดยใชเมทอด appends เหมอนในตวอยาง

<?php echo $users->appends(array('sort' => 'votes'))->links(); ?>

ลงทออกมาหนาตาจะเปนแบบน

http://example.com/something?page=2&sort=votes

Page 119 of 187

Page 120: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Query Builderคอการจดการๆควรของ laravel ชวยอานวยความสะดวกใหเรา ไมตองเขยนควรยาวๆ ดวยตวเองครบ

การเลอกขอมล

ดงคาทงหมดจากตาราง users

$users = DB::table('users')->get();

foreach ($users as $user){ var_dump($user->name);}

ดงคาแถวแรกจากตาราง users โดย name เทากบ john

$user = DB::table('users')->where('name', 'John')->first();

var_dump($user->name);

ดงคาจากตาราง users โดย name เทากบ john แลวกเอาแคคอลมนทชอวา name

$name = DB::table('users')->where('name', 'John')->pluck('name');

ดงคาทงหมดจากตาราง roles โดยเอาแคคอลมน title

$roles = DB::table('roles')->lists('title');

คาทคนมาจะเปนอาเรยนะครบ ถาเราอยากใสคยใหแตละแถวเราใสพารามเตอรตวทสองเขาไป name จะไปเปนคยใหกบtitle

$roles = DB::table('roles')->lists('title', 'name'); Page 120 of 187

Page 121: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมทอด select ใชกาหนดคาสงในการเลอกเอง

$users = DB::table('users')->select('name', 'email')->get();

$users = DB::table('users')->distinct()->get();

$users = DB::table('users')->select('name as user_name')->get();

เลอกขอมลจากผลการควรอกท

$query = DB::table('users')->select('name');

$users = $query->addSelect('age')->get();

การใช where

$users = DB::table('users')->where('votes', '>', 100)->get();

การใชหลายๆเงอนไขโดยวธเชนเมทอด

$users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();

ใช between

$users = DB::table('users') ->whereBetween('votes', array(1, 100))->get();

ตวอยางการใช where กบ In รวมกน

$users = DB::table('users') ->whereIn('id', array(1, 2, 3))->get();

$users = DB::table('users') ->whereNotIn('id', array(1, 2, 3))->get();

Page 121 of 187

Page 122: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ใชหาแถวทเปนคาวางตามคอลมน

$users = DB::table('users') ->whereNull('updated_at')->get();

ตวอยางการเรยงลาดบขอมล

$users = DB::table('users') ->orderBy('name', 'desc') ->groupBy('count') ->having('count', '>', 100) ->get();

การจากดขอมล

$users = DB::table('users')->skip(10)->take(5)->get();

Joinsตวอยางการ join ครบ

DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.id', 'contacts.phone', 'orders.price');

การจอยแบบเตมควรลงไปชวยประหยดเวลา เวลาคดไมออกวาจะใชฟงกไหนด แทรกควรลงไปตรงๆ เลย:

DB::table('users') ->join('contacts', function($join) { $join->on('users.id', '=', 'contacts.user_id')->orOn(...); }) ->get();

Page 122 of 187

Page 123: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Advanced Wheresการ where แบบ หลายเงอนไข

DB::table('users') ->where('name', '=', 'John') ->orWhere(function($query) { $query->where('votes', '>', 100) ->where('title', '<>', 'Admin'); }) ->get();

หนาตาของควรจะออกมาเปนแบบน

select * from users where name = 'John' or (votes > 100 and title <> 'Admin')

หาวามคานอยไหม

DB::table('users') ->whereExists(function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();

หนาตาของควรจะออกมาเปนแบบน

select * from userswhere exists ( select 1 from orders where orders.user_id = users.id)

Aggregates การหาผลรวมชนดตางๆPage 123 of 187

Page 124: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการคานวนคา

$users = DB::table('users')->count();

$price = DB::table('orders')->max('price');

$price = DB::table('orders')->min('price');

$price = DB::table('orders')->avg('price');

$total = DB::table('users')->sum('votes');

Raw ExpressionsRaw คอการใสควรแบบสดๆ เขาไปเลยไมตองไปใหฟงกชนสรางให ประหยดเวลามากขนเมอเราตองการคนหาแบบซบซอน

ตวอยางการใชคาสงควร

$users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get();

การเพมและลดคาใหคอลมน

DB::table('users')->increment('votes');

DB::table('users')->increment('votes', 5);

DB::table('users')->decrement('votes');

DB::table('users')->decrement('votes', 5);

การกาหนดคาคอลมนทจะเพมคาให Page 124 of 187

Page 125: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

DB::table('users')->increment('votes', 1, array('name' => 'John'));

การเพมขอมล

ตวอยาง

DB::table('users')->insert( array('email' => '[email protected]', 'votes' => 0));

การเพมคาพรอมกบเพมคา id ดวย

$id = DB::table('users')->insertGetId( array('email' => '[email protected]', 'votes' => 0));

หมายเหต: ถาใช PostgreSQL เมทอด insertGetId คาดหวงวาจะใชคอลมน "id" เปนตวทมนจะเพมให

การเพมหลายๆขอมล

DB::table('users')->insert(array( array('email' => '[email protected]', 'votes' => 0), array('email' => '[email protected]', 'votes' => 0),));

การแกไข

ตวอยาง

DB::table('users') ->where('id', 1) ->update(array('votes' => 1));

การลบPage 125 of 187

Page 126: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยาง

DB::table('users')->where('votes', '<', 100)->delete();

การลบขอมลทงหมดเปนการลบแบบแถวตอแถว

DB::table('users')->delete();

การลบแบบลบทงตารางดวยแลวสรางขนใหม

DB::table('users')->truncate();

การทา Unionsunion คอการจบผลลพทของการ selecet 2 ครง มารวมกนเปนหนงผลลพท Performing A Query Union

$first = DB::table('users')->whereNull('first_name');

$users = DB::table('users')->whereNull('last_name')->union($first)->get();

เมทอด unionAll ใชงานเหมอนกบ union เลยครบ

Caching Queriesเราสามารถทาการแคชหรอบนทกผลการควรไวบน session กอนดวยเมทอด remember

ตวอยาง

$users = DB::table('users')->remember(10)->get();

ในตวอยางเราจะแคชผลการคนหานเปนเวลา 10 นาท ระหวางนการควรจากตวอยางจะไมไปดงขอมลจากฐานขอมลแตจะดงจากแคชจนกวาจะหมดเวลาครบ

Page 126 of 187

Page 127: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Queuesคลาสทชวยเรยงลาดบการทางานของฟงกชนตางๆ

การตงคา

Laravel Queue เตรยมฟงกชนทใชในการเขาถง api ของเวบทใหบรการควไว การควคอการเรยงลาดบงานของเวบไซตเชน เรามเมลทตองสงถง 1000 ฉบบถาสงแบบเดม server อาจจะรบไมไหว เราจงมคลาส queue มาเพอการนครบ

ไฟลทใชตงคาเกบไวท app/config/queue.php. ในไฟลจะมขอมลทเราตองใชในการเชอมตอผใหบรการคว เชนBeanstalkd, IronMQ, Amazon SQS, and synchronous (สาหรบการทดสอบในเครอง)

ชอคลาสของผใหบรการควทเราจะปอนเขาไป:

Beanstalkd: pda/pheanstalkAmazon SQS: aws/aws-sdk-phpIronMQ: iron-io/iron_mq

การใชงานเบองตน

ในการสงงานใหมเขาไปในควเราใชฟงกชน Queue::push

Pushing A Job Onto The Queue

Queue::push('SendEmail', array('message' => $message));

พารามเตอรตวแรกเปน ฟงชนทเราใชควบคมควน. ตวทสองเปนขอมลทเราจะทาการคว

ตวอยางฟงกชนทใชควบคมการคว

class SendEmail { Page 127 of 187

Page 128: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

public function fire($job, $data) { // }

}

ฟงกชนfireรบพารามเตอร Job ตวทสองคอขอมล data ทจะสงลงคว

ถาเราไมใชเมทอด fireเราสามารถกาหนดไดตามตวอยางครบ

เปลยนจาก fire เปน Push

Queue::push('SendEmail@send', array('message' => $message));

เมอมการทางานไปเเลวเรากตองลบขอมลออกไปโดยใชเมทอด delete เพอลบ Job instance:

ตวอยางการลบ

public function fire($job, $data){ // Process the job...

$job->delete();}

ถาเราตองการเอางานททาไปกลบมาเขาควอกครงกใชเมทอด release ครบ

ตวอยาง

public function fire($job, $data){ // Process the job...

$job->release();} Page 128 of 187

Page 129: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เราสามารถกาหนดเวลาทจะหนวงไวกอนทจะสงใหงานตอไปทางานไดแบบนครบ

$job->release(5);

เมองานทเขาควเกดขอผดพลาดขน จะถกนากลบไปตอควใหม เราสามารถตรวจสอบการทางานใหมไดโดยฟงกชนattempts

ตรวจหางานทมการพยายามทามากกวา 3 ครง

if ($job->attempts() > 3){ //}

การเรยกขอมลของาน

$job->getJobId();

Queueing Closuresเราสามารถใชงานฟงกชนทไมมชอในการสรางงานไดโดยตวอยางเลยครบ

Queue::push(function($job) use ($id){ Account::delete($id);

$job->delete();});

หมายเหต: เมอใชฟงกชนทไมมชอกบ queue ตวแปร __DIR__ และ __FILE__ จะไมสามารถใชงานได

ถาใชบรการของ Iron.io push queues, ควรจะไมใชงานฟงกชนทไมมชอในเมล. จะมการตรวจสอบคารองวาสงมาจากIron.io.จรงหรอไม ตวอยาง https://yourapp.com/queue/receive?token=SecretToken.ควรทาการตรวจสอบคา secrettokenกอนทาการคว. Page 129 of 187

Page 130: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Running The Queue ListenerLaravel เตรยมคาสงqueue:listen เพอรอรบคาขอทมากจากผใหบรการ

ตวอยางการใชงาน

php artisan queue:listen

เราสามารถกาหนดคาการเชอมตอเสรมลงไปได:

php artisan queue:listen connection

เราสามารถใชโปรแกรม Supervisor เพอตรวจสอบวาคาสง queue listener ยงทางานอยไหม

สามารถตงคาเวลาทจะอนญาตใหเกดทางานขนได

ตวอยางการหนวงเวลา

php artisan queue:listen --timeout=60

สงใหงานชนแรกทอยบนควทางาน

php artisan queue:work

Push QueuesPush queues คอการโยนภาระการรอรบควจากททาบนเครองขงเรา เปลยนไปใหผบรการทาแทน ซงม Iron.ioเจาเดยวทสนบสนน. กอนอนเราตองไปสมครบรการของ Ironio กอน, แลวนาขอมลการเชอมตอมาใสไวทapp/config/queue.php

ตอมากใชคาสง Artisan queue:subscribe เพอลงทะเบยนควไวกบ Iron.io:

ตวอยาง Page 130 of 187

Page 131: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

php artisan queue:subscribe queue_name http://foo.com/queue/receive

ตอนน ถาเราไปดทหนาแสดงผลควท Iron.io , กจะเหนรายการคว และรายชอลงทเราจะสงใหทางาน.เราสามารถลงทะเบยนไวทละหลายๆลงกได.ตอมาเราตองมาสราง route เพอรบคารองขอของ Iron.io โดยชอ routeจะเปน queue/receive และสงคากลบไปดวยฟงกชน Queue::marshal

Route::post('queue/receive', function(){ return Queue::marshal();});

เมทอด marshal จะดแลการทางานของควให

Page 131 of 187

Page 132: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

RedisRedis เปนโอเพนซอรสฐานขอมลขนาดเลก ทเกบขอมลในรปแบบ คยกบคา หนงคาตองมคยกากบ ประมาณนครบอยากรจกมากกวานตองลองไปเลนท try redis โดยขอมลทอยในนจะม strings, hashes, lists, sets, และ sorted sets.

การปรบแตง

การปรบแตง redis เราทาใน app/config/database.php ในนเราจะเหนอาเรยชอ redis แบบนครบ

'redis' => array(

'cluster' => true,

'default' => array('host' => '127.0.0.1', 'port' => 6379),

),

โดยคาเรมตนเเลว ถกตงใหสนบสนนการพฒนาบนเครอง เราสามารถปรบแตงไดตามใจครบ อาเรยชอ clusterใชเพอบอกให redis ทอยในเครองทาการ client-side sharding ขาม Redis nodes ของคณ, ทาใหเราสามารถสรางram จานวนมากได. แตการทา client-side sharding แตเราไมสามารถจบการ failover ได

การใชงาน

เราสามารถสรางตวแปรทเปนตวแทนของเมทอด Redis::connection โดยการ

$redis = Redis::connection();

เรายงไมไดกาหนดชอ server redis ของเราตองกาหนดกอนนะครบ

$redis = Redis::connection('other');

ถาอยากศกษาตอไปทนครบ Redis commands ในการจดการตางๆ laravel มฟงกชนตางๆ มาใหเเลวครบ: Page 132 of 187

Page 133: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$redis->set('name', 'Taylor');

$name = $redis->get('name');

$values = $redis->lrange('names', 5, 10);

ถาไมตองการใชคาสง laravel กสามารถใชเมทอด command ในการใชคาสงของ redis ตรงๆได

$values = $redis->command('lrange', array(5, 10));

คลาส Redis ทเปนตว static คลาสครบ:

Redis::set('name', 'Taylor');

$name = Redis::get('name');

$values = Redis::lrange('names', 5, 10);

PipeliningPipelining คอการสงคาสงหลายๆ ตวไปยง redis server laravel มเมทอด pipeline มาใหใช

ตวอยาง

Redis::pipeline(function($pipe){ for ($i = 0; $i < 1000; $i++) { $pipe->set("key:$i", $i); }});

Page 133 of 187

Page 134: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Requests & Inputคลาสนใชจดการคารองขอตางๆ เชน คาทสงมาจากฟอรม

Basic Inputรบเฉพาะคาทมชอตรงกบทกาหนด

$name = Input::get('name');

กาหนดคาสารองกรณคาทสงมาเปน null

$name = Input::get('name', 'Sally');

ตรวจวาคาทสงมาเปนคาวางไหม

if (Input::has('name')){ //}

รบคาทงหมดของคารองขอ

$input = Input::all();

รบคาเปนกรณๆ ไป

$input = Input::only('username', 'password');

$input = Input::except('credit_card');

CookiesPage 134 of 187

Page 135: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

การดงคาจาก cookies

$value = Cookie::get('name');

สราง cookie และสงคนไปใหผใชงาน

$response = Response::make('Hello World');

$response->withCookie(Cookie::make('name', 'value', $minutes));

สราง cookie ทไมหมดอาย

$cookie = Cookie::forever('name', 'value');

Old Inputคอการทเราเกบคาทไดจากฟอรมไว เพอทาการใสในฟอรมถดไป หรอนาไปแสดงหลงจากหนาโหลดเสรจ

การนาคาในฟอรมเกบใส session

Input::flash();

การรบคาเฉพาะกรณ

Input::flashOnly('username', 'email');

Input::flashExcept('password');

เราทาการสงคาในฟอรมเกาทเกบไวขนไปในฟอรม

return Redirect::to('form')->withInput();

return Redirect::to('form')->withInput(Input::except('password'));

การดงคาจากในฟอรมเกา Page 135 of 187

Page 136: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Input::old('username');

Filesรบคาจากการอพโหลดไฟล

$file = Input::file('photo');

ตรวจวาไฟลถกอพโหลดไหม

if (Input::hasFile('photo')){ //}

คาทถกคนมาจะเปนเมทอด file method ซงมาจากคลาส Symfony\Component\HttpFoundation\File\UploadedFileซงสบทอดมาจากคลาส SplFileInfo ซงเตรยมเมทอดไวใหเราจดการไฟลไวเยอะเลยครบ

เปลยนทอยใหไฟลทอพขนมา

Input::file('photo')->move($destinationPath);

Input::file('photo')->move($destinationPath, $fileName);

ดงคาเสนทางทอยของไฟล

$path = Input::file('photo')->getRealPath();

ดงชอเรมตนของไฟล

$name = Input::file('photo')->getClientOriginalName();

ดงคาขนาดของไฟล Page 136 of 187

Page 137: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$size = Input::file('photo')->getSize();

ดงนามสกลของไฟล

$mime = Input::file('photo')->getMimeType();

Request Informationคลาส Requestของ laravel สบทอดมาจากคลาส Symfony\Component\HttpFoundation\Request ตอไปนคอฟงกชนสาคญครบ

ดงคา URI จากการเรยกครงลาสด

$uri = Request::path();

ตรวจสอบวาคารองขอทสงเขามาตรงกบกฏทเราตงไวไหม

if (Request::is('admin/*')){ //}

ดงคา url ของคารองขอ

$url = Request::url();

ดงคา URI เฉพาะสวน

$segment = Request::segment(1); // http::/taqmaninw.com/admin/post/id?=3// $sengment ����

����� admin

**ดงคา header **

$value = Request::header('Content-Type');Page 137 of 187

Page 138: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ดงคาจากตวแปร $_SERVER

$value = Request::server('PATH_INFO');

ตรวจวาคาขอเปน ajax ไหม

if (Request::ajax()){ //}

ตรวจวาคาขอมาจาก https ไหม

if (Request::secure()){ //}

Page 138 of 187

Page 139: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Views & Responsesบทนจะมาพดถงคลาส views กบ Response นะครบ

Basic Responsesการสงคาคนแบบงายๆ

Route::get('/', function(){ return 'Hello World';});

สรางการสงกลบเอง

คลาส Response สบทอดมาจากคลาส Symfony\Component\HttpFoundation\Responseเราจะมาดเฉพาะเมทอดทสาคญกนนะครบ

ตวอยางการสรางคาตอบกลบนะครบ

$response = Response::make($contents, $statusCode);

$response->header('Content-Type', $value);

return $response;

เพม cookie ลงไปในคาตอบกลบ

$cookie = Cookie::make('name', 'value');

return Response::make($content)->withCookie($cookie);

Redirects การสงกลบ Page 139 of 187

Page 140: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

สงกลบไปท route

return Redirect::to('user/login');

สงกลบไปพรอมกบ ขอความ

return Redirect::to('user/login')->with('message', 'Login Failed');

สงกลบไปท route ทมชอยอตามตวอยาง

return Redirect::route('login');

สงกลบไปท route ทมชอยอตามตวอยางพรอมกบคา

return Redirect::route('profile', array(1));

สงกลบไปท route ทมชอยอตามตวอยางพรอมกบตวแปร

return Redirect::route('profile', array('user' => 1));

**สงกลบไปทฟงกชนใน controller **

return Redirect::action('HomeController@index');

สงกลบไปทฟงกชนใน controller พรอมกบพารามเตอร

return Redirect::action('UserController@profile', array(1));

สงกลบไปทฟงกชนใน controller พรอมกบตวแปร

return Redirect::action('UserController@profile', array('user' => 1));

Views Page 140 of 187

Page 141: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Views คอสวนทใชเกบไฟลทใชสรางหนา html นะครบจะถกเกบไวทโฟลเดอร app/views ตวอยาง view

<!-- View stored in app/views/greeting.php -->

<html> <body> <h1>Hello, <?php echo $name; ?></h1> </body></html>

การใชงาน view เบองตนครบ

Route::get('/', function(){ return View::make('greeting', array('name' => 'Taylor'));});

สงคาไปท view ครบ

$view = View::make('greeting', $data);

$view = View::make('greeting')->with('name', 'Steve');

ในตวอยางตวแปร $nameจะถกใชงานบน View ได

You may also share a piece of data across all views:

View::share('name', 'Steve');

การสง view แทรกเขาไปในอก view หนงครบ

เราสรางโฟลเดอรขนมาเกบ view ทเราจะทาเปน view ยอยกอนตวอยาง app/views/child/view.php ตวอยางการใชงาน

$view = View::make('greeting')->nest('child', 'child.view');

$view = View::make('greeting')->nest('child', 'child.view', $data);Page 141 of 187

Page 142: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ผลทออกมาครบ

<html> <body> <h1>Hello!</h1> <?php echo $child; ?> </body></html>

View ComposersView composers คอเมทอดทชวยเราในการจดการคาทเราตองแสดง ในทกหนาของ view ลดการเขยนโคดซ าซอน

ตวอยางการใชงาน

View::composer('profile', function($view){ $view->with('count', User::count());});

ตอนนทกครงท profile view ถกสราง count จะถกสงขนไปดวย

เราสามารถสงขนไปทละหลายๆ view ได

View::composer(array('profile','dashboard'), function($view){ $view->with('count', User::count());});

ถาเราตองการทาใหเปนคลาสเพองายตอการจดกลม เราตองทาแบบนครบ

View::composer('profile', 'ProfileComposer');

สรางคลาสขนมา

class ProfileComposer { Page 142 of 187

Page 143: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

public function compose($view) { $view->with('count', User::count()); }

}

แลวอยาลมเพมเขาไปทไฟล composer.json

การสงกลบแบบพเศษ

สรางการสงกลบในรปแบบของ json

return Response::json(array('name' => 'Steve', 'state' => 'CA'));

สรางการสงกลบในรปแบบของ jsonp

return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));

สรางการสงกลบในรปแบบของการดาวนโหลดไฟล

return Response::download($pathToFile);

return Response::download($pathToFile, $name, $headers);

Page 143 of 187

Page 144: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Routingใชในการกาหนดวาเมอเราเรยกลงนจะใหทาอะไรขนบาง

Basic Routingในการตงคาเราจะไปท app/routes.php โดยรปแบบของฟงกชนทเปน Route จะเปนแบบ Closure callback Closureคออะไรตามไปตามเขาไปอาน ทนครบ

การรบคาทเปน get

Route::get('/', function(){ return 'Hello World';});

การรบคาทเปน POST

Route::post('foo/bar', function(){ return 'Hello World';});

กาหนด route ในการเรยกพารามเตอร foo ในทกรปแบบเมทอด

Route::any('foo', function(){ return 'Hello World';});

ลงทเรยกมาตองเปน https เทานน

Route::get('foo', array('https', function(){ Page 144 of 187

Page 145: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

return 'Must be over HTTPS';}));

Route Parametersตวอยางการกาหนดรปแบบของพารามเตอร

Route::get('user/{id}', function($id){ return 'User '.$id;});

พารามเตอรแบบมหรอไมมกได

Route::get('user/{name?}', function($name = null){ return $name;});

กาหนดพารามเตอรแบบตายตว

Route::get('user/{name?}', function($name = 'John'){ return $name;});

การใช regex ตรวจสอบวาพารามเตอรตรงกบทกาหนดไวไหม

Route::get('user/{name}', function($name){ //})->where('name', '[A-Za-z]+');

Route::get('user/{id}', function($id){ //}) Page 145 of 187

Page 146: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

->where('id', '[0-9]+');

จะใสไปเปนอาเรยกได

Route::get('user/{id}/{name}', function($id, $name){ //})->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))

Route Filtersคอการกาหนดฟงกชนทใชในการตรวจสอบขอมล auth ใชตรวจวามการลอกอนไหม, guest ตรวจวายงไมไดลอกอน, และcsrfตรวจวาเปนการทา csrf ไหม.ซงเราจะไปประกาศไวท app/filters.php

ตวอยางการสราง filter

Route::filter('old', function(){ if (Input::get('age') < 200) { return Redirect::to('home'); }});

การใส filter ให route

Route::get('user', array('before' => 'old', function(){ return 'You are over 200 years old!';}));

การใส route หลายตว

Route::get('user', array('before' => 'auth|old', function(){ return 'You are authenticated and over 200 years old!';

Page 146 of 187

Page 147: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

}));

การกาหนดคาเฉพาะให filter

Route::filter('age', function($route, $request, $value){ //});

Route::get('user', array('before' => 'age:200', function(){ return 'Hello World';}));

filter บางตวเราสงใหทางานหลงจากท route ทางานไปแลวเราตองกาหนดตวแปร $responseเพอกาหนดคาทจะสงไปใหตวฟงกชนดวย

Route::filter('log', function($route, $request, $response, $value){ //});

Pattern Based Filters

เราสามารถกาหนด filter ใหทางานเฉพาะเมอมการเรยกตรงกบทเรากาหนดได ตามตวอยางเลยครบ.

Route::filter('admin', function(){ //});

Route::when('admin/*', 'admin');

ตามตวอยางเราเพม filter ชอ admin เขากบทกลงทม admin/ อยขางใน

แลวกยงสามารถกาหนดเมทอดใหไดดวยPage 147 of 187

Page 148: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Route::when('admin/*', 'admin', array('post'));

Filter Classes

ในการกรองขนสงเราสามารถสรางคลาสขนมาไดเอง แลวทาการใช IoC Container เรยกใชคลาสนน

ตวอยางคลาส

class FooFilter {

public function filter() { // Filter logic... }

}

ลงทะเบยนคลาสโดยใหชอทจะนาไปใชวา foo

Route::filter('foo', 'FooFilter');

Named Routesคอการตงชอยอใหกบ route:

Route::get('user/profile', array('as' => 'profile', function(){ //}));

กาหนดใหชอยอนจะใช controller ไหน

Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));

ตอนนเราใชชอยอ เพอสรางลงไดเเลวPage 148 of 187

Page 149: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$url = URL::route('profile');

$redirect = Redirect::route('profile');

เราใชเมทอดcurrentRouteName เพอดงชอของ Route ททางานในขณะนได

$name = Route::currentRouteName();

Route Groupsเราสามารถกาหนดกลมให Route ไดทาใหสะดวกมากขน

Route::group(array('before' => 'auth'), function(){ Route::get('/', function() { // Has Auth Filter });

Route::get('user/profile', function() { // Has Auth Filter });});

Sub-Domain Routingการสราง Route ใหกบโดนเมนยอย

Route::group(array('domain' => '{account}.myapp.com'), function(){

Route::get('user/{id}', function($account, $id) { // });

}); Page 149 of 187

Page 150: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Route Prefixingในการกาหนดคาทใชกาหนดกลมของ เราใช prefix ในการตรวจสอบ

ตวอยางการใช prefix

Route::group(array('prefix' => 'admin'), function(){

Route::get('user', function() { // });

});

Route Model Bindingคอการผกโมเดลเขาไปกบ Route โดยใชเมทอด Route::model

การใชงาน

Route::model('user', 'User');

ตอมากกาหนดใหเมอมการเรยกลงทม {user}เปนพารามเตอร

Route::get('profile/{user}', function(User $user){ //});

เรากจะทาการแทรก User instance เขาไปใน Route ยกตวอยาง profile/1 ถกเรยก User instance กจะม ID = 1.

ถาพารามเตอรทสงเขามาไมตรงกบ model ใดๆเราสามารถกาหนดการแสดงขอผดพลาดาได Page 150 of 187

Page 151: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Route::model('user', 'User', function(){ throw new NotFoundException;});

ตอมา เมทอด Route::bind เปนการผกพารามเตอรเขากบ โมเดล เมอมการสงคาเขาตรงกบ routeทกาหนดคากจะกจะถกสงมาทเมทอดนกอน

Route::bind('user', function($value, $route){ return User::where('name', $value)->first();});

Page 151 of 187

Page 152: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Schema Builderคลาส Schemaใชในการจดการตาราง มกใชรวมกบคาสง migration

สรางและลบตาราง

สรางตารางใหมดวยเมทอด Schema::create ตามตวอยางเลยครบ

Schema::create('users', function($table){ $table->increments('id');});

เมทอดตวแรกคอชอตาราง พารามเตอรทสองคอ Closure ทจะรบออปเจคของคลาส Blueprint ในการสรางตาราง

จะเปลยนชอตารางใชเมทอดrename

Schema::rename($from, $to);

ในการเลอกการเชอมตอกรณเรามหลายฐานขอมลใชเมทอด Schema::connection

Schema::connection('foo')->create('users', function($table){ $table->increments('id'):});

จะลบตารางใชเมทอด Schema::drop

Schema::drop('users');

Schema::dropIfExists('users');

เพมคอลมน Page 152 of 187

Page 153: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ในการแกไขตารางเราใชคาสง Schema::table

Schema::table('users', function($table){ $table->string('email');});

ตารางคาสงตางของคลาส Blueprint ครบ

Command Description

$table->increments('id'); ใชทา auto_increment ให (primary key).

$table->string('email'); คาทออกมาจะเปน VARCHAR ความยาว 255

$table->string('name', 100); คาทออกมาจะเปน VARCHAR ความยาว 100

$table->integer('votes'); คาทออกมาจะเปน interger

$table->bigInteger('votes'); คาทออกมาจะเปน bigint

$table->smallInteger('votes'); คาทออกมาจะเปนSMALLINT

$table->float('amount'); คาทออกมาจะเปน FLOAT

$table->decimal('amount', 5, 2); คาทออกมาจะเปน decimal ทมคาระหวาง 5,2

$table->boolean('confirmed'); คาทออกมาจะเปน BOOLEAN

$table->date('created_at'); คาทออกมาจะเปน DATE

$table->dateTime('created_at'); คาทออกมาจะเปนDATETIME

$table->time('sunrise'); คาทออกมาจะเปน TIME Page 153 of 187

Page 154: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

$table->timestamp('added_on'); คาทออกมาจะเปน TIMESTAMP

$table->timestamps(); เพมคอลมน created_at และ updated_at columns

$table->softDeletes(); เพมคอลมน deleted_at

$table->text('description'); คาทออกมาจะเปน TEXT

$table->binary('data'); คาทออกมาจะเปน BLOB

$table->enum('choices', array('foo', 'bar')); คาทออกมาจะเปน ENUM

->nullable() อนญาตใหเปนคาวางได

->default($value) สรางคาเรมตน

->unsigned() เลยน INTEGER เปน UNSIGNED

ถาเราใช MySQL dสามารถใชเมทอด after ทาการเรยงลาดบคอลมน

ตวอยาง

$table->string('name')->after('email');

เปลยนชอ Columnsใชเมทอด renameColumn ครบ

ตวอยาง

Schema::table('users', function($table){ $table->renameColumn('from', 'to'); Page 154 of 187

Page 155: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

});

หมายเหต: คอลมนชนด enum ไมสนบสนน

ลบ Columnsตวอยาง

Schema::table('users', function($table){ $table->dropColumn('votes');});

ลบหลายๆ คอลมน

Schema::table('users', function($table){ $table->dropColumn('votes', 'avatar', 'location');});

ตรวจวาตารางมอยไหม

ตรวจวาตารางมอยไหม

if (Schema::hasTable('users')){ //}

ตรวจวาคอลมนมอยไหม

if (Schema::hasColumn('users', 'email')){ //}

Page 155 of 187

Page 156: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เพม Indexesสรางทง Column และ Index

$table->string('email')->unique();

Command Description

$table->primary('id'); เพม primary key

$table->primary(array('first', 'last')); เพม composite keys

$table->unique('email'); เพม unique index

$table->index('state'); เพม basic index

Foreign Keys คยเชอมตวอยางการเพมคยเชอม

$table->foreign('user_id')->references('id')->on('users');

ในตวอยางเราทาการใหคอลมน user_idอางองกบคอลมน id บนตารางusers

เราสามารถเสรมคาสง "on delete" และ "on update" เขาไปเหมอนตวอยาง

$table->foreign('user_id') ->references('id')->on('users') ->onDelete('cascade');

ในการลบใชเมทอด dropForeign ตวอยาง

$table->dropForeign('posts_user_id_foreign'); Page 156 of 187

Page 157: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

หมายเหต: ใหชนดของคอลมนทเปนคยเชอมใหเปน unsigned ทกครงกรณทเชอมไปยง คอลมนทเปน intergerและเปน auto_increment ครบ

ลบ Indexesในการลบคยเชอม larave ตงคาคยเปนคาเรมตนใหเเลวนะครบ โดยอางองจากชนดกบชอของตารง

Command Description

$table->dropPrimary('users_id_primary'); ลบคยหลกจากตาราง users

$table->dropUnique('users_email_unique'); ลบคยเดยวจากตาราง users

$table->dropIndex('geo_state_index'); ลบคยทวไปจาก ตาราง geo

ชนดของตาราง

การเซตชนดของตารางเราใชเมทอด engine ตามตวอยางครบ

Schema::create('users', function($table){ $table->engine = 'InnoDB';

$table->string('email');});

Page 157 of 187

Page 158: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Securityคลาสนใชในการสรางระบบรกษาความปลอดภยตางอยางเชน การเขารหสเพอใชใน password,session,cookie

การเกบรหสผาน

Class Hash ของ laravel ใชสวนขยาย Bcrypt ของ php มาพฒนาตอยอด

การสรางคา hash

$password = Hash::make('secret');

การตรวจสอบคา hash

if (Hash::check('secret', $hashedPassword)){ // The passwords match...}

ตรวจวา password ตองการเขารหสอกครง กรณลมรหสผาน

if (Hash::needsRehash($hashed)){ $hashed = Hash::make('secret');}

การยนยนตวบคคล

การลอกอน laravel เตรยมเมทอด Auth::attempt มาใหตวอยางการใชงาน

if (Auth::attempt(array('email' => $email, 'password' => $password))){ return Redirect::intended('dashboard');} Page 158 of 187

Page 159: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

คา email เราสามารถเปลยนไปตามใจเราไดครบ สวนเมทอด Redirect::intendedใชสงผใชงานกลบไปทลงทเขาเรยกมาครบ

เมอเมทอด attempt ถกเรยก event auth.attempt จะถกเรยกและ event auth.login จะถกเรยกเมอการเขาสระบบสาเรจ

ตรวจสอบวามการลอกอนคางอยไหม

if (Auth::check()){ // The user is logged in...}

ตวอยางการปรบปรงเมทอด attempt ใหสามารถทาการจาชอผใชกบรหสผานได

if (Auth::attempt(array('email' => $email, 'password' => $password), true)){ // The user is being remembered...}

กากาหนดเงอนไขตอนลอกอน

if (Auth::attempt(array('email' => $email, 'password' => $password, 'active' => 1))){ // �

�� active ��

�� 1 �����

������������������

}

การเขาถงเขอมลคนทลอกอน

$email = Auth::user()->email;

ใชเมทอด loginUsingId เพอดง Id ของคนทลอกอนมา

Auth::loginUsingId(1);

สมมตวาเรากาหนดวาการเปลยนแปลงเลขบตรเครดตตองใชรหสผานยนยนเพมเตม เมทอด validate Page 159 of 187

Page 160: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

สามารถทางานนใหเราได

การใชงานการยนยนตวตนโดยไมไดเขาสระบบ

if (Auth::validate($credentials)){ //}

การลอกอนแบบไมม session หรอ cookies

if (Auth::once($credentials)){ //}

เมทอดทใชลอกเอาท

Auth::logout();

การจาลองการลอกอน

การลอกอนแบบ ทเราจาลองขนมาเองครบ เมทอดlogin ใชคาจากฐานขอมลมาลอกอนไดทนทเลย

$user = User::find(1);

Auth::login($user);

การปองกน CSRF

ทาการแนบคา token เขากบฟอรม

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

ตรวจสอบคา token ทถกสงมา Page 160 of 187

Page 161: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Route::post('register', array('before' => 'csrf', function(){ return 'You gave a valid CSRF token!';}));

HTTP Basic Authenticationlaravel เตรยม filter ชอ auth.basic เพอตรวจวา มการลอกอนไหม

ตวอยาง

Route::get('profile', array('before' => 'auth.basic', function(){ // Only authenticated users may enter...}));

โดยคาเรมตนเเลวเมทอด basic ใชคอลมน email ในการตรวจสอบ ถาเราจะเปลยนกใช

return Auth::basic('username');

laravel เตรยมฟงกชน Oncebasic มาเพอการลอกอนแบบไมสราง session ไวเหมาะกบการให ผใชงานใชในกรณไปลอกอนเครองทไมใชของตวเอง

ตวอยาง

Route::filter('basic.once', function(){ return Auth::onceBasic();});

การจดการการลมรหสผาน

การลมรหสผานและการสรางใหม

Page 161 of 187

Page 162: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

สงรหสผานใหม

laravel เตรยมการมาใหเราสามารถสรางระบบการสและเปลยนรหสผาน ใหเราโดยการให User model ทาการสบทอดIlluminate\Auth\Reminders\RemindableInterface.

การใชงาน RemindableInterface

class User extends Eloquent implements RemindableInterface {

public function getReminderEmail() { return $this->email; }

}

ตอมาเรากตองสรางตารางใหระบบลมรหสผานกอนโดย php artisan auth:reminders

สรางตว migration ของตารางลมรหส

php artisan auth:reminders

php artisan migrate

การสงรหสใชเมทอด Password::remind

ตวอยางการใชงาน

Route::post('password/remind', function(){ $credentials = array('email' => Input::get('email'));

return Password::remind($credentials);});

หมายเหต: เราตองสราง view ทชอ auth.reminder.emailเพอรบ email เองนะครบPage 162 of 187

Page 163: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เราสามารถสงขอความเพมเตมใหผใชโดยสงพารามเตอรไป $message ไปในฟงกชน remind

return Password::remind($credentials, function($message, $user){ $message->subject('Your Password Reminder');});

โดยคาเรมตนเเลวเมทอด remind จะสงกลบมาทหนาทเรยกใช ถาเกดขอผดพลาดขน ตวแปร errorจะมคาขนใน sessionสวนเมอสาเรจตวแปร success กจะปรากฏขนมาใน session แทน หนาตาของหนา auth.reminder.email ควรเปนแบบนครบ

@if (Session::has('error')) {{ trans(Session::get('reason')) }}@elseif (Session::has('success')) An e-mail with the password reset has been sent.@endif

<input type="text" name="email"><input type="submit" value="Send Reminder">

การรเซตรหสผาน

การสราง route เพอรบการทผใชงานกดลงทาการรเซตรหสผาน

Route::get('password/reset/{token}', function($token){ return View::make('auth.reset')->with('token', $token);});

หนา view ททาการใหผใชงานทาการเปลยนรหสผาน

@if (Session::has('error')) {{ trans(Session::get('reason')) }}@endif

<input type="hidden" name="token" value="{{ $token }}"><input type="text" name="email"><input type="password" name="password"><input type="password" name="password_confirmation"> Page 163 of 187

Page 164: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการสราง route เพอทาการรบคารหสผานใหม

Route::post('password/reset/{token}', function(){ $credentials = array('email' => Input::get('email'));

return Password::reset($credentials, function($user, $password) { $user->password = Hash::make($password);

$user->save();

return Redirect::to('home'); });});

ถาการเปลยนรหสผานสาเรจ User instance และรหสผานใหมจะถกเกบลงฐานขอมลและ สงกลบไปหนา home

EncryptionLaravel เตรยมการเขารหสแบบ AES-256 โดยสวนเสรม mcrypt ของ PHP มาใหเเลว

กาเขารหส

$encrypted = Crypt::encrypt('secret');

Note: มนใจวาเราเปลยนคา key ตรงท app/config/app.php ไมงนการเขารหสจะไมคอยปลอดภยครบ

การถอดรหส

$decrypted = Crypt::decrypt($encryptedValue);

การกาหนดรปแบบตางๆ

Crypt::setMode('ctr'); Page 164 of 187

Page 165: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Crypt::setCipher($cipher);

Page 165 of 187

Page 166: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Session

การตงคาเบองตน

ไฟลทใชตงคาจะอยท app/config/session.php.โดยชนดของ session จะมหลายชนดนะครบแตโดยเรมตนแลวจะเปนnative สวนการตงคาอนๆ กจะเปนเวลาทจะให seesion มชวตอย ทอยของ seesion ชอของ cookie และอนๆ ครบ

การใชงาน

การสรางคาแลวเกบใน session

Session::put('key', 'value');

ดงคาจาก Session

$value = Session::get('key');

ดงคาเรมตนของ session

$value = Session::get('key', 'default');

$value = Session::get('key', function() { return 'default'; });

ตรวจวามคานใน Session หรอไม

if (Session::has('users')){ //}

ลบคาออกจาก Session

Session::forget('key');Page 166 of 187

Page 167: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ลบคาทงหมด Session

Session::flush();

สราง Session ID อกครง

Session::regenerate();

Flash Dataหลายๆครงเราตองฝากคาไวใน session เพอนาไปใชในการทางานตอไป สามารถใชเมทอด Session::flash ตวอยาง

Session::flash('key', 'value');

ทาการเรยกใช falsh message อกครง

Session::reflash();

ทาการเรยกใชงานอกครงเฉพาะคา

Session::keep(array('username', 'email'));

การเกบ session ในฐานขอมลเมอเราใชฐานขอมลเกบ session เราตองสรางตารางขนมากอน ดวยคาสงSchema ดงตวอยาง

Schema::create('sessions', function($table){ $table->string('id')->unique(); $table->text('payload'); $table->integer('last_activity');});

Page 167 of 187

Page 168: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตอนนเรากใชคาสง php artisab session:table เปนอนจบครบ

Page 168 of 187

Page 169: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Templates

Controller Layoutsเราใชตวแปร layout เพอกาหนดเลเอาทหลกใหกบ controller ครบ

ตวอยางการใชงาน

class UserController extends BaseController {

/** * The layout that should be used for responses. */ protected $layout = 'layouts.master';

/** * �

��������������

�������

�����

*/ public function showProfile() { $this->layout->content = View::make('user.profile'); }

}

Blade TemplatingBlade template คอคลาสทใชในการเขยน html ขนมาดวย php ทาใหเราสามารถสราง html ทมโครงสรางซบซอนได การจะใชนนตองตงชอไฟลเปน ��

�� view.blade.php

ตวอยางทยงใช html อย

<!-- Stored in app/views/layouts/master.blade.php -->

<html> Page 169 of 187

Page 170: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

<body> @section('sidebar') This is the master sidebar. @show

<div class="container"> @yield('content') </div> </body></html>

ใช blade ในการสรางเลเอาททงหมด

@extends('layouts.master')

@section('sidebar') @parent

<p>This is appended to the master sidebar.</p>@stop

@section('content') <p>This is my body content.</p>@stop

extend ใชในการดงคาจากเลเอาทอนมาใช @parent ทาใหเราสามารถใช view อนแทรกเขามาได @sectionกใชงานโดยการแทรก html จากไฟลอนเขาไป

การใชงานฟงกชน php ใน bladeการแสดงขอมล การแทรกขอมล

Hello, {{ $name }}.

The current UNIX timestamp is {{ time() }}.

ทนเรากใช syntax แบบสนๆ ในการแสดงผลจาก server ไดเเลวPage 170 of 187

Page 171: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Hello, {{{ $name }}}.

การใช if

@if (count($records) === 1) I have one record!@elseif (count($records) > 1) I have multiple records!@else I don't have any records!@endif

@unless (Auth::check()) You are not signed in.@endunless

การใช Loops

@for ($i = 0; $i < 10; $i++) The current value is {{ $i }}@endfor

@foreach ($users as $user) <p>This is user {{ $user->id }}</p>@endforeach

@while (true) <p>I'm looping forever.</p>@endwhile

การแทรก Views

@include('view.name')

การแสดงภาษา

@lang('language.line')Page 171 of 187

Page 172: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

@choice('language.line', 1);

การทาคอมเมน

{{-- This comment will not be in the rendered HTML --}}

Page 172 of 187

Page 173: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Unit TestingLaravel สรางขนมาดวยแนวคดของการทดสอบเปนเบองตนอยเเลวครบ โดยหลกแลวจะสนบสนนไลบราล PHPUnitเปนพนฐาน และ phpunit.xmlไฟลไดถกเตรยมการเอาไวใหแลว. Laravel เตรยมคลาส Symfony HttpKernel,DomCrawler, และ BrowserKit components ทอนญาตใหเราจาลองบราวเซอรขนมาเเละเขาไปแกไขไฟล html ได ตวอยางไฟลอยทโฟลเดอร app/tests

Defining & Running Testsการสรางไฟลสาหรบทดสอบนนเราจะไปสรางทโฟลเดอร app/tests สรางคลาสทสบทอดคลาส TestCase.

ตวอยางคลาสสาหรบใชทดสอบ

class FooTest extends TestCase {

public function testSomethingIsTrue() { $this->assertTrue(true); }

}

เราจะทาการทดสอบโดยรน phpunit บน commandline

หมายเหต: ถาคณประกาศเมทอด setUp มนใจวาไดเรยก parent::setUpแลว

สภาวะการตงคาสาหรบการทดสอบ

เมอใชงาน unit tests, Laravel จะทาการเปลยนการสภาวะการตงคาใหไปเปน testing. และจะตดการทางานของ sessionและ cache หมายความวาจะไมมแคชและ session เกดขนระหวางการทดสอบ

การเรยก Routes ในขณะทดสอบ Page 173 of 187

Page 174: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตวอยางการเรยก Route ในขณะทากาารทดสอบ

$response = $this->call('GET', 'user/profile');

$response = $this->call($method, $uri, $parameters, $files, $server, $content);

เราสามารถตรวจสอบออปเจค Illuminate\Http\Response

$this->assertEquals('Hello World', $response->getContent());

ตวอยางการเรยก Controller ในขณะทดสอบ

$response = $this->action('GET', 'HomeController@index');

$response = $this->action('GET', 'UserController@profile', array('user' => 1));

เมทอด getContent จะสงคาเปนตวอกษรกลบคนมา View เราสามารถเขาถงไดดวยตวแปร original

$view = $response->original;

$this->assertEquals('John', $view['name']);

ถาจะเรยก HTTPS route,เราตองใชเมทอดcallSecure

$response = $this->callSecure('GET', 'foo/bar');

DOM Crawler

คลาส DOM Crawler ทาใหเราสามารถตรวจสอบ html ทถกสรางขนมาระหวางการทดสอบได ตวอยางการใช

$crawler = $this->client->request('GET', '/');

$this->assertTrue($this->client->getResponse()->isOk());

$this->assertCount(1, $crawler->filter('h1:contains("Hello World!")')); Page 174 of 187

Page 175: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Mocking Facadesเมอเราทาการทดสอบ,เราจะทาการจาลองในการเรกคลาส Facade ตวอยางเราจะทาการเรยก controller

public function getIndex(){ Event::fire('foo', array('name' => 'Dayle'));

return 'All done!';}

เราสามารถจาลองคลาสEventโดยใชเมทอด shouldReceive

การจาลองคลาส Facade

public function testGetIndex(){ Event::shouldReceive('fire')->once()->with(array('name' => 'Dayle'));

$this->call('GET', '/');}

หมายเหต: คณไมควรจาลองคลาส Facade Request ใชเมทอด call ดกวาครบ

Framework Assertionsเมทอด assert ใชในการตรวจสอบวาคาทออกมาตรงกบทเราคาดหวงไวไหม

คาดหวงวาคาทสงมาจะไมผดพลาด

public function testMethod(){ $this->call('GET', '/');

$this->assertResponseOk();} Page 175 of 187

Page 176: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

คาดหวงวาจะเปน 403

$this->assertResponseStatus(403);

คาดหวงวาฟงกชนจะสงกลบไปท route

$this->assertRedirectedTo('foo');

$this->assertRedirectedToRoute('route.name');

$this->assertRedirectedToAction('Controller@method');

คาดหวงวาในหนา view จะมคา

public function testMethod(){ $this->call('GET', '/');

$this->assertViewHas('name'); $this->assertViewHas('age', $value);}

คาดหวงวาใน session จะมคา

public function testMethod(){ $this->call('GET', '/');

$this->assertSessionHas('name'); $this->assertSessionHas('age', $value);}

Helper Methodsคลาส TestCase มเมทอดชวยใหเราทาการทดสอบไดงายๆ เยอะเลยครบ.

Page 176 of 187

Page 177: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมทอด beใชในการจาลองการลอกอน

ตวอยาง

$user = new User(array('name' => 'John'));

$this->be($user);

ทาการเพมขอมลลงฐานขอมลในขณะทดสอบ

$this->seed();

$this->seed($connection);

Page 177 of 187

Page 178: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Validationคอการตรวจสอบคาตางๆ ทปอนเขามา หรอระหวางการทางานของฟงกชนตางๆ โดยจะแสดงขอผดพลาดใหเราดวยโดยคลาสททาหนาทนนชอ Validator ครบ

การใชงานเบองตน

การใชงานคลาส validator

$validator = Validator::make( array('name' => 'Dayle'), array('name' => 'required|min:5'));

อาเรยตวแรกคอขอมลทเราจะทาการตรวจนนเอง ตวทสองคอรปแบบทเราตองการ การใชเครองหมาย |การตรวจสอบออกเปนหลายๆ แบบ

ใชอาเรยในการกาหนดกฏ

$validator = Validator::make( array('name' => 'Dayle'), array('name' => array('required', 'min:5')));

คลาส Validator จะสรางเมทอด ชอ fails (หรอ passes) เพอตรวจสอบผล

if ($validator->fails()){ // The given data did not pass validation}

ถาไมผานเราสามารถดงขอความแสดงขอผดพลาดได.

$messages = $validator->messages();Page 178 of 187

Page 179: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมทอด failed ใชในการเขาถงกฏทเราตงไว

$failed = $validator->failed();

การจดการขอความแสดงขอผดพลาด

เมอเรยกเมทอด messages บนตว Validator instance,เราจะไดรบ MessageBag instance ทจะมเมทอดใหเราจดการขอความ

แสดงขอความแสดงขอผดพลาดเฉพาะตวแรก

echo $messages->first('email');

รบขอความแสดงขอผดพลาดทงหมด

foreach ($messages->get('email') as $message){ //}

รบขอความแสดงขอผดพลาดจากทคอลมน

foreach ($messages->all() as $message){ //}

ตรวจวามขอความแสดงขอผดพลาดจากคอลมน eamil ไหม

if ($messages->has('email')){ //}

รบขอความแสดงขอผดพลาดโดยใสรปแบบใหดวย Page 179 of 187

Page 180: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

echo $messages->first('email', '<p>:message</p>');

หมายเหต: โดยเรมตน, รปแบบขอความจะถกจดในรปแบบทนาไปใชงานรวมกบ twiiter bootstrap ได.

รบขอความแสดงขอผดพลาดทงหมดพรอมใสรปแบบ

foreach ($messages->all('<li>:message</li>') as $message){ //}

การแสดงขอความแสดงขอผดพลาดบน viewตวอยางนเราจะสงขอความแสดงขอผดพลาด ไปให view

Route::get('register', function(){ return View::make('user.register');});

Route::post('register', function(){ $rules = array(...);

$validator = Validator::make(Input::all(), $rules);

if ($validator->fails()) { return Redirect::to('register')->withErrors($validator); }});

ถาการตรวจสอบไมผานเราจะใชเมทอด withErrors สงขอความแสดงขอผดพลาด ขนไปบน View ดวย

ไมควรสงขอความแสดงขอผดพลาด ไปบน Route ทเปน method GET เพราะ laravelจะตรวจสอบขอผดพลาดบน session ทกคารองขอ

Page 180 of 187

Page 181: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

เมอทาการรไดเรคเราสามารถเขาถงขอความแสดงขอผดพลาด โดยใชตวแปร$errors ดงตวอยางครบ

<?php echo $errors->first('email'); ?>

กฏในการตรวจสอบท laravel เตรยมไว

accepted

คาทจะผานคอ yes, on, or 1.เหมาะสาหรบใชในการตรวจสอบวายอมรบ "Terms of Service" ไหม

active_url

ตรวจสอบวาลงตายยง โดยใช checkdnsrr ซงเปน PHP function.

after:_date_

ตรวจสอบวาคาทสงมาเปนมรปแบบของเวลาหลกจากใช strtotime อยหลงสดแปลงไหม

alpha

ตรวจสอบวาคาทสงมาเปนรปแบบของตวอกษรตางๆ ไหม

alpha_dash

ตรวจสอบวาคาทสงมาเปนรปแบบของตวเลขทมเครองหมาย _ รวมอยดวยไหม

alpha_num

ตรวจสอบวาคาทสงมาเปนรปแบบของตวเลขไหม

before:_date_

ตรวจสอบวาคาทสงมาเปนมรปแบบของเวลาหลกจากใช strtotime อยหนาสดไหม

between:_min,_maxPage 181 of 187

Page 182: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตรวจสอบวาคาทสงมาเปนมคาอยระหวาง min กบ max ไหม

confirmed

ตรวจสอบวาคาทสงมาเปนมรปแบบของฟอรมทมรปแบบ ชอ_confirmation ยกตวอยางการ ตรวจสอบpassword,วาตรงกบpassword_confirmation ไหม

date

ตรวจสอบวาคาทสงมาเปนมรปแบบของเวลาหลกจากใช strtotime ไหม.

date_format:_format_

ตรวจสอบวาคาทสงมาเปนมรปแบบของเวลาทกาหนดไหม

different:_field_

คาตรง field ตองมคาตางจากคาทปอนเขามาถงจะผาน

email

ตรวจสอบวาคาทสงมาเปนมรปแบบของ email

exists:_table,_column

ฟอรมทอยในการตรวจสอบตองมชอตรงกบคอลมนในฐานขอมล

การใชงานเบองตน

'state' => 'exists:states'

การใชงานโดยใสคาทตองการตรวจไปหลายคา

'state' => 'exists:states,abbreviation'

เราสามารถกาหนดเงอนไขใหกฏคลายๆการทาควร ครบ Page 182 of 187

Page 183: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

'email' => 'exists:staff,email,account_id,1'

image

ตรวจสอบวาคาทสงมาเปนรปภาพมนามสกล(jpeg, png, bmp, or gif) ไหม

in:_foo,_bar,...

ตรวจสอบวาคาทสงมามคาตรงกบคาใน foo,bar ไหม

integer

ตรวจสอบวาคาทสงมามรปแบบของเลขจานวนเตมไหม

ip

ตรวจสอบวาคาทสงมามรปแบบของ IP address.

max:_value_

ตรวจสอบวาคาทสงมามคานอยกวาคาทกาหนดไว

mimes:_foo,_bar,...

ตรวจสอบวาคาทสงมามรปแบบของ mime type ตรงกบทกาหนดไหม

ตวอยางการตรวจสอบนามสกลของไฟล

'photo' => 'mimes:jpeg,bmp,png'

min:_value_

ตรวจสอบวาคาทสงมามจานวนนอยกวาไหมถามนอยกวากไมผาน

not_in:_foo,_bar,... Page 183 of 187

Page 184: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตรวจสอบวาคาทสงมามคาตรงกบคาทตงไวไหม ถามกไมผานครบ

numeric

ตรวจสอบวาคาทสงมาเปนตวเลขไหม

regex:_pattern_

ตรวจสอบวาคาทสงมามรปแบบกบ regular expression ทกาหนดไวไหม

required

ตรวจสอบวาคาทสงมาเปนคาวางไหม ถาเปนกไมผานครบ

required_if:_field,_value

ตรวจวาคาใน field ตองไมวางและ ตรงกบ value

required_with:_foo,_bar,...

ตรวจวาฟล foo ตองมคาหาก bar มคาดวย

required_without:_foo,_bar,...

ตรวจวาฟล foo ตองมคาหาก bar ไมมคา

same:_field_

ตรวจวาคาทสงเขามาซ ากบคาทกาหนดไวไหม

size:_value_

ตรวจวาคาทสงเขามาตรงกบทกาหนดไวไหม กรณเปนคาจะตรวจสอบจานวนคา เปนตวเลขกเทยบตามคาเปไฟลเทยบตามขนาดของไฟลเปนกโลไบต

unique:_table,_column,_except,_idColumn Page 184 of 187

Page 185: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

ตรวจวาคาทสงมาซ ากบในตารางไหม.

ตวอยางการใชตรวจวาอเมลนมในตาราง user ไหม

'email' => 'unique:users'

ตวอยางการใชตรวจวาอเมลนมในตาราง user ตรงคอลมน email-address ไหม

'email' => 'unique:users,email_address'

ตวอยางการใชตรวจวาอเมลนมในตาราง user ตรงคอลมน email-address ไหม โดยไมสนใจ id ทมคาเทากบ 10

'email' => 'unique:users,email_address,10'

url

ตรวจวาคาเปน url ไหม

Custom Error Messagesเราสามารถปรบแตงขอความทแสดงขอผดพลาดได

ตวอยาง

$messages = array( 'required' => 'The :attribute field is required.',);

$validator = Validator::make($input, $rules, $messages);

การใชขอความทเรากาหนดรวมกบ Place-Holders

$messages = array( 'same' => 'The :attribute and :other must match.', 'size' => 'The :attribute must be exactly :size.', Page 185 of 187

Page 186: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

'between' => 'The :attribute must be between :min - :max.', 'in' => 'The :attribute must be one of the following types: :values',);

กาหนดขอความใหแตละคอลมนเลย

$messages = array( 'email.required' => 'We need to know your e-mail address!',);

บางกรณเราตองการกาหนดขอความทแสดงใหเปนเฉพาะแตละภาษาไป ซงเราตองไปเพมทอาเรยชอ custom ในapp/lang/xx/validation.php ตาม ภาษาทไป

ควอยาง

'custom' => array( 'email' => array( 'required' => 'We need to know your e-mail address!', ),),

การสรางตวตรวจสอบ

เราสามารถสรางฟงกชนในการตรวจสอบไดเองโดย laravel เตรยมเมทอด Validator::extend มาเพอการนนครบ

ตวอยาง

Validator::extend('foo', function($attribute, $value, $parameters){ return $value == 'foo';});

ตวอยางขางบนเรารบตวแปรมาสามตวครบ $attribute คอชอขอมลทจะตรวจ $value คาของขอมล $parameters คาอนๆ

You may also pass a class and method to the extend method instead of a Closure:Page 186 of 187

Page 187: คู่มือการใ ช้งาน Laravel 4 ฉบับแปล · PDF fileแนะนําตวักนักอ่น ปรชัญาของ Laravel Laravel

Validator::extend('foo', 'FooValidator@validate');

มอกวธในการสรางคลาสของเราเองโดยการสบทอด Illuminate\Validation\Validator ทนฟงกชนตองมคาวาvalidateนาหนาดวยนะครบ

ตวอยาง

<?php

class CustomValidator extends Illuminate\Validation\Validator {

public function validateFoo($attribute, $value, $parameters) { return $value == 'foo'; }

}

ตอมาเราตองเอาคลาสของเรามาลงทะเบยน

Validator::resolver(function($translator, $data, $rules, $messages){ return new CustomValidator($translator, $data, $rules, $messages);});

เราสามารถสรางเมทอดทใชในการแสดงขอผดพลาดโดยตามรปแบบนครบ replaceXXX ตามตวอยาง

protected function replaceFoo($message, $attribute, $rule, $parameters){ return str_replace(':foo', $parameters[0], $message);}

Page 187 of 187