4

外部スクリプトを Zend Framework に統合する最良の方法は何ですか? 聞き方が悪いかもしれないので説明します。XML ファイルをダウンロードして解析するスクリプトがあります。毎日の cron ジョブとして実行されるこのスクリプトは、そのデータをデータベースにダンプする必要があります。

Zend_Db_Abstractこのスクリプトを使用するサイトに Zend Framework を使用していますが、データベースの追加と更新を行うには、サブクラス化されたモデルを使用するのが最善であるように思われます。これを行うにはどうすればよいですか?私のスクリプトは、Zend コンポーネントの隣のライブラリ (つまり、library/Mine/Xmlparse.php) に入るので、さまざまな ZF コンポーネントにアクセスできますか? ファイル自体に正しいモデル ファイルと Zend DB コンポーネントを含めるだけでよいのでしょうか? この種の統合を処理する最善の方法は何ですか?

4

6 に答える 6

3

はい、Zend Framework クラスを継承する可能性のある独自のクラスを配置するか、ライブラリの Zend Framework フォルダーの隣にある独自のフォルダーにクラスを追加する必要があります。

Zend_Loader の自動読み込みを有効にすると、クラス名は作成したクラスに自動的にマップされます。

My_Db_Abstract will map to My/Db/Abstract.php .
于 2008-11-20T15:52:54.513 に答える
2

ライブラリ ディレクトリには、Zend ライブラリ フォルダの隣に独自のライブラリが必要です。何と呼んでも (Mylib、Project など)、Zend Autoloader に含める必要があります。これは次のように行います。

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Project_');
$loader->setFallbackAutoloader(true);
if ($configSection == 'development')
{
    $loader->suppressNotFoundWarnings(false);
}

ライブラリを ZF および Autoloader と適切に統合するには、ZF の命名規則に従う必要があります。これは、次の 2 つのことを意味します。

  • 既存の ZF クラスを拡張する場合は、ZF フォルダ構造を複製して、ライブラリ名を除いてファイルのパスと名前が同じになるようにします。例 /library/Zend/Db/Abstract.php => /library/Project/Db/Abstract.php.
  • 独自のクラスを作成する場合でも、オートローダーがクラスを見つけるために ZF の命名規則に従ってください。
于 2009-09-28T06:25:17.877 に答える
1

私自身、ZF初心者として、OPが理解しようとしていることのいくつかを理解していると思います。それで、私が理解していることを少し説明します。これは、OP(または、元の質問が非常に古く、OPがZFになっていることを想像しているため、将来の読者に役立つ可能性が高い)のいずれかに役立つことを願っています。達人)。

ZFは主に「自由に使用」できると主張しているため、Zend_Application、Zend_Bootstrapクラス、MVCアプローチ全体などの構造全体を購入する必要はありません。

さらに、簡単な自動読み込みを可能にするクラスの命名とファイルの場所の規則を理解しています。例:class App_Model_UserフォルダにありますApp/Model/User.php

混乱を招く可能性があるのは、スクリプトコンテキストでは、まだ行っていないことだと思います。

  • すべてのリクエストをにプッシュする.htaccessマジックを実行しましたpublic/index.php
  • APPLICATION_PATHにパスを設定して含めるpublic/index.php
  • 構成ファイルに関連付けられたApplicationまたはオブジェクトを作成しましたBootstrap

そのコンテキストで得られ、別のコンテキストで必要なZFの良さのほとんどをどのように活用するのが最善かは、少し不明確になる可能性があります。

元の質問に対する私の答えは、通常のエントリポイントシーケンスは

httpリクエスト->.htaccess->index.php-> config

私たちのために私たちの環境の多くをセットアップします、私たちは異なるエントリーパスのためにそれのいくつかを複製する必要があるでしょう。

したがって、スクリプトの場合、私の最初の本能は、index.phpで発生することの多くを反映する共通のインクルードファイルを作成することです。インクルードパス、APPLICATION_PATHを設定し、ブートストラップをインスタンス化して呼び出し、スクリプト固有の処理を実行します。 。

さらに良いことに、http / webコンテキストで行うように、すべてのスクリプトに対して単一のエントリポイントを作成することが望ましい場合があります。独自のスクリプト目的でZend_Applicationを拡張$application->run();して、MVC router-controller-dispatch処理を開始せず、独自の処理を実行するようにします。このように、この単一のスクリプトエントリポイントはWebエントリポイントとほぼ同じに見えますが、唯一の違いは、インスタンス化されるアプリケーションオブジェクトです。次に、目的のアプリケーションクラスの名前をコマンドラインパラメータとしてスクリプトに渡します。

しかし、ここで私は自信がなく、ただアイデアを捨てることを告白します。

これがすべて誰かを助けることを願っています。それは実際に私がそれをすべて書き留めるのを助けました。ありがとう、乾杯!

更新2009-09-29:この記事に出くわしました:コマンドラインからのZendFrameworkの使用

アップデート2009-11-20:そして別の記事:ZendFrameworkのcronジョブ| GSデザイン

アップデート2010-02-25: Zendアプリケーションを使用した簡単なコマンドラインスクリプト-David Caunt

于 2009-09-28T06:11:33.333 に答える
1

私は通常、プロジェクト全体で使用できると思われるカスタムのものをライブラリのカスタム フォルダーに入れます。そのため、フレームワークの外部にある可能性のあるスクリプトを含む library/Ak33m フォルダーがあります。

于 2008-11-20T13:59:02.263 に答える
1

この質問に関連する可能性のあるものに出くわしました。この IBM developerWorks の記事。

著者は、単純に ZF 階層にスクリプト フォルダを作成し、ZF 内で通常行うようにそれを使用することを推奨しています (ただし、ini パスを設定して autoload を呼び出します)。そんなに簡単ですか?フレームワークの階層に存在し、パスとオートローダーを含めるだけで、スクリプトはすべての機能にアクセスできるようになりますか?

于 2008-11-20T04:34:31.747 に答える
1

あなたが何を尋ねようとしているのか 100% わかりませんが、できる限りお手伝いします。任意の時点で "/path/to/zend/framework" への参照を php インクルード パスに追加すると、本質的に Zend フレームワークが有効になります。そこから、次のようにします。

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

その後、スクリプトの任意の時点で新しい Zend Framework オブジェクトを作成するだけで、残りは Zend_Loader が処理します。

ただし、Zend Framework の重要な点の 1 つは、特定の方法を強制しないことです。そのため、同じことを達成するために複数の方法が存在する場合があります。そのため、単にスクリプトに Zend Framework を使用させる必要があると感じた場合、これは実際には必要ありません。しかし、何らかの方法でスクリプトが改善される可能性があると思われる場合は、それを実行してください。

于 2008-11-20T10:06:56.570 に答える