簡體   English   中英

將外部腳本與Zend Framework集成

[英]Integrating external scripts with Zend Framework

將外部腳本集成到Zend Framework的最佳方法是什么? 讓我解釋一下,因為我可能會以錯誤的方式問這個問題。 我有一個下載和解析XML文件的腳本。 此腳本作為每日cron作業運行,需要將其數據轉儲到數據庫中。

我在使用此腳本的站點上使用Zend Framework,在我看來,最好使用我的Zend_Db_Abstract子類模型來添加和更新數據庫。 怎么去做這個? 我的腳本是否在Zend Components旁邊的庫中(即library / Mine / Xmlparse.php),因此可以訪問各種ZF組件? 我只需要在文件本身中包含正確的模型文件和Zend DB組件嗎? 處理這種集成的最佳方法是什么?

是的,您應該放置自己的類,這些類可能繼承Zend Framework類,或者將更多的類添加到庫中Zend Framework文件夾旁邊的自己的文件夾中。

當您啟用Zend_Loader的自動加載時,類名將自動映射到您創建的類,例如:

My_Db_Abstract will map to My/Db/Abstract.php .

在庫目錄中,您應該在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命名約定。 這意味着兩件事:

  • 如果擴展現有ZF類,則復制ZF文件夾結構,以使文件具有相同的路徑和名稱,但庫名稱除外。 例如/library/Zend/Db/Abstract.php => /library/Project/Db/Abstract.php。
  • 如果您編寫自己的類,仍然堅持自動加載器的ZF命名約定來查找它們。

作為ZF noob我自己,我想我理解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包含路徑
  • 創建了綁定到配置文件的ApplicationBootstrap對象

可能有點不清楚如何最好地利用我們在這種背景下獲得的大多數ZF善良,並希望在另一種背景下。

我想我對原始問題的回答是通常的入口點序列

http請求 - > .htaccess - > index.php - > config

為我們設置了很多環境,我們需要為不同的入口路徑復制一些環境。

因此,對於您的腳本,我的第一直覺是創建一個公共包含文件,該文件反映了index.php中發生的大部分內容 - 設置包含路徑,APPLICATION_PATH,實例化並調用引導程序,然后執行特定於腳本的處理。

更好的是,可能需要為所有腳本創建單個入口點,就像我們在http / web上下文中那樣。 擴展Zend_Application以用於您自己的腳本目的,以便$application->run(); 不再啟動MVC路由器 - 控制器 - 調度處理,而是做自己的事情。 這樣,這個單一的腳本入口點看起來幾乎與Web入口點相同,唯一的區別是應用程序對象被實例化。 然后將所需Application類的名稱作為命令行參數傳遞給腳本。

但在這里,我承認不那么自信,只是拋出想法。

希望這一切對某人有幫助。 它實際上幫助我把它寫下來。 謝謝,歡呼!

更新2009-09-29:剛看過這篇文章: 從命令行使用Zend Framework

更新2009-11-20:另一篇文章: Zend Framework中的Cron工作 GS設計

更新2010-02-25: 使用Zend應用程序輕松命令行腳本--David Caunt

我剛剛遇到了一些可能與這個問題密切相關的事情。 這篇IBM developerWorks文章。

作者建議只在ZF層次結構中創建一個腳本文件夾,並將其用作ZF中通常使用的腳本文件夾(盡管他確實設置了ini路徑並調用了自動加載)。 這么簡單嗎? 是否只是在框架的層次結構中,並包括路徑和自動加載器授予您的腳本訪問所有的好東西?

我不是100%肯定你要問的是什么,但我會盡力幫助。 如果你在任何時候在你的php include路徑中添加對“/ path / to / zend / framework”的引用,那么你實際上已經啟用了Zend Framework。 如果你這樣做:

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

然后在腳本的任何一點,您幾乎可以創建新的Zend Framework對象,Zend_Loader將處理其余的。

Zend Framework的一大優點是不強迫你以某種方式做事。 這就是為什么有時候有幾種方法可以完成同樣的事情。 所以,如果你覺得你需要讓你的腳本使用Zend Framework只是為了這樣做,這不是真的有必要。 但是如果你認為它可能會以某種方式改進你的腳本,那就去吧。

我通常把我認為可以在庫中的自定義文件夾中的項目中使用的自定義內容。 所以我有一個庫/ Ak33m文件夾,其腳本可能在框架之外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM