รีวิวคร่าวๆ กับ Slim Framework + Twing + Illuminate

พอดีไป Google เจอ Performance benchmark of popular PHP frameworks ตัวนี้มาครับ ก็เลยอยากจะลองเล่น ด้วยความที่ไม่ต้องลง php extension เพิ่มเหมือน Phalcon เลยคิดว่าเอ๋! ถ้าเราเอาไปใช้บนแชร์โฮสต์ มันน่าจะใช้งานได้ง่ายกว่าละนะ

พอพูดถึงตัวเล็กเลยนึกไปถึง เตื้ย แบน ซึน ซะงั้น

เข้าเรื่องมาดูตัว Slim Framework ตัวนี้กันหน่อยดีกว่า ... เห็นฝรั่งเค้าเรียกมันว่า Micro Framework แสดงว่ามันต้องตัวเล็กกระทัดรัดแน่ๆ (ชื่อก็ส่ออยู่แล้วนี่หว่า)

พอโหลดผ่าน Composer เท่านั้นล่ะคุณเอ้ย! เล็กจริงๆ เว้ยเห้ย! ... ตามเข้าไปอ่านใน Document ยิ่งตกใจตัวหลักๆ ที่ใช้งานส่วนมากจะมี Route กับ View (เซ็ต Template แบบง่ายๆ ได้) ......... เหยดดดโด้ววววววโอเมก้าสาม

แต่ถ้าอยากได้พวก Controller Model หรือ Template แบบ Advance ไปหาเอาเอง... ฮ่วยยย! ไปไม่ถูกเลยกรูเอ้ย... ไอ่สลัดเป็ด

หลังจากที่ลองๆ หาข้อมูลได้สักพัก(เกือบสองชั่วโมง) เลยได้มาประมาณนี้(composer.json)

{
  "require": {
    "slim/slim": "2.*",
    "slim/views": "0.1.*",
    "twig/twig": "1.*",
    "illuminate/database": "4.0.*"
  }
,
    "autoload": {
        "classmap": [
            "apps/models"
        ]
    }
}

require เหล่านี้คิดว่าต้องได้ใช้(เกือบหมด)ละนะมาดูกันทีละตัวดีกว่า
  • slim/slim ตัวนี้เป็น Core
  • slim/views ตัวนี้เป็น Custom View Class เอาไว้ใช้กับพวก Templates ข้างนอก
  • twig/twig ตัวนี้เป็น Templates (เห็นเค้าแนะนำกันเยอะจัง) หรือจะใช้ Smarty ก็ได้เผื่อใครเคยใช้มาก่อน แต่ส่วนตัวผมไม่เคยใช้ทั้งสองนั่นล่ะ (ฮาาาาาา)
  • j4mie/paris ตัวนี้เอาไว้เป็น Model
  • illuminate/database ไปใช้ Model แบบที่ Laravel เลยน่าจะดีกว่า
คร่าวๆ ก็น่าจะประมาณนี้

คำถาม แล้ว Controller หายไปไหน?
คำตอบ อ่านได้จาก Blog เจ้าของเลยครับ(คลิก คลิก คลิก อ่านที่นี่)

จุดหนึ่งที่สำคัญมว๊ากๆ เลยก็คือ อย่าลืมตั้ง .htaccess ด้วยนะเธอว์ เวลาใช้งานอะไรต่างๆ นาๆ จะได้สะดวกขึ้น คลิกเพื่ออ่านวิธีตั้ง .htaccess

หลังจากที่ติดตั้งผ่าน Composer ไปแล้ว หน้าตามันจะได้ประมาณนี้ ในตัวอย่างที่เราพูดกันนี้ผมติดตั้งไว้ใน Folder ที่ชื่อว่า slim มันก็จะได้ประมาณนี้

slim
  |--\apps
      |--\models
  |--\vendor
      |--\composer
      |--\illuminate
      |--\nesbot
      |--\slim
      |--\twig
  |--composer.json
  |--composer.lock
  
ส่วนภาพด้านล่างนี้ผมเล่นไปเยอะเหมือนกันแล้วล่ะ ก็จะมีเพิ่ม .htaccess, index.php ใน root แล้วก็เพิ่ม templates เข้ามาเพื่อจะได้เห็นภาพชัดเจนภาพขึ้นเวลาเอาไปใช้งาน

ก่อนจะเข้าไปดูโค้ด เผื่อใครอยากจะลองเล่นตาม ตัวนี้เป็น DB จ้า
# DB(MySQL)
CREATE TABLE IF NOT EXISTS `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`timestamp` datetime NOT NULL,
`title` varchar(128) NOT NULL,
`summary` varchar(128) NOT NULL,
`content` text NOT NULL,
`author` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO `article` (`id`, `timestamp`, `title`, `summary`, `content`, `author`) VALUES
(1, '2011-07-28 02:03:14', 'Hello World!', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 'Mr White'),
(2, '2011-07-28 02:03:14', 'More Hello World!', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 'Mr Green');


# index.php
<?php
// โหลด packet ที่ได้จาก composer
require 'vendor/autoload.php';

// ติดต่อฐานข้อมูล
use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'blog',
'username' => '',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
]);
$capsule->bootEloquent();

// ใช้ Twig
$app = new \Slim\Slim(array(
'view' => new \Slim\Views\Twig()
));

// เพิ่ม Config ให้ Slim มันไปอ่าน templates จาก templates/first
$app->config(array(
'templates.path' => 'templates/first'
));

// ลองเล่น Route
$app->get('/hello/:name', function ($name) use ($app) {

// เรียกข้อมูลใน Table Article
$articles = Article::all();

// ส่งผ่านตัวแปรไปหน้าเทมเพลต
$app->render('index.html', array(
'name' => $name,
'articles' => $articles
));
});

$app->run();


# apps/models/article.php
<?php
class Article extends Illuminate\Database\Eloquent\Model
{
protected $table = 'article';
}


# templates/first/firstpage.html
<!DOCTYPE html>
<html>
<head>
<title>First Page</title>
<meta charset="utf8" />
</head>
<body>
<h1>Let's go Slim!</h1>
Hello {{ name }}
{% for article in articles %}
<h3>{{ article.author }}</h3>
{% endfor %}
</body>
</html>


ทีนี้ก็ลองใช้งานผ่านเบราเซอร์ดูซะหน่อย
โป๊ะเชะ! อย่างแจ่ม

หวังว่าพอจะเป็นแนวทางให้หลายๆ คนได้ไม่มากก็น้อยนะครับ
ปล. อย่าเอาไปเทียบกับพวก CI หรือ Laravel เลยนะ เจ้าของ Slim เค้าก็เขียนบอกกล่าวไว้ใน Blog แล้ว ;)

* เข้ามา Edit บทความคืนวันที่ 9 Oct 2013 เปลี่ยนจาก j4mie/paris เป็น illuminate/database
**
Ref.

Comments

Post a Comment