顯示具有 FuelPHP 標籤的文章。 顯示所有文章
顯示具有 FuelPHP 標籤的文章。 顯示所有文章

2013/12/08

Setting Composer Autoload on FuelPHP

FuelPHP 升上 1.6 開始支援 PHP Composer。原以為按照文件上的步驟操作,執行時就會自動載入 composer 安裝的類別檔,但事實上還需要另外作設定。

/fuel/app/bootstrap.php 中,在「Autoloader::register()」後方引入 composer autoload:
require VENDORPATH.'autoload.php';


在 FuelPHP 中使用 Sentry,則加入 composer.json:
"require": {
   "cartalyst/sentry": "2.0.*",
   "illuminate/database": "4.0.*",
   "ircmaxell/password-compat": "1.0.*"
}


若 composer autoload.php 已設定好,則可以呼叫 Sentry 來使用:
Cartalyst\Sentry\Facades\FuelPHP\Sentry

由於路徑太常,可以使用 class_alias() 指定別名:
class_alias('Cartalyst\Sentry\Facades\FuelPHP\Sentry', 'Sentry');




Ref:

FuelPHP and Composer
http://fuelphp.com/blogs/2013/01/fuelphp-and-composer

FuelPHPでSentryを使おう
http://blog.fagai.net/2013/03/11/fuelphp_sentry/

2013/09/29

URL Rewrite for FuelPHP on Nginx

在 Nginx 設定檔預設值時,FuelPHP 的 URL 看起來是:
http://my.site/index.php/controller/param/

將 URL rewrite 成:
http://my.site/controller/param/

先改 Nginx 設定:
location / {
   try_files  $uri /index.php?$uri$args;
}

這樣能讓 Nginx 處理不含 index.php 的 URL,再來需要修改 FuelPHP 的設定,讓 Uri::create() 等產生的網址自動將 index.php 去掉。

修改 fuel/app/config/config.php:
return arary(
   //'index_file'  => 'index.php',
   'index_file'  => false,
);

2012/11/14

Use FuelPHP oil Generate Model and Migration

FuelPHP 的 oil 提供快速建立 model 和 migration 的方法,例如要建立一資料表存放使用者帳號:
oil g model users id:int username:varvhar[100] email:varchar[200]

oil 則會幫你產生 table 的 migration:
<?php

namespace Fuel\Migrations;

class Create_users
{
   public function up()
   {
      \DBUtil::create_table('users', array(
         'id' => array('constraint' => 11, 'type' => 'int'),
         'username' => array('constraint' => 100, 'type' => 'varvhar'),
         'email' => array('constraint' => 200, 'type' => 'varchar'),
         'created_at' => array('constraint' => 11, 'type' => 'int'),
         'updated_at' => array('constraint' => 11, 'type' => 'int'),

      ), array('id'));
   }

   public function down()
   {
      \DBUtil::drop_table('users');
   }
}

其中 id 自動被當作 primary key,沒有設定 auto_increment。

若要建立一個資料表,需要有欄位「id」當作 primary key 且設定 auto_increment 屬性,可以將「id」從 oil 參數中去掉,當 oil 偵測到資料表沒有欄位名稱包含 id 且沒辦法設定 primary key 時,便會自動新增一個「id」的欄位:
   public function up()
   {
      \DBUtil::create_table('users', array(
         'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),
         'username' => array('constraint' => 100, 'type' => 'varchar'),
         'email' => array('constraint' => 200, 'type' => 'varchar'),
         'created_at' => array('constraint' => 11, 'type' => 'int'),
         'updated_at' => array('constraint' => 11, 'type' => 'int'),

      ), array('id'));
   }

oil 的參數中很清楚標示欄位的設定為 fieldname:type,沒辦法加入其他欄位屬性。假設要為欄位加上其他屬性,像是 null、index 等,則必須在 oil 產生 migration 以後,手動在 migration 中新增自己需要的屬性。

ps. oil 還會偵測資料表名稱,migration 會將資料表名稱改成複數。