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

2012年6月27日 星期三

Zend Framework多資料庫設定

因為在ZF中資料庫是以資源的方式提供
所以在application.ini中設置
[production]
resources.multidb.db1.adapter = "pdo_mysql"
resources.multidb.db1.host = "localhost"
resources.multidb.db1.username = "webuser"
resources.multidb.db1.password = "XXXX"
resources.multidb.db1.dbname = "db1"
resources.multidb.db2.adapter = "pdo_pgsql"
resources.multidb.db2.host = "example.com"
resources.multidb.db2.username = "dba"
resources.multidb.db2.password = "notthatpublic"
resources.multidb.db2.dbname = "db2"
resources.multidb.db2.default = true
再由Bootstrap取得資料庫

$resource = $bootstrap->getPluginResource('multidb');
$db1 = $resource->getDb('db1');
$db2 = $resource->getDb('db2');
$defaultDb = $resource->getDb();

2012年6月22日 星期五

ZendFramework的bootstrap

在ZendFramework的bootstrap中,如果方法名稱以_init為前綴,將被當成資源方法
來自動執行,如果你手上有現成的資源插件(Pluging),可以透過前導的方法 將該資源
排定執行 但該注意的是 當你是使用module模式時 所有module下的bootstrap將會全部
執行 造成 資源重載  效能低下 後來是以取得該module name為判斷 當非執行該module就return 不繼續執行執行非該module的pluging


class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        $view = new Zend_View();
        // more initialization...
        return $view;
    }
}
class FooController extends Zend_Controller_Action
{
    public function init()
    {
        $bootstrap = $this->getInvokeArg('bootstrap');
        $view = $bootstrap->getResource('view');
        // ...
    }
}

2011年4月22日 星期五

ZendFramework使用FreeTDS連接Sybase

請務必把/etc/freetds.conf

中該資料庫  的TDS版本 設定為tds version = 6.3 或 6.0才會正常

ZF的INI設定

resources.db.adapter = "PDO_MSSQL"
resources.db.params.pdoType = "dblib"
resources.db.params.host = "名稱"
resources.db.params.username = "帳號"
resources.db.params.password = "密碼"
resources.db.params.dbname = "資料庫名稱"


如果沒有設成tds version = 6.3
會有登入錯誤的問題

(SQLSTATE[28000] Login incorrect. (severity 9) )

參考

http://blog.wabow.com/archives/335

2011年4月7日 星期四

ZendFramework的分頁

       
         網路上很像很少人在講Zend_Paginator::factory
         這個ZF原裝分頁類
        在初始化(factory)時,可以用ZF_model或array都可以分頁


        $Plists = $qunit -> getList(0);
       
        //分頁設定
         $limit = $this -> _getParam('limit', 10);
         $page = $this -> _getParam('page', 1);
       

           //分頁
          
        $paginator = Zend_Paginator::factory($Plists);
       
        $paginator -> setCurrentPageNumber($page)
             -> setItemCountPerPage($limit);
        $uCount = $paginator ->getTotalItemCount();

        $this -> view ->assign('fromData', $paginator);

       $uCount   總筆數
        $limit  每頁筆數
       $page 預設從第幾頁開始
       $paginator 分頁處理後的資料集

2011年4月6日 星期三

ZendFramework的預設route

 當我們的網址Action 為group-user-add
ctrl會對應至public function groupUserAddAction()
而 view會對應至group-user-add.phtml 




當使用group_user_add
ctrl會對應至groupuseradd
而view還是會對應至group-user-add.phtml
所以可以利用下底線的組合來共用同名ctrl切換不同view?

是偶然嗎?

2011年4月1日 星期五

Zend_Session

Zend_Session::rememberMe();

不帶參數的話,可以使SESSION生命週期為兩周
 帶參數的話以秒為單位。

2011年2月10日 星期四

Zend Framework連接Sybase

使用ZendFrame work時需在主機上安裝

dblib
 指定設定檔的

resources.db.adapter = "PDO_MSSQL"
resources.db.params.pdoType = "dblib"

在zend model update會發生型態問題

Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed


不知為什麼ZF不判斷型態





可透過
protected $_metadata = array(

  '' => array(
        'SCHEMA_NAME'      => ,
        'TABLE_NAME'       => ,
        'COLUMN_NAME'      => ,
        'COLUMN_POSITION'  => ,
        'DATA_TYPE'        => ,
        'DEFAULT'          => NULL|,
        'NULLABLE'         => ,
        'LENGTH'           => ,
        'SCALE'            => NULL|,
        'PRECISION'        => NULL|,
        'UNSIGNED'         => NULL|,
        'PRIMARY'          => ,
        'PRIMARY_POSITION' => ,
        'IDENTITY'         => ,
    ),
    // additional columns...
);
自行定義 metadata
或在data中使用SQL轉型
'sort_no' => new Zend_Db_Expr('convert(int,' . $sort_no . ') ')
Sybase轉型為int型態 
convert(int,' . $sort_no . ')

