我正在使用PHP Mailer,我在app Controller中有邮件功能,我想在shell文件中访问它以进行crone作业。
任何人都可以指导我如何做到这一点?
由于
答案 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";
}
仅供参考:这只是一个解决方法。