ปีใหม่ทั้งที อยากปรับปรุงวิธีการเขียนโปรแกรมให้เป็นรูปแบบมากขึ้น หลายคนแนะนำมาให้ใช้ Framework เลยลองหาข้อมูลศึกษาดู
สำหรับ PHP มีหลาย Framework ที่มีผู้พัฒนาออกมา ให้สามารถนำมาใช้ได้ฟรี ลองเปรียบเทียบหาข้อมูลแล้ว คิดว่า laravel น่าจะดูดีสุด เลยมาแชร์วิธีการใช้กัน
Laravel เป็น PHP Web Application Framework ที่ถูกออกแบบ สำหรับการพัฒนาเว็บแอพพลิเคชันด้วย PHP ในรูปแบบ MVC (Model View Controller)
ความต้องการขั้นต่ำ
เวอร์ชั่นของ laravel ณ ตอนที่เขียนบทความนี้คือเวอร์ชั่น 4.2 ต้องใช้ PHP เวอร์ชั่น 5.4 ขึ้นไป และมี php mcrypt ติดตั้ง
ดังนั้นถ้าติดตั้งบน CentOS 6 ต้อง ติดตั้ง PHP 5.5 บน CentOS 6 ก่อน
ติดตั้งโมดูลของ php เพิ่มเติม
[root@cent6-php ~]# yum install php55w-mcrypt [root@cent6-php ~]# yum install php55w-mysql
ติดตั้ง laravel
ตามคำแนะนำบนเว็บไซต์ laravel.com ให้ใช้ composer เพื่อติดตั้ง laravel
หมายเหตุ หากยังไม่มี composer สามารถดูวิธีติดตั้งได้ที่ ติดตั้ง composer ไว้บริหารจัดการ PHP Library
[alice@cent6-php ~]$ composer global require "laravel/installer=~1.1" Changed current directory to /home/alice/.composer ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) - Installing symfony/console (v2.6.1) Downloading: 100% - Installing guzzlehttp/streams (2.1.0) Downloading: 100% - Installing guzzlehttp/guzzle (4.2.3) Downloading: 100% - Installing laravel/installer (v1.1.3) Downloading: 100% symfony/console suggests installing symfony/event-dispatcher () symfony/console suggests installing symfony/process () symfony/console suggests installing psr/log (For using the console logger) Writing lock file Generating autoload files
composer จะช่วยติดตั้ง library ที่จำเป็นโดยอัตโนมัติ
ไฟล์ที่ได้จะอยู่ในไดเร็กทอรี .composer ใน home ของผู้ใช้ที่รันคำสั่ง composer
ตัวอย่างไฟล์ที่ได้จากการรันคำสั่ง composer ติดตั้ง laravel
[alice@cent6-php ~]$ ls -l .composer/ total 20 drwxr-xr-x. 4 alice users 4096 Jan 4 15:02 cache -rw-r--r--. 1 alice users 63 Jan 4 15:02 composer.json -rw-r--r--. 1 alice users 7910 Jan 4 15:04 composer.lock drwxr-xr-x. 7 alice users 4096 Jan 4 15:04 vendor [alice@cent6-php ~]$ ls -l .composer/vendor/ total 24 -rw-r--r--. 1 alice users 183 Jan 4 15:04 autoload.php drwxr-xr-x. 2 alice users 4096 Jan 4 15:04 bin drwxr-xr-x. 2 alice users 4096 Jan 4 15:04 composer drwxr-xr-x. 4 alice users 4096 Jan 4 15:04 guzzlehttp drwxr-xr-x. 3 alice users 4096 Jan 4 15:04 laravel drwxr-xr-x. 3 alice users 4096 Jan 4 15:03 symfony [alice@cent6-php ~]$ ls -l .composer/vendor/bin/ total 0 lrwxrwxrwx. 1 alice users 28 Jan 4 15:04 laravel -> ../laravel/installer/laravel
เพื่อความสะดวกในการรัน laravel แนะนำให้เพิ่ม PATH ~/.composer/vendor/bin
[alice@cent6-php ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:~/.composer/vendor/bin
export PATH
ล็อกเอาท์แล้วล็อกอินใหม่ เพื่อโหลดไฟล์ .bash_profile ให้คอนฟิก PATH ใหม่มีผล
[alice@cent6-php ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/alice/bin:/home/alice/.composer/vendor/bin
ลองรันคำสั่ง laravel
[alice@cent6-php ~]$ laravel Laravel Installer version 1.1 Usage: [options] command [arguments] Options: --help (-h) Display this help message. --quiet (-q) Do not output any message. --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug. --version (-V) Display this application version. --ansi Force ANSI output. --no-ansi Disable ANSI output. --no-interaction (-n) Do not ask any interactive question. Available commands: help Displays help for a command list Lists commands new Create a new Laravel application.
สร้างเว็บแอพด้วย laravel
ใช้คำสั่ง cd เปลี่ยนไปยังไดเร็กทอรีที่เก็บไฟล์เว็บ เช่น /var/www/html/
ใช้คำสั่ง laravel สร้างเว็บแอพใหม่ ชื่อ blog
[alice@cent6-php ~]$ cd /var/www/html/ [alice@cent6-php html]$ laravel new blog Crafting application... Application ready! Build something amazing.
ดูผลลัพธ์ที่ได้
[alice@cent6-php html]$ ls -l total 4 drwxr-xr-x. 6 alice users 4096 Jan 4 15:25 blog [alice@cent6-php html]$ ls -l blog/ total 100 drwxr-xr-x. 12 alice users 4096 Jan 4 15:25 app -rw-r--r--. 1 alice users 2452 Jan 4 15:25 artisan drwxr-xr-x. 2 alice users 4096 Jan 4 15:25 bootstrap -rw-r--r--. 1 alice users 717 Jan 4 15:25 composer.json -rw-r--r--. 1 alice users 58562 Jan 4 15:25 composer.lock -rw-r--r--. 1 alice users 146 Jan 4 15:25 CONTRIBUTING.md -rw-r--r--. 1 alice users 567 Jan 4 15:25 phpunit.xml drwxr-xr-x. 3 alice users 4096 Jan 4 15:25 public -rw-r--r--. 1 alice users 2051 Jan 4 15:25 readme.md -rw-r--r--. 1 alice users 519 Jan 4 15:25 server.php drwxr-xr-x. 20 alice users 4096 Jan 4 15:25 vendor
cd เข้าไปในไดเร็กทอรี blog ที่สร้างใหม่
[alice@cent6-php html]$ cd blog/
ไฟล์สำคัญไฟล์หนึ่งของ laravel คือ artisan เป็นไฟล์ php ที่ใช้ในการพัฒนาโปรแกรมด้วย laravel โดยจะมีโหมดคำสั่งต่างๆ และรูปแบบออปชั่นการใช้แตกต่างกันไป
[alice@cent6-php blog]$ php artisan Laravel Framework version 4.2.16 Usage: [options] command [arguments] ...
เริ่มต้นเพื่อความปลอดภัยของข้อมูล laravel แนะนำให้ใช้ php artisan ตามด้วยคำสั่ง key:generte เพื่อสร้าง key ใหม่
[alice@cent6-php blog]$ php artisan key:generate
Application key [KngSucY4b64pcFlMO16RR0i239gMyP4j] set successfully.
key ใหม่ที่ได้จะถูกแก้ไขในไฟล์ app/config/app.php โดยอัตโนมัติ
[alice@cent6-php blog]$ cat app/config/app.php
...
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => 'KngSucY4b64pcFlMO16RR0i239gMyP4j',
...
แสดงผลแอพบนหน้าเว็บ
ในไดเร็กทอรี public นี้จะมีไฟล์ .htaccess index.php เพื่อใช้เป็นไดเร็กทอรีหลักของหน้าเว็บ หรือ DocumentRoot
[alice@cent6-php blog]$ ls -al public/ total 24 drwxr-xr-x. 3 alice users 4096 Jan 4 15:25 . drwxr-xr-x. 6 alice users 4096 Jan 4 21:07 .. -rw-r--r--. 1 alice users 0 Jan 4 15:25 favicon.ico -rw-r--r--. 1 alice users 356 Jan 4 15:25 .htaccess -rw-r--r--. 1 alice users 1586 Jan 4 15:25 index.php drwxr-xr-x. 2 alice users 4096 Jan 4 15:25 packages -rw-r--r--. 1 alice users 24 Jan 4 15:25 robots.txt
ล็อกอินด้วย root แก้ไขคอนฟิกของเว็บเซิร์ฟเวอร์เพื่อชี้ DocumentRoot
[root@cent6-php ~]# vi /etc/httpd/conf/httpd.conf
...
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html/blog/public"
...
รีสตาร์ตเซอร์วิส httpd เพื่อให้คอนฟิกใหม่มีผล
[root@cent6-php ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
ทดลองเปิดด้วย browser
ขึ้นข้อความ Error in exception handler
สาเหตุเป็นเพราะว่า laravel ต้องมีการเขียนไฟล์ลงไดเร็กทอรี app/storage ด้วย
cd เข้าไปใน app/ แล้วเปลี่ยน permission ของไดเร็กทอรี storage รวมทั้งไดเร็กทอรีย่อยๆ ด้วย
[alice@cent6-php blog]$ cd app/ [alice@cent6-php app]$ chmod -R 777 storage/
หากเซิร์ฟเวอร์มีการเปิดใช้ SELinux ด้วย ต้องใช้คำสั่ง chcon เปลี่ยน type เป็น httpd_sys_content_rw_t เพื่อให้โปรเซส httpd สามารถอ่านเขียนไฟล์หรือไดเร็กทอรีได้
[alice@cent6-php app]$ chcon -R -t httpd_sys_content_rw_t storage/
ลองเปิดหน้าเว็บบน browser อีกครั้ง