2008/Apr/14

Platform: Microsoft Windows XP
Framework: Zend Framework
Web stack: XAMPP

ช่วงนี้ ต้องมาลอง Zend Framework (ZF) สิ่งนึงที่ไม่ชอบ PHP Framework หลายๆตัว
ก็คือมักจะไปผูกติดกับ Web server โดยไม่จำเป็น
จาก Quick Start ใน Documentation ของ ZF บอกให้สร้าง file system ตามที่ระบุ
จริงๆ จะสร้างอย่างอื่นก็ไม่ผิด แต่อยากลองเพื่อดูมุมมองหน่อย
จาก file system layout ที่ ZF แนะนำ

application/
    controllers/
        IndexController.php
    models/
    views/
        scripts/
            index/
                index.phtml
        helpers/
        filters/
html/
    .htaccess
    index.php

ZF ให้กำหนด document root ของเว็บไปที่ directory html
และสามารถ override configuration โดยใช้ .htaccess ได้
สิ่งที่ต้องทำ คือตอนที่สร้าง virtual host ใน XAMPP ซึ่งถ้าลงตามปกติ จะอยู่ที่ c:\xampp\apache\conf\extra\httpd-vhosts.conf ให้เพิ่ม

<VirtualHost *:8082>
    ServerAdmin my@email.com
    ServerName localhost
    DocumentRoot D:\Workspace\ProjectName\Webroot
    <Directory D:\Workspace\ProjectName\Webroot>
        AllowOverride All
    </Directory>
    ErrorLog C:\xampp\apache\logs\ProjectName-error.log
    CustomLog C:\xampp\apache\logs\ProjectName-access.log common
<VirtualHost> 

AllowOverride All เป็นการระบุให้สามารถ override configuration ได้
ที่ต้องทำงี้เพราะใน .htaccess จะระบุให้ rewrite url ดังนี้

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

จาก .htaccess ทำให้ url อื่นๆ ที่ไม่ได้ลงท้ายด้วย js, ico, gif, jpg, png, css
จะถูกเปลี่ยนแล้วไปที่ index.php หมด แต่ url ที่ client เห็นไม่ได้เปลี่ยนตาม
เพราะเป็นการ rewrite url หลังจากที่ user ส่ง request ไปทาง web server
และ web server ทำการ rewrite url แล้วส่งต่อไปให้ url นั้นทำงาน
ข้อเสียที่รู้สึกได้คือ ถ้าเราไม่มีสิทธิแก้ configuration ของ Apache ให้
หรือ Web server เป็น IIS, Lighttpd หรือตัวอื่นๆ ก็ต้องไปดูว่าจะ rewrite url ยังไง
ส่วนเรื่อง file system การย้าย application ออกไปเลยดูเหมือนจะเป็นสิ่งที่ดี
เพราะ user ไม่สามารถเข้าถึง directory application ได้ แต่จากประสบการณ
hosting บางทีเวลาเอาไฟล์ขึ้น จะไม่สามารถอ้าง directory ที่อยู่เหนือขึ้นไปได้
เพราะฉะนั้น ถ้าเรากำหนด directory html เป็น document root แล้วจะ upload
เราจะไม่สามารถอ้างอิงถึง directory application ได้ แต่ตรงนี้ก็สามารถแก้ได้
เพียงเปลี่ยน path ตอนเรียก Zend_Controller_Front::run ใน index.php

โดยส่วนตัวแล้ว สิ่งที่ทำให้ไม่ชอบ PHP Framework หลายๆอัน อยู่ตรงที่
ชอบสร้าง directory controllers, models, views เพื่อแยกเป็น MVC
ซึ่งลองคิดๆดูแล้วไม่เกิดประโยชน์ที่จะทำแบบนั้น และดูจะเป็นปัญหาในแง่ของการจัดการด้วยซ้ำ
เช่น เราต้องการเอา web page ที่เป็นส่วนของการ search ข้อมูลออกจาก web site
เราก็ต้องไปหาใน directory เหล่านั้นเพื่อเอาออกไป ผมมองว่าใน file system
การแบ่งเป็น module จะดีกว่า แล้วใน directory ของ module นั้นค่อยแยกเป็น MVC
โดยที่ controller ก็เป็น php ที่รับ request แล้วแยก view ออกไป
อาจจะใส่เป็น directory ไปเลยก็ได้ ส่วน model ที่เป็น bussiness logic
ถ้าเป็นใน C# ก็อาจจะแยกเป็นอีก Project แล้ว compile เป็น DLL มาใช้
ซึ่งมองไปแล้ว model ดูไปก็ไม่ต่างอะไรกับ library ในแง่วิธีการเรียกใช้
เพียงแต่เป็น library ที่จัดการด้าน business logic ของ web site นั้นๆ
ก็อาจจะแยกใส่ใน directory lib เลยก็ได้

edit @ 15 Apr 2008 00:04:10 by Gaiz

ชื่อ: 
เว็บไซต์: 
คอมเมนต์:




smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry
สุขสันต์วันสงกรานต์ค่า(^o^) ขันน้ำ ขันน้ำ
#1  by  2spot studio At 2008-04-15 00:11, 
<img src=""/>
#2  by  ง่ะ (58.137.12.74) At 2008-05-21 10:04, 
ค้างนานแล้วนะพี่ บทความนี้อะ big smile

มาเขียนด่วนเลยจะอ่าน ฮ่าๆ
#3  by  TonHor At 2008-10-30 09:37, 
มาช้าไปหรือเป่าครับ ฮ่าๆ

ผม ว่าปัญหา นี้ลอง symfony ครับ

แบ่ง แบบ Hierarchy เลย มีแบ่งเป็น Module แล้วแยก MVC ด้านในได้เลยครับ เหมือน RoR ครับ concept มัน
#4  by  ลิง (58.8.17.199) At 2009-01-28 10:32, 
จะครบปีแล้วนะ พี่ sad smile
#5  by  TonHor At 2009-02-27 15:05, 

<< Home