如何在cakephp中调用Shell文件中的控制器

时间:2013-04-04 11:04:32

标签: cakephp

我正在使用PHP Mailer,我在app Controller中有邮件功能,我想在shell文件中访问它以进行crone作业。

任何人都可以指导我如何做到这一点?

由于

4 个答案:

答案 0 :(得分:3)

对不起,这已经太晚了,但是如果它在这之前会帮助我,那么对于未来的观众来说:

借鉴CakePHP: best way to call an action of another controller with array as parameter?处稍微不同的情况:

到目前为止这对我有用(还没有在控制器中尝试过更复杂的东西): 在... / app / Console / Command / BillsShell.php中:

App::import('Controller', 'Billing');

class BillsShell extends AppShell {
    public function main() {
        $billing = new BillingController();
        $billing->constructClasses(); //I needed this in here for more complicated requiring component loads etc in the Controller
        $billing->test();
    }
}

在BillingController.php中:

class BillingController extends AppController {
    function test() {
        echo "****Big test!!!*****\n\n"; 
    }
}

蛋糕2.1.3:

$> .../app/Console/php cake.php bills

Welcome to CakePHP v2.1.3 Console
---------------------------------------------------------------
App : app
Path: .../app/
---------------------------------------------------------------
****Big test!!!*****

答案 1 :(得分:1)

你应该使用Cakephp Shell来在cron中做一些事情。问题在How to setup cronjobs in cake php?进行了讨论。

编辑:如果您需要在控制器和shell中使用某些内容,我建议将其移至组件。在你的shell中你可以做到

App::import('Component', 'Meteor');
$this->Meteor = new MeteorComponent();
$this->Meteor->flash('New York');

在控制器中

$components = array('Meteor');

public function your_action() {
  // code
  $this->Meteor->flash('Paris');
}

答案 2 :(得分:1)

是:

App::uses('CakeRequest', 'Network');
    App::uses('CakeResponse', 'Network');
    App::uses('Controller', 'Controller');
    App::uses('AppController', 'Controller');
    $controller = new AppController(new CakeRequest(), new CakeResponse());

=> $ controller是你的

答案 3 :(得分:1)

似乎没有直接的方法来调用Shell official document中的Controller,我们可以在其中进行解决,我们可以从Shell调用Model,在模型中我们可以调用Controller。

外壳:

public function main() {
   App::import('Model', 'UserModel');
   $this->UserModel = ClassRegistry::init('UserModel');
   $this->UserModel->callModel();
}

型号:

function callModel($created) {
        App::import('Controller', 'Pages');
        $something = new PagesController;
        $something->callMe();          
}

控制器:

public function callMe(){
    echo "Finally, Controller method is called\n";
}

仅供参考:这只是一个解决方法。