2013-03-20 88 views
2

我有一個控制器IndexController.php其中動作是這樣的如何從獨立的php文件調用zend控制器操作?

class IndexController extends CustomControllerAction { 


public function preDispatch() { 


    if (!$this->view->authenticated) { 


     $this->_redirect('/users/login'); 


    } 


} 

public function indexemailAction() { 

    //somecode which calculates certain things 

} 

}

現在,我需要調用IndexController.php內的行動「indexmailAction」一個獨立的PHP文件

php文件是indextest.php

<?php 
    //Need to write some code to call indexmailAction in IndexController.php 

?> 

我應該在這個文件寫......

在此先感謝

+0

您創建幫助程序並將其稱爲任何地方 – 2013-03-20 04:48:48

+0

「獨立php文件」是什麼意思?一個模型 ?一個看法 ?另一控制器?或者它甚至不在同一個應用程序中? – redmoon7777 2013-03-20 04:53:59

回答

0

控制器旨在用於MVC,而不是腳本。您的控制器應該組裝請求變量,將它們指向模型並返回某種類型的HTTP響應。您的腳本應直接在模型上進行操作。

無論如何,如果你堅持,你可以實例化一個控制器類,並像其他任何類一樣調用方法,只要你注入了MVC可能擁有的任何依賴。

+0

比你在這個意義上非常much.Independent文件是指一個文件,該文件是不是application.It內會以.php文件。這個文件應該調用動作無論是從控制器或模型.... – 2013-03-20 05:05:15

+0

我會怎麼做這通過從模型直接調用? – 2013-03-20 05:06:54

+0

你不這樣做,它不是這樣操作的。所以如果你想這樣做,你需要自己弄清楚,因爲你不會找到一篇博客文章,告訴你如何做錯什麼。 – 2013-03-20 05:09:51

0

您不應該爲此調用控制器操作,您的邏輯應該駐留在模型中。然後,您可以創建模型的新實例並調用適當的方法。例如:

require_once '/path/to/mymodel.php'; 
$mymodel = new Mymodel(); 
$data = $mymodele->fetchAll(); 

PS:也許你應該考慮創建一個RESTful API來處理來自應用程序的外線電話

UPDATE的:

好了,我現在看你需要什麼,最好的實現它的方式是調用url而不是文件(例如website.com/emails/send),如果您擔心安全性問題,則可以使用預共享密鑰來確保請求來自您,並將其與請求一起發送並檢查你的行動是否正確。

+0

其實,我需要做的自動電子郵件功能,在電子郵件應在特定time.All邏輯每天去都包含在我的controller.Thats爲什麼我有點confused..I都寫在mapper.Do我所有必要的查詢需要內部模型寫入或mapper..I我不確定this..thanks – 2013-03-20 05:25:25

+0

如何與模型做到這一點呢?這是zend.If的一部分,我稱之爲PHP核心文件中像indexTest.php,怎麼會變成這樣工作? – 2013-03-20 05:41:32

+0

require_once'/path/to/mymodel.php'; $ mymodel = new Mymodel(); $ data = $ mymodele-> fetchAll();我應該在'/path/to/mymodel.php'中包含什麼? – 2013-03-20 05:49:39

0

如果你想在你的行動在多個地方使用的邏輯,那麼就應該在一個動作助手或者非常通用的代碼,然後在自定義庫(/庫/自/)

注意:認證在每個控制器中更適合插件而不是預調度方法。

1

我知道這已經過了幾年了,這可能不是類/函數的預期用途,但我發現以下在從命令行調用的隔離文件中非常有用。

這對我解決的問題是,它消除了Apache進程的產卵。該解決方案非常好,因爲我可以通過URL訪問需要的一些控制器/操作。

在幾乎所有基於ZF1的應用程序中,您都可以複製索引文件並保持所有內容相同,只是註釋掉以下行。

$application->run(); 

你可以使用自動加載機等訪問這條線以下的任何東西。它很粗糙,但它的工作原理。不幸的是,你很快就會發現自己只能有限地訪問你的應用程序所擁有的大量文件,而感覺唯一可以訪問所需文件的方式是通過Controller/Action。

相反,我使用下面$應用程序 - 一個新的文件,下面>自舉()(還是去掉$應用程序 - >運行()):

$front = Zend_Controller_Front::getInstance(); 

// You can put more here if you use non-default modules 
$front->setControllerDirectory(array(
     'default' => APPLICATION_PATH.'/controllers' 
)); 

$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); 
$viewRenderer->setNeverRender(true); 

Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); 

$req = new Zend_Controller_Request_Http("http://anydomain.tld/controller/action"); 

// Example just to see how this can be extended 
$req->setParam("someVar", "someValue"); 

$front->setRequest($req); 

$front->dispatch(); 

你到底有一個孤立的PHP文件引導網頁的所有內容與主要index.php相同,但是您可以根據需要手動觸發控制器/操作,讓您可以更輕鬆地訪問其他文件,並讓ZF1讓您訪問它們。

相關問題