2013-10-13 6 views
8

で他のコントローラ機能を呼び出しますか以下はCakePHPの2.3.8:?どのように私はすべてのアイデアCronController.php</p> <p>で他のコントローラの機能を呼び出すことができます<code>CakePHP 2.3.8</code>についてCronController.php

+4

推測コンポーネントはより良い代替品ですか?なぜあなたは別のコントローラの中でコントローラを呼び出す必要がありますか? – xialin

答えて

30

はコードです:

App::import('Controller', 'Products'); // mention at top 

// Instantiation // mention within cron function 
$Products = new ProductsController; 
// Call a method from 
$Products->ControllerFunction(); 

は、それはいくつかのいずれかを役に立てば幸い!

+7

これは絶対に推奨されません!あなたのコードに応じて、[components](http://book.cakephp.org/2.0/en/controllers/components.html)(@ xialinZZZはすでに述べたように)、ライブラリや[models](http://代わりにbook.cakephp.org/2.0/ja/models.html)を参照してください。 – ndm

+1

私の仕事は瞬時に止まっていないかもしれませんが、簡単な方法で素早く解決策を見つけることができます –

+0

"cronコントローラ"の全体概念は*完全に*設計上の欠陥です。シェルを使用する必要があり、データ処理ロジックはモデル内にある必要があるため、コントローラとシェルの間で共有することができます。私はあなたがすることができる最も悪い事の一つであるので、この答えにも投票しました。 – burzum

5

コントローラの操作で$this->requestAction();メソッドを使用してください。最も推奨されるパターンではありませんが、有用であり、データを返すことも、パラメータに基づいてビューをレンダリングすることもできます。

+0

推奨されないのはなぜですか? –

2

私はマニュアルを参照して解決策を見つけました。

public function that_controller_function_you_are_writing() { 

    # this is cakes way of running required 
    App::import('Controller', 'Users'); 
    $UsersController = new UsersController; 

    # now you can reference your controller like any other PHP class 
    $UsersController->that_function_you_needed(); 
} 

これはリンクです: http://book.cakephp.org/2.0/en/core-utility-libraries/app.html

-1

この

<?php echo $this->Html->link("Logout,".$user["username"], array('controller'=>'Users' ,'action'=>'logout'));?> 
+1

これがうまくいくと思われる理由を説明してください。 – Daniel

+0

答えの前にもう一度質問を読んでください。 – Developer

+0

関連しません。もう一度質問を読んでください。 – Divyek

2

App::import('Controller', 'XXX');が私のために動作しませんでしたしてみてください。

私はそれはあなたが呼び出したいコントローラの

機能働かせたしばらくケーキ3.0

を使用してい

:あなたがする必要がある別のコントローラでは、

public function validateSomething($var = null) 
    { 
     return ... 
    } 

を前の関数を呼び出して何かを検証してください:

public function index() 
    { 
     // load the model you need depending on the controller you need to use 
     $this->loadModel('User'); 

    // use this in case you have tu instantiate a new entity 
     $user = $this->User->newEntity(); 
     $user = $this->User->patchEntity($user, $this->request->data); 

    // using the controller on the fly, you could assign it to a var 
    // call the function you need 
     $result = (new UserController())->validateSomething($user); 

    // Test if result has something: 
     $this->Flash->success(__($result)); 
    } 
関連する問題