2016-03-26 39 views
2

Propel 1'de migrations kullanıyorum, bu da yeterince iyi çalışıyor. Bazı veri işlemlerinde Propel sınıfına ve ortak geçiş yöntemleri için bir üst sınıfa erişmem gerekiyor, ancak Phing'den geçiş talep ettiğim için bu önemsiz gibi gözüküyor.Phing'i Propel 1 veritabanı geçişi için çağırırken sınıf otomatik yüklemesini ayarlamak için temiz bir yol var mı?

$root = realpath(__DIR__ . '/../..'); 
require_once $root . '/vendor/autoload.php'; 
require_once $root . '/lib/autoload.php'; 
set_include_path($root . '/lib' . PATH_SEPARATOR . get_include_path()); 
Propel::init($root . '/config/propel-conf.php'); 

: ihtiyacı her sınıf dosyasının başında olduğu sürece ben Özdevinimli ve istendi koduna sahip olarak,

php \ 
    /project/backend-app/vendor/phing/phing/bin/phing.php \ 
    -f /project/backend-app/vendor/propel/propel1/generator/build.xml \ 
    -Dusing.propel-gen=true \ 
    -Dproject.dir=/project/backend-app/db \ 
    -Dpropel.database.url='mysql:dbname=job_crawler_test;host=127.0.0.1' \ 
    -Dpropel.buildtime.conf.file='buildtime/job_crawler_test.xml' \ 
    -quiet \ 
    migrate 

çalışıyor:

Bu kodu kullanarak göç diyoruz Tamam, bu işe yarıyor, ama bu biraz dağınık - resmi bir öneri olsa bile (yukarıdaki el ile sayfanın bağlantısına bakın). Temizlik için bu tekrarlayan kod bloğunu çıkarmak istiyorum.

Tabii ki bunu bir dosyaya koydum ve her dosyada tek bir require satırını kullanabilirim, bu da bazı yükleri azaltacaktır, ancak bu çok tatmin edici değildir. Phing'e geçebileceğim bir -D bayrağı var mı, belki bir bootstrap PHP dosyası gibi mi?

'un bir şey yapıp yapamayacağını merak ettim, bu durum a Phing core property gibi görünüyor, ancak bu herhangi bir fark yaratmıyor gibi görünüyor.

+0

Phing, bu tür geçersiz kılmalara izin veriyorsa, '-Dauto_prepend_file =' PHP nezaketini kullanabilirsiniz. – mario

+0

Teşekkürler @mario - iyimser bir deney verdi, boşuna. Bu [mevcut konsol params] hakkında bilgi (https://www.phing.info/docs/guide/stable/sec.commandlineargs.html) biraz seyrek olduğunu görünüyor! – halfer

+0

Aha, Ne demek istediğini anladım - php' komutuna ekleyin - ne güzel bir fikir. Bunu denedim ... – halfer

cevap

0

@mario, bu sorunu kusursuz bir şekilde düzelten yorumlarda bir tür öneride bulundu.

php \ 
    -d 'auto_prepend_file=/project/backend-app/db/scripts/propel-migration.php' \ 
    <rest of call here> 

Tahrik göç sınıfları artık tam otomatik yükleme vardır:

<?php 

/* 
* db/scripts/propel-migration.php 
* 
* Bootstrap file for Propel migrations that need autoloading or access 
* to the Propel sub-system 
*/ 

$root = realpath(__DIR__ . '/../..'); 
require_once $root . '/vendor/autoload.php'; 
require_once $root . '/lib/autoload.php'; 
set_include_path($root . '/lib' . PATH_SEPARATOR . get_include_path()); 
\Propel::init($root . '/config/JobCrawler-conf.php'); 

Sonra php çağrısı (yani yerine phing.php çağrı) tadil edilmiş, böylece: Ayrı bir komut Autoload giriş bölümü hareket ve herhangi bir ön sınıf boilerplate kodu olmadan Propel'in sistemine erişim.