我有一个控制器,用于通过 cron 运行进程列表,我需要它从单独的控制器运行方法。
当从它自己的控制器调用该方法时,一切正常,但是从 cron 控制器运行时(即使手动调用),它会失败。
我的代码目前看起来像这样:
class CronController extends AppController
{
var $uses = array(.., 'EmailTemplate', ..);
var $components = array('Email');
//Some stuff
function process_for_cron_to_run() {
//Some stuff
//Run method from imported controller
App::import('Controller', 'Imported');
$imported = new ImportedController;
$imported->constructClasses();
$imported->method_to_run(); //Dies when running this method
exit;
}
}
...
class ImportedController extends AppController {
var $uses = array(..);
var $components = array('Mailer', 'RequestHandler', 'FileHandler', 'Email');
//Some stuff
function method_to_run() {
//Some stuff
$this->_sendEmail(..);
}
}
...
class AppController extends Controller
{
var $components = array('Cookie', 'RequestHandler', 'Err', 'Email', 'Sms');
var $uses = array(.., 'EmailTemplate', ..);
function _sendEmail(..) {
//Some stuff
$this->EmailTemplate->find(..); //Dying here (Line 1756)
}
..
}
这将因以下错误而死:
Fatal error: Call to a member function find() on a non-object in /../app/app_controller.php on line 1756
其中第 1756 行在上面的 AppController 中。
我尝试添加EmailTemplate
到$uses
ImportedController - 这有效,但它在 AppController 中的几行后调用$this->Email
,它包含在$components
所有三个控制器中。的错误信息$this->email
,供参考:
Fatal error: Call to a member function reset() on a non-object in /../app/app_controller.php on line 1645
我唯一能想到的另一件事是我从 ImportedController 调用的方法是 admin_X,所以当我从 /processes/process_for_cron_to_run 调用它时,它可能会因为身份验证问题而被踢出?