Previous Next

導入

導入

リレーショナルデータベースでは、テーブル間の関連 (リレーション) が設定されています。 あるテーブル内のエンティティが、 データベーススキーマで定義されている参照整合性制約を使用して 他のエンティティとリンクしているのです。

Zend_Db_Table_Row クラスは、他のテーブルの 関連する行を問い合わせるためのメソッドを持っています。

リレーションの定義

抽象クラス Zend_Db_Table_Abstract を継承して、各テーブル用のクラスを作成します。 詳細は テーブルクラスの定義 を参照ください。 また、以下のコードで使用しているデータベースの構成については サンプルデータベース を参照ください。

以下に、これらのテーブルに対応する PHP クラス定義を示します。

class Accounts extends Zend_Db_Table_Abstract
{
    protected $_name            = 'accounts';
    protected $_dependentTables = array('Bugs');
}

class Products extends Zend_Db_Table_Abstract
{
    protected $_name            = 'products';
    protected $_dependentTables = array('BugsProducts');
}

class Bugs extends Zend_Db_Table_Abstract
{
    protected $_name            = 'bugs';

    protected $_dependentTables = array('BugsProducts');

    protected $_referenceMap    = array(
        'Reporter' => array(
            'columns'           => 'reported_by',
            'refTableClass'     => 'Accounts',
            'refColumns'        => 'account_name'
        ),
        'Engineer' => array(
            'columns'           => 'assigned_to',
            'refTableClass'     => 'Accounts',
            'refColumns'        => 'account_name'
        ),
        'Verifier' => array(
            'columns'           => array('verified_by'),
            'refTableClass'     => 'Accounts',
            'refColumns'        => array('account_name')
        )
    );
}

class BugsProducts extends Zend_Db_Table_Abstract
{
    protected $_name = 'bugs_products';

    protected $_referenceMap    = array(
        'Bug' => array(
            'columns'           => array('bug_id'),
            'refTableClass'     => 'Bugs',
            'refColumns'        => array('bug_id')
        ),
        'Product' => array(
            'columns'           => array('product_id'),
            'refTableClass'     => 'Products',
            'refColumns'        => array('product_id')
        )
    );

}

Zend_Db_Table で UPDATE や DELETE の連鎖操作をエミュレートする場合は、 配列 $_dependentTables を親テーブルで宣言し、 従属しているテーブルをそこで指定します。 SQL でのテーブル名ではなく、クラス名を使用するようにしましょう。

注意:

RDBMS サーバが実装している参照整合性制約によって連鎖操作を行う場合は、 $_dependentTables を宣言しません。 詳細は 書き込み操作の連鎖 を参照ください。

各従属テーブルのクラス内で、配列 $_referenceMap を宣言します。これは、参照の "ルール" を定義する連想配列となります。 参照ルールとは、リレーションの親テーブルが何になるのか、 従属テーブルのどのカラムと親テーブルのどのカラムが対応するのかを示すものです。

ルールのキーを、配列 $_referenceMap のインデックスとして使用します。 このルールのキーは、各リレーションを指定する際に使用します。 わかりやすい名前をつけるようにしましょう。 あとでご覧いただくように、PHP のメソッド名の一部を使用するとよいでしょう。

上のサンプル PHP コードでは、Bugs テーブルクラスのルールのキーは 'Reporter''Engineer''Verifier' および 'Product' となります。

配列 $_referenceMap の各ルールエントリの内容もまた、連想配列です。 このルールエントリの内容について、以下で説明します。

  • columns => 文字列あるいは文字列の配列で、従属テーブル内での外部キー列の名前を指定します。

    たいていの場合はカラムはひとつだけですが、 複数カラムのキーとなるテーブルもあります。

  • refTableClass => 親テーブルのクラス名を指定します。 SQL テーブルの物理的な名前ではなく、クラス名を使用します。

    通常は、従属テーブルから親テーブルへの参照はひとつだけになります。 しかし、テーブルによっては同一の親テーブルへの参照を複数持つものもあります。 サンプルのデータベースでは、 bugs テーブルから products テーブルへの参照はひとつだけです。 しかし、bugs テーブルから accounts テーブルへの参照は三つあります。 それぞれの参照を、配列 $_referenceMap の個別のエントリとします。

  • refColumns => 文字列あるいは文字列の配列で、親テーブルの主キーのカラム名を指定します。

    たいていの場合はカラムはひとつだけですが、 複数カラムのキーとなるテーブルもあります。 複数カラムのキーを使用する場合は、 'columns' エントリでのカラムの順番と 'refColumns' エントリでのカラムの順番が一致する必要があります。

    この要素の指定は必須ではありません。 refColumns を省略した場合は、 親テーブルの主キーカラムをデフォルトで使用します。

  • onDelete => 親テーブルの行が削除されたときに実行する動作を指定します。詳細は 書き込み操作の連鎖 を参照ください。

  • onUpdate => 親テーブルで主キーカラムの値が更新されたときに実行する動作を指定します。詳細は 書き込み操作の連鎖 を参照ください。

