Zend Framework ile dış komut entegre

6 Cevap php

Zend Framework içine harici bir komut entegre etmek için en iyi yolu nedir? Ben bu yanlış yol soran olabilir çünkü Anlatayım. Ben bir XML dosyası ayrıştırır indirme ve bir komut dosyası var. Bir günlük cron işi olarak çalışır Bu komut, veritabanına verileri dökümü gerekmektedir.

Ben bu senaryoyu kullanır ve o benim Subclassed modeli kullanmak için iyi olurdu gibi geliyor bana site için Zend Framework kullanıyorum Zend_Db_Abstract ekleme ve veritabanı güncelleme yapmak. Nasıl biri bu bunu hakkında gidiyor? Benim komut Zend Bileşenleri (yani kütüphane / Mine / Xmlparse.php) yanındaki kütüphaneye gitmek ve böylece çeşitli ZF bileşenlerine erişimi var mı? Ben sadece doğru model dosyaları ve dosyasının kendisinde Zend DB bileşeni dahil etmek gerekiyor? Entegrasyon bu tür işlemek için en iyi yolu nedir?

6 Cevap

Kütüphane dizinde sonraki Zend kütüphane klasörüne kendi kütüphane olmalıdır. Eğer (myLib, Proje, ...) onu aramak ne olursa olsun Zend Yükleyici'ye içine içermelidir ve aşağıdaki gibi bitti:

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Project_');
$loader->setFallbackAutoloader(true);
if ($configSection == 'development')
{
    $loader->suppressNotFoundWarnings(false);
}

Eğer kütüphane ZF ve Yükleyici'ye ile güzel entegre etmek için sırayla ZF adlandırma kurallarına sadık olmalıdır. Bu iki anlama gelir:

  • Varolan bir ZF sınıfını genişletmek eğer dosya kitaplık adı dışında aynı yolu ve adı vardır ki, ZF klasör yapısını çoğaltmak. Örneğin / Library / Zend / Db / Abstract.php => / library / Proje / Db / Abstract.php.
  • Eğer kendi sınıfları yazarsanız, hala onları bulmak için otomatik yükleyici için ZF adlandırma kurallarına sadık.

Evet, belki Zend Framework sınıfları miras veya sonraki kütüphanede Zend Framework klasörüne kendi klasörünün içine başka sınıfları eklemek kendi sınıfları koymak gerekir.

Eğer etkin Zend_Loader s otomatik yükleme varsa, sınıf adları otomatik olarak oluşturulan sınıf, örn eşler:

My_Db_Abstract will map to My/Db/Abstract.php .

Ben sadece bu soruya germane edilebilir bir şey geldi. This IBM developerWorks article.

Yazar sadece ZF hiyerarşisinde bir komut klasör oluşturma ve (o ini yolunu ayarlamak ve autoload çağrı rağmen) bir normal ZF içinde yaptığınız gibi kullanılmasını önerir. Bu kadar basit mi? Sadece çerçeve hiyerarşisinde olmak ve yolu ve autoloader hibe güzellikler tüm komut dosyası erişim dahil mi?

Ben sormak için çalışıyoruz ne% 100 emin değilim ama yardımcı olmaya çalışacağız. Herhangi bir noktada size php içine "/ / yol / Zend / çerçeve" yolunu eklemek için bir başvuru ekleyin o zaman Zend Framework etkin özünde var. Bunu yaparsanız oradan:

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

Sonra komut herhangi bir noktada hemen hemen sadece yeni Zend Framework nesneleri oluşturabilir ve Zend_Loader kalan idare edecektir.

Zend Framework hakkında büyük şeylerden biri olsa şeyleri belirli bir şekilde yapmak sizi zorluyor değildir. Bazen aynı şeyi gerçekleştirmek için çeşitli yollar vardır nedeni budur. Eğer komut sadece yapmanın uğruna Zend Framework kullanmak yapmak gerekir hissediyorum Yani, bu gerçekten gerekli değildir. Eğer bazı şekilde komut artırabilir düşünüyorsanız Ama sonra bunun için gidin.

Ben genellikle kütüphanede özel bir klasöre projeler arasında kullanılan olabilir düşünüyorum özel şeyler koymak. Yani çerçevenin dışında olabilir komut vardır bir library/Ak33m klasör var.

ZF kendimi noob, ben OP anlamaya çalışıyor ne bazı anlıyorum. Yani, ben sadece orijinal soru çok eski olduğundan bu, gelecekteki bir okuyucu için, yararlı ya OP (veya daha muhtemel olduğunu umut ne anlamak biraz anlatacağım ve ben OP şimdi ZF olduğunu hayal guru).

Ben ZF bütün bir yapı içine hiç satın gerekir ki büyük ölçüde vb Zend_Application, Zend_Bootstrap sınıfının, tüm MVC yaklaşımı gibi, "at will kullanmak" olduğunu iddia anlıyoruz

Ayrıca, ben kolay autoloading etkinleştirmek sınıf adlandırma ve dosya konumları için kuralları anlıyorum. Örnek: class App_Model_User bir klasörde bulunan App/Model/User.php

Ben potansiyel kafa karıştırıcı olabilir ne düşünüyorsunuz olduğunu komut bağlamda, değil henüz nerede

  • public/index.php tüm istek iter. htaccess büyü yapılır
  • Lütfen APPLICATION_PATH set ve public/index.php yolları dahil
  • Lütfen Application veya Bootstrap nesne config dosyasına bağlı oluşturulan

Biz bu bağlamda almak ZF iyilik çoğu boşuna kendinizi ve başka bir bağlamda istediğiniz en iyi nasıl biraz belirsiz olabilir.

Ben orijinal soruya benim cevabım olacaktır sanırım bunun olağan giriş noktası dizisi

http istek -.> Htaccess -> index.php -> yapılandırma

bizim için çevre çok kurar, biz farklı giriş yolu için bunun bazı çoğaltmak gerekir.

Yani, komut dosyası için, benim ilk içgüdüsü oluşturmak olacaktır ortak bir index.php ne çok aynalar dosyasını dahil - yolları, APPLICATION_PATH, başlatır ve bir ön yükleme çağırır ve sonra yapar ayarlamak şunlardır script özgü işleme .

Daha da iyisi, biz http / web bağlamında yaptığı gibi, tüm komut için tek bir giriş noktası oluşturmak istenebilir. $application->run(); artık MVC yönlendirici-denetleyici-gönderme işlemi başlar, ama yerine kendi şeyler yapar böylece kendi script amaçları için Zend_Application uzatın. Bu şekilde, bu tek komut giriş noktası, web giriş noktası, uygulama nesne örneği olur tek fark varlığa hemen hemen aynı olmazdı. Sonra komut için bir komut satırı parametresi olarak istenen uygulama sınıfının adı geçmektedir.

Ama burada ben daha az emin olmak ve sadece fikirleri dışarı atma itiraf.

Tüm bu kimse yardımcı olur umarım. Aslında tüm yazmak için bana yardımcı oldu. Teşekkür ve alkış!

Update 2009-09-29: Sadece bu makalenin karşılaştım: Using Zend Framework from the Command Line

Update 2009-11-20: Ve bir başka yazı: Cron jobs in Zend Framework | GS Design

Update 2010-02-25: Easy command line scripts with Zend Application - David Caunt