2013-11-03 15 views
12

Zend Framework 2'de yerleşik bir uygulama sahibiyim. Ürünlerimi güncellemek için cron işi ayarlamak istiyorum. Bu gibi betiklerin ortak klasörün dışından çalıştırılması gerektiğini biliyorum, ancak ne yazık ki cron'umdaki script'imin çerçeve dosyalarını kullanması gerekiyor.
Bunu nasıl yapabilirim?
anladım tek yoluZend framework ile cron işi nasıl çalıştırılır 2

www.domain.com/cron/test 

yüzden bütün çerçeve özelliğe sahip olacak sonra esrar veya şifre ekleyin ve yönlendirme ortak klasöre dışından komut çalıştırmaktır.
Güvenli olacak mı? Belki başka bir yolu var mı?

cevap

24

Böyle bir gereksinim için CLI kullanmanızı kesinlikle öneririz.

  1. Uygulama modülünün içinde bir updateAction() ile bir ConsoleController oluşturun.
  2. bir console route ekleyin uygulama modülü en module.config.php:

    array(
        'router' => array(
         'routes' => array(
         ... 
         ) 
        ), 
    
    'console' => array(
        'router' => array(
         'routes' => array(
          'cronroute' => array(
           'options' => array(
            'route' => 'updateproducts', 
            'defaults' => array(
             'controller' => 'Application\Controller\Console', 
             'action' => 'update' 
            ) 
           ) 
          ) 
         ) 
        ) 
    ) 
    ); 
    
  3. Şimdi terminali açıp

    $ cd /path/to/your/project 
    $ php public/index.php updateproducts 
    

Hepsi bu. Umarım yardımcı olur.

+0

Teşekkür, ben bir deneyin vereceğiz. Sadece bir soru. Metodunuz güvende mi? HTTP tarafından erişilemez mi? – user1409508

+1

Evet, HTTP tarafından erişilemez. Belgelerden: '' Konsol Rotası sadece uygulama konsol (terminal) penceresi içinde çalıştırıldığında işlenecektir, web (http) isteğinde hiçbir etkisi yoktur ve göz ardı edilecektir. Sadece HTTP rotalarını tanımlamak mümkündür (sadece web uygulama) ya da yalnızca Konsol rotaları (yani, tarayıcıda çalışmayı reddedecek konsol-sadece bir uygulama istiyoruz). "' Check out: http://framework.zend.com/manual/2.2/en/modules/zend .console.routes.html – edigu

+0

Teşekkürler, emin olmak istedim. Cevabını kontrol ettikten sonra kabul edeceğim. Muhtemelen yarın olacak. Yardım için teşekkürler! Linkte – user1409508

2

Collabnet'teki çözümü buldum (Şimdi öldü). ColabEdit zaman yayınlar kaldırır olarak

Burada çözüm kopyalama ediyorum:

<?php 
/* 
Cron directory setup: 

Cron 
    config 
     module.config.php 
    src 
     Cron 
      Controller 
       IndexController.php 
    autoload_classmap.php 
    Module.php     

NOTES: Remember to include the Cron module in the main config file (trunk/config/application.config.php) 

Once you have the route in place, write your cron and call it from your webhost cron manager. 

*/ 

// Cron/config/module.config.php 
return array(
    // Placeholder for console routes 
    'controllers' => array(
     'invokables' => array(
      'Cron\Controller\IndexController' => 'Cron\Controller\IndexController' 
     ), 
    ), 
    'console' => array(
     'router' => array(
      'routes' => array(
       //CRON RESULTS SCRAPER 
       'my-first-route' => array(
        'type' => 'simple',  // <- simple route is created by default, we can skip that 
        'options' => array(
        'route' => 'hello', 
        'defaults' => array(
         'controller' => 'Cron\Controller\IndexController', 
         'action'  => 'index' 
         ) 
        ) 
       ) 

      ), 
     ), 
    ), 


); 

<?php 
// Cron/src/Cron/Controller/IndexController.php 
namespace Cron\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 

class IndexController extends AbstractActionControlle 
{ 
    public function indexAction() 
    { 
     echo "hello"; 
     echo "\r\n"; 
    } 
} 

From the console navigate to trunk (or public_html) (the directory before public) and run: 

path/to/trunk>php public/index.php hello 

hello 
path/to/trunk> 
+0

bağlantısı kesildi! –

+0

teşekkürler, kaldırıldı ... – HappyCoder

İlgili konular