従属行セットの取得

親テーブルに対するクエリの結果を Row オブジェクトとして取得すれば、 その行を参照している従属テーブルの行を取得することができます。 使用するメソッドは、次のようになります。

$row->findDependentRowset($table, [$rule]);

このメソッドは Zend_Db_Table_Rowset_Abstract オブジェクトを返します。 その中には、従属テーブル $table の行のうち、$row が指す行を参照しているものが含まれます。

最初の引数 $table には、 従属テーブルのクラス名を表す文字列を指定します。 文字列ではなく、テーブルクラスのオブジェクトで指定することもできます。

例1 従属行セットの取得

この例では、Accounts テーブルから取得した行オブジェクトについて、 その人が報告したバグを Bugs テーブルから探す方法を示します。

$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();

$bugsReportedByUser = $user1234->findDependentRowset('Bugs');

二番目の引数 $rule はオプションです。 これは、従属テーブルクラスの配列 $_referenceMap でのルールのキーの名前を指定します。 ルールを指定しなかった場合は、配列の中で その親テーブルを参照している最初のルールを使用します。 最初のもの以外のルールを使用する必要がある場合は、 キーを指定しなければなりません。

上の例のコードでは、ルールのキーを指定していません。 したがって、親テーブルにマッチする最初のルールをデフォルトで使用します。 ここでは 'Reporter' がそれにあたります。

例2 ルールを指定することによる従属行セットの取得

この例では、Accounts テーブルから取得した行オブジェクトについて、 修正担当者がその人になっているバグを Bugs テーブルから探す方法を示します。この例における、 このリレーションに対応する参照ルールのキーは 'Engineer' です。

$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();

$bugsAssignedToUser = $user1234->findDependentRowset('Bugs', 'Engineer');

条件や並び順の指定、行数の制限を追加するには、 親の行の select オブジェクトを使用します。

例3 Zend_Db_Table_Select による従属行セットの取得

この例では Accounts テーブルから行オブジェクトを取得し、 修正担当者がその人である Bugs を探し、 最大 3 件までを名前の順に取得します。

$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();
$select = $accountsTable->select()->order('name ASC')
                                  ->limit(3);

$bugsAssignedToUser = $user1234->findDependentRowset('Bugs',
                                                     'Engineer',
                                                     $select);
別の方法として、"マジックメソッド" を使用して従属テーブルの行を問い合わせることもできます。 以下のパターンのいずれかに該当するメソッドを Row オブジェクトでコールすると、 Zend_Db_Table_Row_AbstractfindDependentRowset('<TableClass>', '<Rule>') メソッドを実行します。

  • $row->find<TableClass>()

  • $row->find<TableClass>By<Rule>()

上のパターンにおいて、<TableClass> および <Rule> は、それぞれ 従属テーブルのクラス名、親テーブルとの参照関係を表す 従属テーブルのルールのキーとなります。

注意:

他のアプリケーションフレームワーク、たとえば Ruby on Rails などでは、いわゆる "inflection (語尾変化)" という仕組みを採用しているものもあります。 これにより、使用する状況に応じて識別子のスペルを変更できるようになります。 あまり複雑にならないようにするため、 Zend_Db_Table_Row ではこの仕組みを提供していません。 メソッドのコール時に指定するテーブルの ID やルールのキーは、 クラス名やキー名と正確に一致しなければなりません。

例4 マジックメソッドの使用による従属行セットの取得

