Çoklu Proje Geliştirme
"Libraries/ dizini içine taşınan veya bu dizinde oluşturulan kütüphaneler hiç bir tanımlama gerektirmeden kullanılabilir. "
ZN Framework kullanarak tek bir kurulum üzerinde birbiri ile bağlantılı ve de aynı zamanda bağımsız olarak çalışan birden fazla proje geliştirebilmeniz mümkündür. Eğer hostunuz birden fazla alan adı kullanımına izin veriyorsa, farklı alan adları (domain) ya da alt alan adları (subdomain) aynı yapı üzerinde çalıştırabilirsiniz. Ortak dosya kullanımları sayesinde tüm projeleriniz için aynı kütüphane, model, kaynak, dil, ayar dosyaları kullanarak, her proje için tekrar aynı dosya ve dizinleri kopyalama ya da yeniden yazmanıza gerek kalmaz.
# Yapılandırma
Aşağıda çoklu proje kullanımına yönelik ayarlar yer almaktadır.
Projects | ||
string | $default = 'Frontend' | Projects/ dizininde yer alan proje dizinlerinden hangisinin ön tanımlı olarak çalıştırılacağı bilgisidir. |
array | $others = [] | Bu diziye hangi host adının hangi proje dizinini çalıştırılacağı belirtilir. Ancak host adı ile aynı isimli proje dizini kullanıyorsanız böyle bir tanımlama yapmanıza gerek yoktur. |
array | $containers = [] | Projelerden birini referans alarak diğer projelerin ana projeye bağlanabilmesini sağlamak amacıyla kullanılır. Yani alt projeler kendinde olmayan dizinlere ait dosyaları referans aldığı ana proje dizininden çeker. |
# Projeler (ZN >= 3.1.3)
Projects/ dizi altında yer alan dizinleri kural olarak aşağıdaki gibi çağırabilirsiniz.
Aşağıdaki gibi bir proje dizin yapısına sahip olduğumuzu varsayarsak;
Projects/
Admin/
Forum/
Yukarıdaki gibi projeleriniz olduğunu varsayarsak bu dizinleri çalıştırmak için adres çubuğuna;
localhost/Admin/
localhost/Forum/
formatında yazılır. Bilmeniz gereken nokta bu dizinler fiziksel konum belirttiği için dizin isimleri rotalama işlemlerinde kullanılamazlar.
Proje dizinlerine URL üzerinde kullanmak üzere takma isimler verebilirsiniz. Bunun için others
ayarını aşağıdaki gibi düzenleyebilirsiniz.
'others' =>
[
'admin' => 'Admin',
'forum' => 'Forum'
]
Bu ayarlardan sonra çalıştırmak için adres çubuğuna;
localhost/admin/
localhost/forum/
formatında yazıp çalıştırabilirsiniz.
Yapılandırma dosyasında yer alan others anahtarına takma isim belirtebildiğiniz gibi host ismi de belirtebilirsiniz. Bu farklı veya alt domain kullanımları için gereklidir. Şayet host adı ile aynı isme sahip dizin adı kullanıyorsanız aşağıdaki tanımlamayı yapmanıza gerek yoktur.
'others' =>
[
'subdomain.example.com' => 'SubdomainExample',
'www.otherexample.com' => 'OtherExample'
]
Yukarıda belirtilen hostların belirtilen dizini çalıştırabilmesi için yani farklı veya alt domainleri aynı sistem üzerinde kullanabilmeniz için her bir domain için oluşturulan httpd.conf dosyalarında yer alan apache'nin DocumentRoot değeri ZN'nin ana dizinini göstercek şekilde ayarlanması gerekmektedir.
DocumentRoot "/var/www/vhost/zn/"
# Projeleri Birbirine Bağlama
Bir proje referans alınıp diğer projeler referans alınan projeya bağlanabilir. Böylece birden fazla proje bir projenın ortak dizinlerini kullanılır. Yani Frontend/ ve Backend/ dizinleri için Config/, Libraries/, Models/, Languages/, Resources/ gibi dizinlerin ortak olması istenirse yapılandırma dosyasında yer alan containers dizisi kullanılabilir.
Containers | ||
array | $containers = ['Backend' => 'Frontend'] | Projelerden birini referans alarak diğer projelerin ana projeye bağlanabilmesini sağlamak amacıyla kullanılır. Yani alt projeler kendinde olmayan dizinlere ait dosyaları referans aldığı ana proje dizininden çeker. |
Yukarıdaki ayardan anlaşılacağa üzere 2 proje sanki aynı dizindeymiş gibi çalıştırılabilir.
Projects/Backend/ dizinine bakıldığında sadece Controllers/, Views/ ve Storage/ dizinlerinin olduğu görülür. Bu dizinin bu şekilde tasarlanımş olması Frontend/ dizini kapsamına alındığını gösterir. Yani Backend/ dizini içinde bulunmayan diğer tüm dizinlere ait dosyalar Frontend/ dizininden çekilmektedir. Bu kullanımın temel amacı aynı sistem üzerine birden fazla alt domain bağlamaktır. Her domain için aynı dosyaların tekrar kopyalamak yerine projeleri birbirine bağlayarak sizi ek dosya yükünden kurtarır. Aşağıda znframework.com'un proje dizinleri listelenmiştir.
Projects/
Frontend/
All Directories
Forum/
Controllers/
Views/
Resources/
Storage/
Docs/
Controllers/
Views/
Storage/
Api/
Controllers/
Views/
Devtools/
All Directories
Aşağıda yukarıdaki dizinlerin bazılarının birbiri ile nasıl bağlandığı gösterilmiştir.
'directory' =>
[
'default' => 'Frontend'
'others' =>
[
'forum.znframework.com' => 'Forum',
'docs.znframework.com' => 'Docs',
'api.znframework.com' => 'Api'
]
],
'containers' =>
[
'Forum' => 'Frontend',
'Docs' => 'Frontend',
'Api' => 'Frontend'
];
Yukarıdaki yapılandırmada görüldüğü üzere Frontend/ dizinine bağlanarak farklılık gösteren iç dizinler dışındaki diğer iç dizinlere yer verilmemiştir. Böylece aynı dizin ve dosyaların tek tek kopyalanması engellenmiş yapılan bir değişikliğin her birine tek tek uygulanmasının önüne geçilmiştir.
Projeleri bir birine bağlama özelliği sayesinde modüler mvc tasarımlarıda yapabilirsiniz. Bunun için yapmanız gereken modüler olarak oluşturuğunuz her bir dizinin Models-Views-Controllers dizinlerini içerecek şekilde çoğaltılması gerekmektedir. Aşağıda örnek yapılandırmaya yer verilmiştir.
Projects/
Home/
Products/
Models/
Views/
Controllers/
Appointments/
Models/
Views/
Controllers/
Yukarıdaki dizin yapılanmasında Home Frontend/ dizinin içerdiği dizinleri içerecek şekilde tasarlanıp bu dizine bağlanacak olan alt modüller sadece Models-Views-Controllers dizinlerini içerecek şekilde tasarlanmalıdır. Bu işlemden sonra containers yapılandırmasında şu düzenleme yapılmalıdır.
'directory' =>
[
'default' => 'Home'
'others' =>
[
'products' => 'Products',
'appointments' => 'Appointments'
]
],
'containers' =>
[
'Products' => 'Home',
'Appointments' => 'Home'
];
Yapılandırma dosyamızı diğer dizinlerin Home/ dizini kapsamında olduğunu belirtecek şekilde düzenledik.