Как напрямую запустить функцию внутри класса контроллера через cron? - PullRequest
1 голос
/ 25 марта 2011

В magento я попытался настроить cron следующим образом.

   <crontab>    
            <jobs>
                <inchoo_birthday_send>
                    <schedule><cron_expr>0 1 * * *</cron_expr></schedule>
                </inchoo_birthday_send>
            </jobs>
    </crontab>

Здесь это вызывает модель, но как я могу напрямую вызвать функцию внутри контроллера. Например

class Mage_Adminhtml_Inchoo_BirthdayController extends Mage_Adminhtml_Controller_Action
{


    public function sendAction($strFname)
    {
        // this has to be called from cron in magento.
    }


} 

Как я могу напрямую вызвать функцию действия sendAction внутри вышеуказанного контроллера из cron. Другими словами, как sendAction инициируется непосредственно из cron. Я должен запустить функцию контроллера непосредственно вместо модели.

Пожалуйста, помогите мне

Ответы [ 2 ]

4 голосов
/ 28 марта 2011

вы должны относиться к этому классу как к обычной модели.

$observer = Mage::getModel('birthday/observer');
$observer->sendBirthayEmail();

Надеюсь, это то, что вам нужно.

Редактировать

$curl = new Varien_Http_Adapter_Curl();
$curl->setConfig(array('timeout'   => 20));
$curl->write(Zend_Http_Client::GET, 'http://www.stackoverflow.com');
$curl->read(); //or without this line

Это должно сработать, если вам нужна дополнительная информация, пожалуйста, посмотрите содержимое класса Varien_Http_Adapter_Curl.

Если вы будете вызывать только один раз sendAction внутри модели cron, тогда все нормально ...

Но я предлагаю использовать сам cron, потому что он более эффективен, чем использование Curl несколько раз.

2 голосов
/ 25 марта 2011

Вы делаете это неправильно :) если вам нужно вызвать контроллер со всеми диспетчерами и событиями, вы должны использовать wget или curl для вызова вашего действия.Если вам не нужны все события и диспетчеры для запуска, то ваш метод просто не в том месте

...