目前沒在mysql上發現問題,在Sybase卡了很久,使用settype()及(int)在PHP上轉型
進入ZF的update後!!都不行只好透過以上方法!! 

自動編號需使用identity

2010年9月29日 星期三

ZF快速建模的工具zend-db-model-generator

羨慕ROR有好用的工具可以掃描資料庫並建出model嗎?
最近發現一個好工具,zend-db-model-generator

在開發時可以先下載這個工具

http://code.google.com/p/zend-db-model-generator/

svn checkout http://zend-db-model-generator.googlecode.com/svn/trunk/ zend-db-model-generator-read-only

然後將config資料夾下的config.php-default 複製一份成為 config.php

並修改裡面資料庫的設定


回到上一層後

執行zend-db-model-generator.php 看有什麼功能好用

--database : database name
--location : specify where to create the files (default is current directory)
--namespace : override config file's default namespace
* --table : table name (parameter can be used more then once)
--all-tables : create classes for all the scripts in the database
* --ignore-table : not to create a class for a specific table
* --ignore-tables-regex : ignore tables by perl regular expression
* --tables-regex : add tables by perl regular expression

先來試用一下

php zend-db-model-generator.php --database musicscript --all-tables

他會將你資料庫中的musicscript所有的資料表都建立model在目前資料夾底下
如果想指定位置只要設定--location參數即可。

也能指定資料表user

php zend-db-model-generator.php --database musicscript --table user

測試下--all-tables好像有錯誤訊息!!但不影響建模

當然如果你不喜歡他所建立的內容,也有模版可以自己修改在templates資料夾下

2010年9月7日 星期二

使用ZendFrame Work達到跨站使用Session(同個網域下)

Memo(有空再來測試)

實現多個伺服器使用同一份SESSION
http://hi.baidu.com/renyuan1985/blog/item/081d8ff3f431cf58352accb9.html

為Zend_Session 添加一個Memcache_ SaveHandler
http://hi.baidu.com/billdkj/blog/item/049d04f0b2a896c47831aa1c.html

2010年4月25日 星期日

Zend Framework中,View的From組件

如PEAR一樣,ZF的View也有好用的From組件

$this->formText('date' , '',array('size'=>4))




以上就是,建立一個id為Date,

name也是Date


無預設內容,文字長度為4的輸入框。

2010年3月13日 星期六

ZendX的下載點

在使用ZendFramework時,有時會用到jquery

可以透過SVN下載ZendX

http://framework.zend.com/svn/framework/extras/trunk

2010年3月9日 星期二

Zend Framework Session

ZF的Session可以在全域使用
可用再換頁時的資料傳遞

$DF = new Zend_Session_Namespace('DF');

指定
$DF->contacts = array('A', 'B','C');

取用

$contacts = (array) $DF->contacts;

2010年3月2日 星期二

Zend-framework設定快取

$this->getResponse()->setHeader('Expires', '', true);
$this->getResponse()->setHeader('Cache-Control', 'public', true);
$this->getResponse()->setHeader('Cache-Control', 'max-age=3800');
$this->getResponse()->setHeader('Pragma', '', true);
透過重寫ZendFramework的Header可以設定快取

也可以輸出XML的Header
$this->getResponse()->setHeader('Content-Type', 'text/html; charset=UTF-8');

2010年2月4日 星期四

ZendFrameWork 下載檔案

關閉layout

$this->blankPage();
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=" . $filename . ".csv");
print $contactsHeader . "\r\n" . $csv_output;exit;

2009年12月25日 星期五

Zend FrameWork的交易

$this->db->beginTransaction();

try {

//執行SQL語法

$this->db->insert('dbname' , array('欄位1' => '值1'));
$this->db->insert('dbname' , array('欄位2' => '值2'));
$this->db->insert('dbname' , array('欄位3' => '值3'));
$this->db->commit();//成功就執行
}catch (Zend_Db_Exception $e){
$this->db->rollback();//失敗就回去上一步
throw $e;

}

2009年12月13日 星期日

ZendFramework資料庫的設置

ZendFramework設定資料庫時config.ini,跟ROR一樣有個專門的設定檔

[general]
db.adapter=PDO_MYSQL //使用PDO的MySQL接口
db.config.host=localhost //MySQL的主機IP
db.config.username=root //填入資料庫的使用者
db.config.password= //填入資料庫的密碼
db.config.dbname=zendoophp //填入使用的資料庫名稱



然後在單一進入點的index.php
註冊這組設定
$config=new Zend_Config_Ini('./application/config/config.ini',null, true);
Zend_Registry::set('config',$config);

$dbAdapter=Zend_Db::factory($config->general->db->adapter,
$config->general->db->config->toArray());

設定資料庫接口從Zend_Db::factory(接口,設定陣列);

$dbAdapter->query('SET NAMES UTF8');
先送出一個SQL,將資料庫的連線語系設定為中文