เมื่อ Laravel Framework 4 กับ Zend Framework 2 อยู่ร่วมกัน

ตัว Laravel Framework 4 เป็น Framework ที่ดีตัวหนึ่งในตลาด PHP Framework แต่ Zend Framework 2 ก็มี components ที่น่าสนใจช่วยให้เราทำงานได้สะดวกมากขึ้น การเอาทั้งสองตัวมาทำงานร่วมกันจึงเป็นเรื่องที่ดี

ขั้นแรกก็สร้าง project ของ Laravel Framework ด้วยคำสั่งของ composer เสียก่อน (อ้างอิง version 4)

composer create-project laravel/laravel

แก้ไขไฟล์ composer.json ของ Laravel Framework เพื่อเพิ่ม Zend Framework 2 จาก Packagist ลงใน project ของเรา (zendframework/zendframework – Packagist)

โดยเพิ่ม

"zendframework/zendframework": "2.3.*@dev"

ลงในส่วน

require

หน้าตาจะประมาณ

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"require": {
"laravel/framework": "4.0.<em>",
"zendframework/zendframework": "2.3.</em>@dev"
},

เสร็จแล้วก็สั่ง composer update

รอจนจบแล้วเขียน autoload use ทดสอบ component ตัว Zend Version มาแสดงผลดูตามด้านล่าง ซึ่งจะได้ตัวเลข version ของ Zend Framework ประมาณ 2.2.2 (ณ วันที่เขียนบทความ)

<?php

use Zend\Version\Version;

class HomeController extends BaseController {
    public function getIndex()
    {
        echo Version::getLatest();
    }
}

Zend Framework 2.0 ออกตัว Stable แล้ว!

หลังจากที่ Zend Framework ออก version 1.0 ออกมาเมื่อปี 2007 ผ่านมา 5 ปี วันนี้ก็ได้เวลาของ version 2.0 เสียที จาก Zend Framework 2.0.0 STABLE Released! และ Changelog: 2.0.0 ผมสรุปสั้นๆ ตามนี้

ใน Zend Framework 2 มีทีมพัฒนาจาก Google, Microsoft, StrikeIron และ partner ต่างๆ มากมายเข้าร่วมพัฒนาเพื่อสร้าง API ติดต่อกับ Web Services ของตัวเองให้ดีมากขึ้น

การเปลี่ยนแปลงใน Zend Framework 2 นั้นมีดังต่อไปนี้

  • สนับสนุน PHP 5.3 ขึ้นไป เพราะใช้ namely namespaces, late static binding, lambda functions และ closures มาพัฒนา เพราะฉะนั้นได้เวลาเรียนรู้กันแล้วครับ (จริงๆ มันควรจะเริ่มกันนานแล้วนะ)
  • 100% Object-oriented code และ Component designed (dependencies on other component) ตอนนี้แยกเดี่ยวๆ ได้ดีมากขึ้น
  • รองรับ Pyrus, Composer, PHPUnit และ Travis CI เพื่อช่วยพัฒนาตัวเว็บ

มี Key Feature ส่วนของ Component ใหม่คือ

  • ModuleManager
    This new module system is designed with flexibility, simplicity, and re-usability in mind
  • ServiceManager
    The Service Locator is a service/object locator, tasked with retrieving other objects.
  • EventManager
    Component designed for the following use cases
    – Implementing simple subject/observer patterns.
    – Implementing Aspect-Oriented designs.
    – Implementing event-driven architectures.

ได้เวลาลองของใหม่แล้วครับพี่น้อง!!!!

Read more

เอา Zend Framework มาใส่ Codeigniter Framework เพื่อใช้ Zend Component

entry นี้ผมกะจะเขียนตั้งนานแล้ว แต่ว่าไม่มีโอกาสเสียที วันนี้เลยเอาสักหน่อยครับ

ผมไม่เท้าความว่า Codeigniter Framework คืออะไร หาอ่านกันเอานะครับ ติดตั้งอย่างไร เขียนยังไง ทำงานอย่างไร อันนี้หาเอาได้ในเว็บต่างๆ ทั้งไทยและเทศ ผมว่ามีเยอะ ผมลุยเรื่องปรับแต่งเพิ่มเติมเลยดีกว่า

เหตุผลที่เอา Component ของ Zend Framework (ต่อไปเรียก Zend) มาใช้ใน Codeigniter (ต่อไปเรียก CI) เพราะความครบเครื่องในการนำไปใช้งาน ที่หลายๆ อย่างทำได้ดีกว่าตัว CI เยอะมาก แต่โครงสร้างและติดตั้งของ Zend ทำได้ยุ่งยากกว่า ผมเลยเอามาผสมกัน หากใครใช้ Zend มาบ้างจะทราบดีว่ามันอลังการงานสร้างแค่ไหน ครบเครื่องอย่างไร

เอาหล่ะ ไม่พูดอะไรมาก ก่อนอื่นสร้างไฟล์ที่ path ตามด้านล่างครับ

system/application/libraries/Zend.php

ภายในไฟล์ก็ประกอบด้วยโค้ดตามด้วยล่างครับ

<?php
class CI_Zend {
    function __construct ($class = NULL) {

        ini_set('include_path',  ini_get('include_path') . PATH_SEPARATOR . APPPATH . 'libraries');

        if ($class) {
            require_once (string) $class . EXT;
            log_message('debug', "Zend Class $class Loaded");
        } else {
            log_message('debug', "Zend Class Initialized");
        }
    }

    function load ($class) {
        require_once (string) $class . EXT;
        log_message('debug', "Zend Class $class Loaded");
    }
}

โดยเมื่อได้ไฟล์ Zend.php แล้ว ให้เอา Directory “Zend” ทั้งหมดไปใส่ที่

system/application/libraries

เวลาใช้งาน ก็ใช้งานผ่าน Controller ของ CI โดยมี 2 แบบคือ

  1. โหลด Library Zend ที่เขียนสำหรับตั้ง include path ไปพร้อมๆ กับโหลด Component ไปด้วยเลย
$this->load->library('zend', 'Zend/Package/Name');
  1. โหลดตัว Library Zend ที่เขียนสำหรับตั้ง include path ก่อน แล้วค่อยโหลดตัว Component ทีหลังเป็นตัวๆ ไปก็ได้
$this->load->library('zend');
$this->zend->load('Zend/Package/Name');

การโหลด Zend Component แบบนี้ก็ทำให้ดูเป็นระเบียบกว่าการ require_once เข้ามา เพราะอย่างน้อยก็ทำให้เราทำ logs tracking ใน CI ได้ครับ รวมไปถึงการตั้ง include path เพื่อโยกย้าย Zend Framework ไปที่ไหนๆ ก็ได้ตามแต่เราตั้งใน include path โดยไม่ต้องอ้างอิง include path ของ System

เพียงเท่านี้เราก็ลั้นล้ากับ Zend ใน CI ได้สบายใจแล้วหล่ะครับ ;)