簡體   English   中英

如何從獨立的php文件調用zend控制器動作?

[英]How to call a zend controller action from an independent php file?

我有一個控制器IndexController.php,其中的操作是這樣的

class IndexController extends CustomControllerAction {


public function preDispatch() {


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


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


    }


}

public function indexemailAction() {

  //somecode which calculates certain things

}

}

現在,我需要使用獨立的php文件在IndexController.php中調用動作“ indexmailAction”

php文件是indextest.php

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

 ?>

我應該在這個文件中寫些什么……

提前致謝

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

這為我解決的問題是,它消除了Apache進程的產生。 該解決方案很棒,因為我可以從URL中訪問所需的某些Controller / Action。

在幾乎所有基於ZF1的應用程序中,您都可以復制索引文件並保持所有內容不變,而只需注釋掉以下行即可。

$application->run();

您可以使用自動裝帶器等訪問此行下的任何內容。這很粗糙,但是可以工作。 不幸的是,您很快就會發現自己對應用程序擁有的許多文件的訪問受到限制,並且感覺訪問所需文件的唯一方法是通過Controller / Action。

相反,我在$ application-> bootstrap()下面的新文件中使用以下內容(仍在刪除$ application-> run()):

$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文件,該文件會引導與Web上的主index.php相同的所有內容,但是您可以根據需要手動觸發控制器/操作,從而使您可以更輕松地使用ZF1來訪問其余文件您可以訪問它們。

控制器被設計為在MVC中使用,而不是通過腳本使用。 您的控制器應組裝請求變量,將其定向到模型並返回某種HTTP響應。 您的腳本應該直接對模型起作用。

無論如何,只要您堅持,就可以實例化控制器類並像調用其他任何類一樣調用方法,只要您注入MVC​​可能具有的任何依賴項即可。

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

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

PS:也許您應該考慮創建一個寧靜的api來處理來自應用程序外部的調用

更新

好的,我現在明白了您的需求,實現此目標的最佳方法是調用url而不是文件(例如website.com/emails/send),如果您擔心安全性,可以使用一些預共享的密鑰來確保請求來自您,將其與請求一起發送,並檢查您的操作是否正確。

如果要在操作的多個位置使用邏輯,則應將其放入操作幫助器或非常通用的代碼中,然后放入自定義庫(/ library / custom /)

注意:身份驗證將更適合於插件,而不是每個控制器中的預調度方法。

暫無
暫無

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

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