2

アクションが次のようなコントローラー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

 ?>

このファイルに何を書けばいいのか……

前もって感謝します

4

4 に答える 4

1

これは数年前のものであり、これはクラス/関数の意図された使用法ではないかもしれませんが、コマンドラインから呼び出される分離されたファイルで次のことが非常に役立つことがわかりました.

これによって解決される問題は、Apache プロセスの生成がなくなることです。URLから必要なコントローラー/アクションにアクセスできるため、ソリューションは素晴らしいです。

ほとんどすべての ZF1 ベースのアプリでは、インデックス ファイルをコピーしてすべてを同じに保ち、次の行をコメント アウトするだけです。

$application->run();

この行の下には、オートローダーなどでアクセスできるものがあります。粗雑ですが、機能します。残念ながら、すぐにアプリケーションが持つ多くのファイルへのアクセスが制限され、必要なファイルにアクセスできる唯一の方法はコントローラー/アクションを使用することであることに気付くでしょう。

代わりに、 $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();

最終的に、Web 用のメインの index.php と同じようにすべてをブートストラップする分離された PHP ファイルができますが、必要に応じてコントローラー/アクションを手動でトリガーできるため、ZF1 が意図した方法で残りのファイルに簡単にアクセスできます。あなたはそれらにアクセスします。

于 2016-11-29T02:14:41.937 に答える
0

アクションの複数の場所でロジックを使用する場合は、アクション ヘルパーに配置するか、非常に一般的なコードの場合はカスタム ライブラリ (/library/custom/) に配置する必要があります。

注意: 認証は、すべてのコントローラーで事前にディスパッチする方法よりも、プラグインで行う方が適しています。

于 2013-03-20T06:06:50.473 に答える
0

コントローラーは、スクリプトではなく、MVC で使用するように設計されています。コントローラーはリクエスト変数を組み立て、それらをモデルに送り、何らかの HTTP レスポンスを返す必要があります。代わりに、スクリプトはモデルに対して直接作用する必要があります。

いずれにしても、MVC が持つ依存関係を注入する限り、コントローラー クラスをインスタンス化し、他のクラスと同じようにメソッドを呼び出すことができます。

于 2013-03-20T04:54:20.650 に答える