この例では、先ほどの例と同じ従属行セットを見つける方法を示します。 今回は、テーブルとルールを文字列で指定するのではなく、 マジックメソッドを使用します。

$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();

// デフォルトの参照ルールを使用します
$bugsReportedBy = $user1234->findBugs();

// 参照ルールを指定します
$bugsAssignedTo = $user1234->findBugsByEngineer();

親の行の取得

従属テーブルに対するクエリの結果を Row オブジェクトとして取得すれば、 その従属行が参照している親テーブルの行を取得することができます。 使用するメソッドは、次のようになります。

$row->findParentRow($table, [$rule]);

従属テーブルに対応する親テーブルの行は、常にひとつだけです。 したがって、このメソッドは Rowset オブジェクトではなく Row オブジェクトを返します。

最初の引数 $table には、 親テーブルのクラス名を表す文字列を指定します。 文字列ではなく、テーブルクラスのオブジェクトで指定することもできます。

例5 親の行の取得

この例では、Bugs テーブルから (たとえば status が 'NEW' のものなどの) 行オブジェクトを取得し、そのバグを報告した人に対応する行を Accounts テーブルから探す方法を示します。

$bugsTable = new Bugs();
$bugsRowset = $bugsTable->fetchAll(array('bug_status = ?' => 'NEW'));
$bug1 = $bugsRowset->current();

$reporter = $bug1->findParentRow('Accounts');

二番目の引数 $rule はオプションです。 これは、従属テーブルクラスの配列 $_referenceMap でのルールのキーの名前を指定します。 ルールを指定しなかった場合は、配列の中で その親テーブルを参照している最初のルールを使用します。 最初のもの以外のルールを使用する必要がある場合は、 キーを指定しなければなりません。

上の例のコードでは、ルールのキーを指定していません。 したがって、親テーブルにマッチする最初のルールをデフォルトで使用します。 ここでは 'Reporter' がそれにあたります。

例6 ルールを指定することによる親の行の取得

この例では、テーブル Bugs から取得した行オブジェクトについて、 そのバグの修正担当者のアカウント情報を探す方法を示します。 このリレーションに対応する参照ルールのキーは 'Engineer' です。

$bugsTable = new Bugs();
$bugsRowset = $bugsTable->fetchAll(array('bug_status = ?', 'NEW'));
$bug1 = $bugsRowset->current();

$engineer = $bug1->findParentRow('Accounts', 'Engineer');

別の方法として、"マジックメソッド" を使用して親テーブルの行を問い合わせることもできます。 以下のパターンのいずれかに該当するメソッドを Row オブジェクトでコールすると、 Zend_Db_Table_Row_AbstractfindParentRow('<TableClass>', '<Rule>') メソッドを実行します。

  • $row->findParent<TableClass>([Zend_Db_Table_Select $select])

  • $row->findParent<TableClass>By<Rule>([Zend_Db_Table_Select $select])

上のパターンにおいて、<TableClass> および <Rule>() は、それぞれ 親テーブルのクラス名、親テーブルとの参照関係を表す 従属テーブルのルールのキーとなります

注意:

メソッドのコール時に指定するテーブルの ID やルールのキーは、 クラス名やキー名と正確に一致しなければなりません。

例7 マジックメソッドの使用による親の行の取得

この例では、先ほどの例と同じ親の行を見つける方法を示します。 今回は、テーブルとルールを文字列で指定するのではなく、 マジックメソッドを使用します。

$bugsTable = new Bugs();
$bugsRowset = $bugsTable->fetchAll(array('bug_status = ?', 'NEW'));
$bug1 = $bugsRowset->current();

// デフォルトの参照ルールを使用します
$reporter = $bug1->findParentAccounts();

// 参照ルールを指定します
$engineer = $bug1->findParentAccountsByEngineer();

多対多のリレーションを使用した行セットの取得

多対多のリレーションの片方のテーブル (この例では "元テーブル" と呼ぶことにします) に対するクエリの結果を Row オブジェクトとして取得すれば、もう一方のテーブル (この例では "対象テーブル" と呼ぶことにします) の対応する行を取得することができます。 使用するメソッドは、次のようになります。

$row->findManyToManyRowset($table,
                           $intersectionTable,
                           [$rule1,
                               [$rule2,
                                   [Zend_Db_Table_Select $select]
                               ]
                           ]);

このメソッドは Zend_Db_Table_Rowset_Abstract オブジェクトを返します。 その中には、テーブル $table の行のうち、多対多のリレーションを満たすものが含まれます。 元テーブルの行 $row を使用して中間テーブルの行を探し、 さらにそれを対象テーブルと結合します。

最初の引数 $table には、 多対多のリレーションの対象テーブルのクラス名を表す文字列を指定します。 文字列ではなく、テーブルクラスのオブジェクトで指定することもできます。

二番目の引数 $intersectionTable には、 多対多のリレーションの中間テーブルのクラス名を表す文字列を指定します。 文字列ではなく、テーブルクラスのオブジェクトで指定することもできます。

例8 多対多の形式の行セットの取得

この例では、元テーブル Bugs から取得した行オブジェクトについて、対象テーブル Products の行を探す方法を示します。 これは、そのバグに関連する製品を表すものです。

$bugsTable = new Bugs();
$bugsRowset = $bugsTable->find(1234);
$bug1234 = $bugsRowset->current();

$productsRowset = $bug1234->findManyToManyRowset('Products',
                                                 'BugsProducts');

三番目と四番目の引数 $rule1 および $rule2 はオプションです。 これは、中間テーブルの配列 $_referenceMap でのルールのキーの名前を表す文字列です。

$rule1 は、中間テーブルから元テーブルへのリレーションを表す ルールのキーです。この例では、BugsProducts から Bugs へのリレーションがそれにあたります。

$rule2 は、中間テーブルから対象テーブルへのリレーションを表す ルールのキーです。この例では、Bugs から Products へのリレーションがそれにあたります。

親や従属行を取得するメソッドと同様、もしルールを指定しなければ、 配列 $_referenceMap の中でそのリレーションに該当する最初のルールを使用します。 最初のもの以外のルールを使用する必要がある場合は、 キーを指定しなければなりません。

上の例のコードでは、ルールのキーを指定していません。 したがって、マッチする最初のルールをデフォルトで使用します。 ここでは、$rule1'Reporter'、 そして $rule2'Product' になります。

例9 ルールを指定することによる多対多の形式の行セットの取得

この例では、元テーブル Bugs から取得した行オブジェクトについて、対象テーブル Products の行を探す方法を示します。 これは、そのバグに関連する製品を表すものです。

$bugsTable = new Bugs();
$bugsRowset = $bugsTable->find(1234);
$bug1234 = $bugsRowset->current();

$productsRowset = $bug1234->findManyToManyRowset('Products',
                                                 'BugsProducts',
                                                 'Bug');

別の方法として、"マジックメソッド" を使用して多対多のリレーションの対象テーブルの行を問い合わせることもできます。 以下のパターンのいずれかに該当するメソッドをコールすると、 Zend_Db_Table_Row_AbstractfindManyToManyRowset('<TableClass>', '<IntersectionTableClass>', '<Rule1>', '<Rule2>') メソッドを実行します。

  • $row->find<TableClass>Via<IntersectionTableClass> ([Zend_Db_Table_Select $select])

  • $row->find<TableClass>Via<IntersectionTableClass>By<Rule1> ([Zend_Db_Table_Select $select])

  • $row->find<TableClass>Via<IntersectionTableClass>By<Rule1>And<Rule2> ([Zend_Db_Table_Select $select])

上のパターンにおいて、<TableClass> および <IntersectionTableClass> は、それぞれ 対象テーブルのクラス名および中間テーブルのクラス名となります。 また <Rule1> および <Rule2> は、それぞれ中間テーブルから元テーブル、 週間テーブルから対象テーブルへの参照を表すルールのキーとなります。

注意:

メソッドのコール時に指定するテーブルの ID やルールのキーは、 クラス名やキー名と正確に一致しなければなりません。

例10 マジックメソッドの使用による多対多の形式の行セットの取得

この例では、製品からの多対多のリレーションの 対象テーブルの行を見つける方法を示します。 そのバグに関連する製品を見つけます。

$bugsTable = new Bugs();
$bugsRowset = $bugsTable->find(1234);
$bug1234 = $bugsRowset->current();

// デフォルトの参照ルールを使用します
$products = $bug1234->findProductsViaBugsProducts();

