2012-04-24 9 views
1

MVC構造体なしでいくつかのZendコンポーネントを使用しようとしています。例えば、私は、このディレクトリ構造を持っている場合:MVCなしでZend_Dbコンポーネントを使用する

  • /
  • /Zendの
  • /画像
  • /css

    ( 'Zend/Db.php'); $ db = Zend_Db :: factory($ db_config ['adapter']、$ db_config); //私はこのような構造を持つようにしたい場合は、

しかしを使用する準備ができて:

  • /
  • /画像
  • /libに
    • Zendの
    • OtherLib
  • /CSS

    ( 'のLib/Zendの/をdb.php')を含みます。 $ db = Zend_Db :: factory($ db_config ['adapter']、$ db_config);/Zendの私は、すべての中にはZend_Dbクラスにアクセスすることができますどのように代わりのlib/Zendの

    の:他のファイルとクラスを見ているので、//ここ

しかしを使用する準備ができて、それが失敗しました私のファイル、フォルダレベルとは関係なく?

ありがとうございます!

答えて

4

include_pathLib/Zendディレクトリを追加することをおすすめします。これを行うと、Zendクラスが適切に読み込まれるようになります。以下のような

何か:

set_include_path(implode(PATH_SEPARATOR, array(
    '/path/to/Lib', // <-- change this to the actual path where the Zend dir is uploaded 
    get_include_path(), 
))); 

これはinclude_pathの中に最初のパスとしてLibディレクトリを追加します。他のライブラリファイルをさらに含める場合は、get_include_path()の後に移動して、既存のパスを最初に検索することができます。

また、手動であなたは、例えばLib/Zend/Db.phpLib/Zend/Db/Pdo/Mysql.phpなどを使用することになりますが、これは私はinclude_pathの方法で行くだろう忘れて退屈で簡単にすることができます知っているZendのファイルを必要とする可能性があります。

+0

私の質問にお答えします!私はすべてのファイルにconfig.phpファイルを含んでいます。 (1行目)。これは、コードである: set_include_path(破(PATH_SEPARATOR、アレイ( $ _SERVER [ 'DOCUMENT_ROOT'] '/ libに/ Zendの' get_include_path()、 )))。 には 'Zend_Db.php'が含まれます。 (インクルード失敗)なぜですか? – mauriblint

1

あなたのパス(ないLib/Zend)を含むようにLibディレクトリを追加する必要があります

set_include_path(
    $_SERVER['DOCUMENT_ROOT'].'/Lib' . PATH_SEPARATOR . 
    get_include_path() 
); 

あなたがそれらを必要とした後、クラスを使用することができます。

require_once 'Zend/Db.php'; 
$db = Zend_Db::factory($db_config['adapter'], $db_config); 

あなたはそのコメントで言ったので、すべてのスクリプトに共通のconfig.phpファイルが含まれているので、これを使用してZFオートローダーをセットアップすると、すべての作業が大幅に簡単になります(インクルードパスを設定した後に置く)。

require_once 'Zend/Loader/Autoloader.php'; 
$autoloader = Zend_loader_Autoloader::getInstance(); 

その後、他のZFファイルを含める必要がないので、クラスを必要に応じてインスタンス化するだけです。同じオートローダーを使用して、独自のクラスをlibからロードすることも、他のライブラリーのクラスをロードすることもできます。 ZFは、今、あなたはそれが自動的にあなたのための自動ロードされます任意のZFコンポーネントを自由に呼び出すことができます

require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

を行う*初期化するために

+0

ありがとう、それは今働いている..しかし私はもう一つ質問があります。私がZend_AutoLoaderを使用し、Zend_Dbのインスタンスを作成すると、$ db = new Zend_Db;私はデータベースの設定、テーブル、ホスト、パスワードなどを設定します。 – mauriblint

+0

Zend_Dbのインスタンスを作成する必要はありません。以前と同じようにZend_Db :: factoryを呼び出してください。未知のクラスを呼び出すとオートローダーが起動し、Zend/Db.phpが必要になります。 –

+0

オハイオ州それは素晴らしいです!本当にありがとう!! Autoloader Class、すべてのクラスをロードしますか?私がそれらのすべてを使用しないなら、それは不必要ではありませんか? – mauriblint

0

* Libディレクトリは、PHPインクルードパスの一部である必要があります。言及どおりに簡単に行うことができます

set_include_path(implode(PATH_SEPARATOR, array(
    '/path/to/Lib', // <-- change this to the actual path where the Zend dir is uploaded 
    get_include_path(), 
))); 
関連する問題