Category Archives: Zend Framework

分散環境でのPHPによるタスク管理

分散環境でのPHPによるタスク管理 – Zend_Queue – (1/4):CodeZine.

ZendFrameworkにそんなものが。便利そう。
プロセス間でキューイング、私にはあまり用途はなさそうだが。。

シリアライズした行データの復元 @ Zend Framework

Zend FrameworkでのZend_Db_Table_Row_Abstract型、シリアライズ(serialize,unserialize)するとテーブルのmetaデータを無くしてしまいます。

マニュアルを見ると

復元した行は、なぜ切断された状態なのですか?

シリアライズしたオブジェクトは、可読形式の文字列となります。 データベースのアカウントやパスワードといった情報を 暗号化せずにプレーンテキストにシリアライズして保存すると、 セキュリティ上問題となります。 そのようなデータを無防備な状態でテキストファイルに保存したりしたくはないでしょう。 またメールなどで攻撃者に覗き見られることも好まないはずです。 シリアライズされたオブジェクトは、 正しい認証情報を知らない限りデータベースにアクセスすることはできません。

Zend Framework: Documentation

と書いてあります。ごもっとも。テーブルデータを取り戻すには、

[php]
$rowClone = unserialize($serializedRow);

$bugs = new Bugs();

// この行をテーブルに再接続し、
// データベースとの接続を復活させます
$rowClone->setTable($bugs);

// これで、行の内容を変更して保存することができます
$rowClone->bug_status = ‘FIXED’;
$rowClone->save();
[/php]

と、setTableで再接続させます。

rowsetごとキャッシュしてる場合は、

[php]
$rowset->setTable(new Bugs());
[/php]

と、rowsetにテーブルのインスタンスを渡してやれば、再接続します。

英語ではReactivating a Row as Live Dataなどと書かれていますね。

行データをキャッシュから戻した場合は、リアクティベイティング(←言いにくい)をお忘れ無く!

Zend_Db_Table_AbstractでZend_Cacheを利用して負荷軽減

オデの日記@WEB系: Zend_Db_Table_AbstractでZend_Cacheを利用して負荷軽減

で、このZend_Db_Tableですが、生成する度にdiscribetable()というメソッドが呼ばれテーブル情報を取得します。とても便利なのですが、都度DB接続が行われ非効率すぎるのでZend_Cacheを利用してデータをキャッシュさせておきます。
discribeTable()が走るタイミングは
・insert()
・find()
・info()
を呼んだ時だそうです。

というわけでキャッシュを組み込みましょう。

[php]
$frontendOptions = array(
‘automatic_serialization’ => true
);
$backendOptions = array(
‘cache_dir’ => TMP_PATH
);

$cache = Zend_Cache::factory(
‘Core’,
‘File’,
$frontendOptions,
$backendOptions
);
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
[/php]

Zend Frameworkで多対多のテーブルをMyISAMなどリレーション無しで扱う場合

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:: PHPの種 ブログ

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

で、ある程度Zend_Db_Tableで保管ができるので、それを利用させてもらいましょう。

[php]
class BugsProducts extends Zend_Db_Table_Abstract
{
protected $_name = ‘BugsProducts’;
protected $_referenceMap = array(
‘Bug’ => array(
‘columns’ => ‘bug_id’,
‘refTableClass’ => ‘Bugs’,
‘refColumns’ => ‘id’,
‘onDelete’ => self::CASCADE,
‘onUpdate’ => self::CASCADE
),
‘Product’ => array(
‘columns’ => ‘product_id’,
‘refTableClass’ => ‘Products’,
‘refColumns’ => ‘id’,
‘onDelete’ => self::CASCADE,
‘onUpdate’ => self::CASCADE
)
);
}
[/php]

んで、リファレンスを貼られたほうのテーブルで

[php]
class Products extends Zend_Db_Table_Abstract
{
protected $_name = ‘products’;
protected $_dependentTables = array(‘BugsProducts’);
}
[/php]

DependetTablesをクラス名で指定しておきます。