// 参照ルールを指定します
$products = $bug1234->findProductsViaBugsProductsByBug();

書き込み操作の連鎖

注意: データベースでの DRI の宣言

Zend_Db_Table の連鎖操作を宣言するのは、 RDBMS が宣言参照整合性 (DRI) をサポートしていない場合 のみ を想定しています。

たとえば、MySQL の MyISAM ストレージエンジンや SQLite では DRI をサポートしていません。 このような場合は、Zend_Db_Table での連鎖操作の宣言が有用となるでしょう。

もし RDBMS が DRI の ON DELETE 句 および ON UPDATE 句を実装しているのなら、 データベーススキーマでそれを宣言すべきです。 Zend_Db_Table の連鎖機能を使ってはいけません。 RDBMS が実装する連鎖 DRI を使用したほうが、 データベースのパフォーマンスや一貫性、整合性の面で有利です。

もっとも重要なのは、RDBMSZend_Db_Table クラスの両方で同時に連鎖操作を宣言してはいけないということです。

親テーブルに対して UPDATE あるいは DELETE を行った際に、 従属テーブルに対して行う操作を指定することができます。

例11 連鎖削除の例

この例では Products テーブルの行を削除します。 その際に、Bugs テーブルの従属行も 自動的に削除するように設定されています。

$productsTable = new Products();
$productsRowset = $productsTable->find(1234);
$product1234 = $productsRowset->current();

$product1234->delete();
// 自動的に Bugs テーブルにも連鎖し、
// 従属する行が削除されます

同様に、UPDATE で親テーブルの主キーの値を変更した場合は、 従属テーブルの外部キーの値も自動的に新しい値に更新したくなることでしょう。 これにより、その参照を最新の状態にすることができます。

シーケンスなどの機能を用いて主キーを生成している場合は、 通常はその値を変更する必要はありません。しかし、 自然キー を使用している場合は、 値が変わる可能性もあります。そのような場合は、 従属テーブルに対して連鎖更新を行う必要があるでしょう。

Zend_Db_Table で連鎖リレーションを宣言するには、 $_referenceMap の中でのルールを編集し、 連想配列のキー 'onDelete' および 'onUpdate' に文字列 'cascade' (あるいは定数 self::CASCADE) を設定します。 親テーブルから行が削除されたり主キーの値が更新されたりする前に、 その行を参照している従属テーブルの行が まず削除あるいは更新されます。

例12 連鎖操作の宣言の例

以下の例では、Products テーブルのある行が削除されたときに、その行を参照している Bugs テーブルの行が自動的に削除されます。 参照マップのエントリの要素 'onDelete'self::CASCADE に設定されているからです。

以下の例では、親クラスの主キーの値が変更されても 連鎖更新は起こりません。これは、参照マップのエントリの要素 'onUpdate'self::RESTRICT に設定されているからです。'onUpdate' エントリ自体を省略しても同じ結果となります。

class BugsProducts extends Zend_Db_Table_Abstract
{
    ...
    protected $_referenceMap = array(
        'Product' => array(
            'columns'           => array('product_id'),
            'refTableClass'     => 'Products',
            'refColumns'        => array('product_id'),
            'onDelete'          => self::CASCADE,
            'onUpdate'          => self::RESTRICT
        ),
        ...
    );
}

連鎖操作に関する注意点

Zend_Db_Table が実行する連鎖操作はアトミックではありません。

つまり、もしデータベース自身が参照整合性制約を実装している場合、 Zend_Db_Table クラスが実行した連鎖 UPDATE がその制約と競合し、参照整合性に違反してしまうことになるということです。 Zend_Db_Table の連鎖 UPDATE を使用できるのは、 データベース側で参照整合性制約を設定していない場合 のみ です。

連鎖 DELETE に関しては、参照整合性に違反してしまう恐れはあまりありません。 従属行の削除は、参照する親の行が削除される前に アトミックでない処理として行うことができます。

しかしながら、UPDATE および DELETE のどちらについても、アトミックでない方法でデータを変更すると、 整合性がない状態のデータを他のユーザに見られてしまうというリスクが発生します。 たとえば、ある行とそのすべての従属行を削除することを考えましょう。 ほんの一瞬ですが、「従属行は削除したけれど親行はまだ削除していない」 という状態を他のクライアントプログラムから見られてしまう可能性があります。 そのクライアントプログラムは、従属行がない親行を見て、 それが意図した状態であると考えることでしょう。 クライアントが読み込んだデータが 変更の途中の中途半端な状態であることなど、知るすべもありません。

