2011-12-30 96 views
0

在我的zend框架應用程序啓動並運行之前,我需要運行一次php腳本。這通過在我的/public/index.php中調用這個初始腳本來實現,但是腳本也可以爲所有後續的zend框架頁面請求運行。我需要這個腳本只在初始請求中運行一次,而不是在通過ajax加載額外頁面時再次運行。在引導之前加載Zend框架之外的PHP腳本

我最初的嘗試均設置一些PHP常量在/public/index.php文件像這樣:

如果(!定義( 'SOME_VAR'))require_once「路徑/到/腳本/到/運行/once.php'; define('SOME_VAR','1);

但是,當通過ajax加載另一個頁面時,即使我已經定義了'SOME_VAR',它仍然不會保留並保持定義狀態,並且腳本會再次執行。

我使用Zend Framework 1.11,Apache(Xampp)。

執行此腳本AFTER Zend已被引導並運行(在Zend Framework內部)不是一個選項。

+0

有人請告訴他關於上下文。 – Layke 2011-12-30 20:35:58

回答

1

常量不起作用,因爲它們只在請求期間存在。

聽起來好像你想知道當前請求是一個常規請求還是一個XmlHttpRequest(AJAX)請求。

你可以在你的index.php頂部嘗試是這樣的:一旦你特殊代碼已運行

<?php 
define('IS_AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 

if (! IS_AJAX_REQUEST){ 
    // run your code. 
} 

如果您正在使用的會話,你也可以只設置會話標誌,併爲此進行測試。

+0

感謝您對常數的解釋。如果請求不是Ajax,我的問題仍然存在?應該有一些「Zend like」的方式來觸發外部腳本,只設置一些前端HTML,然後繼續執行zend所做的事情。 – whitespy9 2011-12-30 23:12:02

+0

@whitespy:如果外部腳本的要點是將一些html呈現在輸出中,那麼它聽起來並不像在引導之前真的需要發生。在這種情況下,可以通過前端控制器插件,動作助手或佈局視圖腳本本身對佈局視圖腳本進行更改 - 就足夠了。還是有其他原因需要在引導之前進行外部處理? – 2011-12-31 08:14:54

+0

@DavidWeinraub:腳本還有很多其他的功能(認證,渲染鏈接等),但最終的結果是顯示一些動態html。我知道在引導之後這會更好,但我現在要儘量避免這種情況。在zf w/layouts/action助手中重新創建這個腳本將會比它值得的工作多得多。 – whitespy9 2012-01-02 13:32:15

1

按照Zend Framework Documentation

但是,如果定製的初始化是必要的,你有兩個選擇。首先,您可以編寫以_init爲前綴的方法來指定離散代碼以進行引導。這些方法將由bootstrap()調用,並且也可以像調用公共方法一樣調用:bootstrap()。他們應該接受一組可選的選項。 如果您的資源方法返回一個值,它將被存儲在引導程序的容器中。當不同的資源需要交互時(例如一個資源注入另一個資源),這可能很有用。然後可以使用方法getResource()來檢索這些值。

另一種選擇是使用資源插件。資源的插件是執行特定的初始化的對象,並且可以指定:

  • 當實例化Zend_Application對象
  • 在引導對象的初始化
  • 通過經由方法明確地使他們調用到引導對象

資源插件實現Zend_Application_Resource_ResourceAbstract,它定義了它們允許注入調用者和選項,並且它們具有init()方法。