Как напрямую запустить функцию внутри класса контроллера через cron?

В 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. Мне нужно запускать функцию контроллера напрямую, а не модель.

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


person Elamurugan    schedule 24.03.2011    source источник


Ответы (2)


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

$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 несколько раз.

person xyz    schedule 28.03.2011
comment
Привет, пожалуйста, проверьте мой обновленный вопрос. Именно это я и должен делать. Придется запускать функцию контроллера ежедневно (ежедневно генерирует тысячи PDF-файлов). Помогите, пожалуйста - person Elamurugan; 29.03.2011

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

person Anton S    schedule 25.03.2011
comment
Если да, то мне следует войти в систему администратора с помощью curl, а затем вызвать точный URL-адрес. Это правильный способ сделать это? - person Elamurugan; 25.03.2011
comment
нет, я думаю, что использование этого метода в блоке или модели было бы намного проще в обращении - person Anton S; 25.03.2011
comment
Привет, пожалуйста, проверьте мой обновленный вопрос. Именно это я и должен делать. Придется запускать функцию контроллера ежедневно (ежедневно генерирует тысячи PDF-файлов). Помогите, пожалуйста - person Elamurugan; 29.03.2011
comment
вы все еще делаете это неправильно, вы пытаетесь cron запланировать класс модели, но вместо этого ваш класс является контроллером, скопируйте и вставьте этот метод в отдельный метод наблюдателя и вызовите его таким образом. - person Anton S; 29.03.2011