アトミックでない変更による問題を軽減するには、 トランザクションを使用してその変更を他と隔離します。 しかし RDBMS によってはトランザクションをサポートしていないものもありますし、 まだコミットされていない "ダーティな" 変更を他のクライアントから見られるようにしているものもあります。

Zend_Db_Table の連鎖処理は Zend_Db_Table からのみ実行できます。

Zend_Db_Table クラスで定義した連鎖削除や更新は、Row クラスで save() メソッドあるいは delete() メソッドを実行した際に適用されます。 しかし、クエリツールや別のアプリケーションなどの 別ルートでデータを更新あるいは削除した場合は、 連鎖操作は発生しません。Zend_Db_Adapter クラスの update() メソッドや delete() メソッドを実行したとしても、Zend_Db_Table で定義した連鎖操作は実行されません。

連鎖 INSERT はありません。

連鎖 INSERT はサポートしていません。 親テーブルに行を追加したら、 従属テーブルへの行の追加は別の処理として行う必要があります。

Previous Next
Zend Framework の紹介
概要
インストール
Learning Zend Framework
Zend Framework Quick Start
Zend Framework & MVC Introduction
Create Your Project
Create A Layout
Create a Model and Database Table
Create A Form
Congratulations!
Autoloading in Zend Framework
Introduction
Goals and Design
Basic Autoloader Usage
Resource Autoloading
Conclusion
Plugins in Zend Framework
Introduction
Using Plugins
Conclusion
Getting Started with Zend_Layout
Introduction
Using Zend_Layout
Zend_Layout: Conclusions
Getting Started Zend_View Placeholders
Introduction
Basic Placeholder Usage
Standard Placeholders
View Placeholders: Conclusion
Understanding and Using Zend Form Decorators
Introduction
Decorator Basics
Layering Decorators
Rendering Individual Decorators
Creating and Rendering Composite Elements
Conclusion
Getting Started with Zend_Session, Zend_Auth, and Zend_Acl
Building Multi-User Applications With Zend Framework
Managing User Sessions In ZF
Authenticating Users in Zend Framework
Building an Authorization System in Zend Framework
Getting Started with Zend_Search_Lucene
Zend_Search_Lucene Introduction
Lucene Index Structure
Index Opening and Creation
Indexing
Searching
Supported queries
Search result pagination
Getting Started with Zend_Paginator
Introduction
Simple Examples
Pagination Control and ScrollingStyles
Putting it all Together
Zend Framework リファレンス
Zend_Acl
導入
アクセス制御の洗練
高度な使用法
Zend_Amf
導入
Zend_Amf_Server
Zend_Application
導入
Zend_Application クイックスタート
Theory of Operation
コア機能
利用できるリソースプラグイン
Zend_Auth
導入
データベースのテーブルでの認証
ダイジェスト認証
HTTP 認証アダプタ
LDAP 認証
Open ID 認証
Zend_Barcode
導入
Barcode creation using Zend_Barcode class
Zend_Barcode Objects
Zend_Barcode Renderers
Zend_Cache
導入
キャッシュの仕組み
Zend_Cache のフロントエンド
Zend_Cache のバックエンド
The Cache Manager
Zend_Captcha
導入
Captcha の方法
CAPTCHA アダプタ
Zend_CodeGenerator
導入
Zend_CodeGeneratorサンプル
Zend_CodeGenerator リファレンス
Zend_Config
導入
動作原理
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
導入
Getopt の規則の宣言
オプションおよび引数の取得
Zend_Console_Getopt の設定
Zend_Controller
Zend_Controller クイックスタート
Zend_Controller の基本
フロントコントローラ
リクエストオブジェクト
標準のルータ
ディスパッチャ
アクションコントローラ
アクションヘルパー
レスポンスオブジェクト
プラグイン
モジュラーディレクトリ構造の規約の使用
MVC での例外
Zend_Currency
Zend_Currency について
Using Zend_Currency
Options for currencies
What makes a currency?
Where is the currency?
How does the currency look like?
How much is my currency?
Calculating with currencies
Exchanging currencies
Additional informations on Zend_Currency
Zend_Date
導入
動作原理
基本メソッド
Zend_Date API の概要
日付の作成
日付関数全般用の定数
動作例
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
導入
Zend_Db_Table_Definition
Zend_Debug
変数の出力
Zend_Dojo
導入
Zend_Dojo_Data: dojo.data エンベロープ
Dojo ビューヘルパー
Dojoフォーム要素とデコレーター
Zend_Dojo build layer support
Zend_Dom
導入
Zend_Dom_Query
Zend_Exception
例外の使用法
基本的な使用法
Previous Exceptions (前の例外)
Zend_Feed
導入
フィードの読み込み
ウェブページからのフィードの取得
RSS フィードの使用
Atom フィードの使用
単一の Atom エントリの処理
フィードおよびエントリの構造の変更
独自のフィードクラスおよびエントリクラス
Zend_Feed_Reader
Zend_Feed_Writer
Zend_Feed_Pubsubhubbub
Zend_File
Zend_File_Transfer
Zend_File_Transfer 用のバリデータ
Filters for Zend_File_Transfer
Zend_Filter
導入
標準のフィルタクラス群
フィルタチェイン
フィルタの書き方
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Zend_Form クイックスタート
Zend_Form_Element を用いたフォーム要素の作成
Zend_Form によるフォームの作成
Zend_Form_Decorator による独自のフォームマークアップの作成
Zend Framework に同梱されている標準のフォーム要素
Zend Framework に同梱されている標準のデコレータ
Zend_Form の国際化
Zend_Form の高度な使用法
Zend_Gdata
導入
AuthSub による認証
Using the Book Search Data API
ClientLogin による認証
Google Calendar の使用法
Google Documents List Data API の使用法
Using Google Health
Google Spreadsheets の使用法
Google Apps Provisioning の使用法
Google Base の使用法
Picasa Web Albums の使用法
YouTube Data API の使用法
Gdata の例外処理
Zend_Http
導入
Zend_Http_Client - 高度な使用法
Zend_Http_Client - 接続アダプタ
Zend_Http_Cookie および Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
導入
Zend_Json
導入
Basic Usage
Zend_Json の高度な使用法
XML から JSON への変換
Zend_Json_Server - JSON-RPCサーバー
Zend_Layout
導入
Zend_Layout クイックスタート
Zend_Layout の設定オプション
Zend_Layout の高度な使用法
Zend_Ldap
導入
API概要
利用シナリオ
ツール
Zend_Ldap_Nodeを使用してLDAPツリーへのオブジェクト指向アクセス
LDAPサーバから情報を取得
LDIFへ、または、からのLDAPデータシリアライズ
Zend_Loader
ファイルやクラスの動的な読み込み
The Autoloader
Resource Autoloaders
プラグインのロード
Zend_Locale
導入
Zend_Locale の使用法
正規化および地域化
日付および時刻の扱い
サポートするロケール
Zend_Log
概要
ライター
フォーマッタ
フィルタ
Using the Factory to Create a Log
Zend_Mail
導入
SMTP 経由での送信
SMTP 接続による複数のメールの送信
異なる転送手段の使用
HTML メール
ファイルの添付
受信者の追加
MIME バウンダリの制御
追加のヘッダ
文字セット
エンコーディング
SMTP 認証
セキュアな SMTP トランスポート
メールメッセージの読み込み
Zend_Markup
導入
さあ始めましょう
Zend_Markup パーサー
Zend_Markup レンダラー
Zend_Measure
導入
計測値の作成
計測値の出力
計測値の操作
計測値の型
Zend_Memory
概要
メモリマネージャ
メモリオブジェクト
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_Navigation
導入
画面
Containers
Zend_Oauth
Introduction to OAuth
Zend_OpenId
導入
Zend_OpenId_Consumer の基本
Zend_OpenId_Provider
Zend_Paginator
導入
使用法
設定
高度な使用法
Zend_Pdf
導入
PDF ドキュメントの作成および読み込み
PDF ドキュメントへの変更内容の保存
ページの操作
描画
Interactive Features
ドキュメントの情報およびメタデータ
Zend_Pdf モジュールの使用例
Zend_ProgressBar
Zend_ProgressBar
Zend_Queue
導入
使用例
フレームワーク
アダプタ
Zend_Queueのカスタマイズ
Stomp
Zend_Reflection
導入
Zend_Reflectionサンプル
Zend_Reflectionリファレンス
Zend_Registry
レジストリの使用法
Zend_Rest
導入
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
概要
インデックスの構築
インデックスの検索
クエリ言語
クエリ作成用の API
文字セット
拡張性
Java Lucene との相互運用
応用
ベストプラクティス
Zend_Serializer
Introduction
Zend_Serializer_Adapter
Zend_Server
導入
Zend_Server_Reflection
Zend_Service
導入
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Amazon_Ec2
Zend_Service_Amazon_Ec2: Instances
Zend_Service_Amazon_Ec2: Windows Instances
Zend_Service_Amazon_Ec2: Reserved Instances
Zend_Service_Amazon_Ec2: CloudWatch Monitoring
Zend_Service_Amazon_Ec2: Amazon Machine Images (AMI)
Zend_Service_Amazon_Ec2: Elastic Block Storage (EBS)
Zend_Service_Amazon_Ec2: Elastic IP Addresses
Zend_Service_Amazon_Ec2: Keypairs
Zend_Service_Amazon_Ec2:リージョンおよび利用可能ゾーン
Zend_Service_Amazon_Ec2: Security Groups
Zend_Service_Amazon_S3
Zend_Service_Amazon_Sqs
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_DeveloperGarden
Zend_Service_Flickr
Zend_Service_LiveDocx
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
導入
Zend_Service_StrikeIron
Zend_Service_StrikeIron: バンドルされているサービス
Zend_Service_StrikeIron: 応用編
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_WindowsAzure
Zend_Service_Yahoo
Zend_Session
導入
基本的な使用法
高度な使用法
グローバルセッションの管理
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDLアクセッサ
自動検出
Zend_Tag
導入
Zend_Tag_Cloud
Zend_Test
導入
Zend_Test_PHPUnit
Zend_Test_PHPUnit_Db
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
導入
Zend_TimeSync の動作
Zend_Tool
Using Zend_Tool On The Command Line
Extending Zend_Tool
Zend_Tool_Framework
導入
CLIツールの使用
アーキテクチャ
Zend_Tool_Frameworkを利用してプロバイダを作成する
出荷されたシステムプロバイダー
Extending and Configuring Zend_Tool_Framework
Zend_Tool_Project
導入
プロジェクトを作成
Zend Toolプロジェクトプロバイダー
Zend_Tool_Project内部
Zend_Translate
導入
Zend_Translate のアダプタ
翻訳アダプタの使用法
ソースファイルの作成
翻訳用の追加機能
Plural notations for Translation
Zend_Uri
Zend_Uri
Zend_Validate
導入
標準のバリデーションクラス群
バリデータチェイン
バリデータの書き方
検証メッセージ
Zend_Version
Zend Framework のバージョンの取得
Zend_View
導入
コントローラスクリプト
ビュースクリプト
ビューヘルパー
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
導入
Zend_XmlRpc_Client
Zend_XmlRpc_Server
ZendX_Console_Process_Unix
ZendX_Console_Process_Unix
ZendX_JQuery
Introduction
ZendX_JQuery View Helpers
ZendX_JQuery Form Elements and Decorators
Zend Framework のシステム要件
導入
Zend Framework 移行上の注意
Zend Framework 1.10
Zend Framework 1.9
Zend Framework 1.8
Zend Framework 1.7
Zend Framework 1.6
Zend Framework 1.5
Zend Framework 1.0
Zend Framework 0.9
Zend Framework 0.8
Zend Framework 0.6
Zend Framework PHP 標準コーディング規約
概要
PHP ファイルの書式
命名規約
コーディングスタイル
Zend Framework Documentation Standard
Overview
Documentation File Formatting
Recommendations
Zend Framework MVC アプリケーションのために推奨されるプロジェクト構造
概要
推奨されるプロジェクト・ディレクトリ構造
モジュール構造
リライト設定ガイド
Zend Framework パフォーマンスガイド
導入
クラスの読み込み
Zend_Dbパフォーマンス
国際化(i18n)とローカライズ(l10n)
ビューのレンダリング
著作権に関する情報