これでDeleteがCascadeされたりなど、Zend_Db_Table側でリレーションを保管してくれます。
そもそもInnoDBが使えればいいんですけどねえ。。

Zend Frameworkで多対多のテーブルをリレーション無しで扱う。:

Zend Frameworkで多対多のテーブルを簡単に扱う。: PHPの種 ブログ

RDBMS上でリレーションを組んでおけば、Zend_Db_Tableの設定で 親側のテーブルに $_dependentTables を指定しなくてもよいので楽です。

つまり強制MyISAMのさくらレンサバでは。。
$_dependentTablesを指定しましょう。

Zend Framework 入門に良い書籍は何か

0.いくつのバージョンからがっつり使っていたZend Framework。いつのまにやら新機能が出過ぎててちょっとついていけなくなりつつあります。
まあ普通にMVCなフレームワークとして使っている分には問題ないハズなんですが、新しい機能はきっと便利に違いない!と思い、色々と再勉強している最中です。

勉強にはやはり書籍だろう!というわけで、Zend Frameworkの書籍を調べていたら、あるわあるわ。。
こんなに本が出るほどブームなのか?(^_^;

どれを読んでいいのかさっぱりわかりません。

これが最も売れているっぽいし、レビューも評価が高いけど、いかんせん2007年の出版では古いのではないか。
増刷時に加筆されてたりするのかな。

こちらはSmartyとの連携も載っているとか。今Smarty使ってないけど。

レビューに

最後にブログサイト構築ですが、問題なくインストールして試す事が出来ましたし、
ディレクトリ構造表がありますので設置も解かり易い様に思います。実践ソースも参考になります。

とあるのでかなり惹かれる。実際にブログレベルの動くサイトを構築できて、ディレクトリ構造表がついてて理解もしやすくなってるのは素晴らしいです。

これは2009年6月と非常に新しいですね。
目次とか索引だけですがAmazonで中身検索できてよいですね。
こういうのはやはり助かります。

PEARのサンプルも色々ついていて素敵!となるか。まあ実際Zend Frameworkだけでなく、PEARも使ってますからね。
pagerは未だにPEARのを使ってたりします。

と、どれを読んでいいかよくわからないことに。
そのうち読んで使った中身レビューを届けるつもりです。。

ZendFramework::エラーコントローラをモジュール毎に分ける

ZendFrameWorkでエラーコントローラを使おうとした時のお話し。 – 西新宿のプログラマの日記

モジュール毎にErrorControllerを分ける方法が私にもわからんのです。
Default見に行っちゃう。
DefaultのErrorController内で$this->_request->getParam(‘module’)でも見て振り分けるしかないのかな。

Zend Framework ではじめる携帯サイト

Zend Framework ではじめる携帯サイト – Devel::Bayside

ZFではじめる携帯サイト(PDF)

すばらしいまとめ。参考になります。

Zend_Loader_Autoloaderの追記

Zend Framework 2.0からはZend_Loader_Autoloaderですよ、という記事を書きましたが、自分で組み込んだライブラリや、Application/modelにパスを通していたファイルが自動で読み込めなくなったりしてました。
デフォルトの動作では’Zend_’や’ZendX_’というprefixのものしか自動で読み込まないとか。

れぶろぐ – [Zend] Zend_Loader_Autoloader クラスの正しい使い方

ので、パスが通っていれば自動で読み込みにいく、昔のregisterAutoloadのような設定にするには以下のようにします。

[php]
require_once ‘Zend/Loader/Autoloader.php’;
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
[/php]

メモメモ。

ZendFrameWorkで日本語完璧メール

Letter Carrier Delivering MailImage by Smithsonian Institution via Flickr

ZendFrameWorkで日本語完璧メール – Qdmail – PHP::Mail Library , Quick and Detailed for Multibyte

Zend Frameworkは相変わらず日本語メール微妙なんだろーなーと何も調べず外部ライブラリを当たっていたところ、上記Qdmailは素敵でした。

とりあえず使ってみましたが、問題無しです。
これからガツガツ使っちゃうかも!

デコメール対応らしいですが、今のところ使う予定はないなぁ。。

Reblog this post [with Zemanta]