Composer: Autoload Sınıf Yükleme
29-06-2015 Okuma Modu
Bir önceki yazımda; "Composer'ın nedir, ne işe yarar?" konusundan bahsetmiştim. Bu yazımda ise composer'da autoload'ların nasıl tanımlanacağından bahsedeceğim.
Composer ile 4 farklı autoload tanımlaması yapabilirsiniz.
- PSR-4
- Classmap
- files
PSR-0
PSR-4 Standartlarında Autoload:
{
"autoload": {
"psr-4": {
"Illuminate\\": "src/Illuminate/"
}
}
}
Yukarıdaki örnek: laravel paketlerinin autoload tanımlamasıdır. Illuminate\
adında sağlayıcı adı kullanılmıştır ve bu namepace'in dizin(klasör) karşığı "src/Illuminate" olarak ayarlanmıştır.
Aşağıdaki örnekte bir nesne oluşturdum ve yukarıdaki PSR-4 autload tanımlamasındaki dizin karşılığını belirttim.
new \Illuminate\Auth\AuthManger;
- src
- Illuminate
- Auth
- AuthManager.php
- Auth
- Illuminate
Aynı namespace'i birden fazla dizine tanımlayabilrsiniz.
{
"autoload": {
"psr-4": {
"Illuminate\\": ["src/Illuminate/", "lib/"]
}
}
}
Yukarıdaki örnekte Illuminate\
namespace'ini hem "src/Illuminate" dizinine hemde "lib" dizinine tanımladım. Dizinleri "," karakteri ile istediğiniz kadar çoğaltabilirsiniz.
new \Illuminate\Database\Connect;
- src
- Illuminate
- Auth
- AuthManager.php
- Auth
- Illuminate
- lib
- Database
- Connect.php
- Database
Alt namespace ekleyebileceğiniz gibi namespace kısmını, global de bırakabilirsiniz.
{
"autoload": {
"psr-4": {
"": ["lib/"]
}
}
}
OOP geliştiriclerin bir çoğu namespace'lerine özel bir isim(sağlayıcı adı) vermektedir. Bu psr-4 standartlarında da yer almaktadır. Ama tabi verip vermemek size kalmış.
new \Database\Connect;
- lib
- Database
- Connect.php
- Database
Classmap
{
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/library"
]
}
}
Namespace tanımlamadığınız sınıfların dizin konumunu classmap
anahtarıyla tanımlayabilirsiniz.
Files
{
"autoload": {
"files": ["src/MyLibrary/functions.php"]
}
}
Namespace tanımlamadığınız sınıfların tam adresini files
anahtarıyla tanımlayabilirsiniz.
Bunların dışında PSR-0 tanımlaması da vardır. Artık kullanılmadığı için yazıma dahil etmedim.
Son olarak testleriniz için ayrı autload tanımlaması da yapabilirsiniz. Yukarıdaki işlemlerin hepsi autoload-dev
anahrarı için geçerlidir.
{
"autoload": {
"psr-4": { "MyLibrary\\": "src/" }
},
"autoload-dev": {
"psr-4": { "MyLibrary\\Tests\\": "tests/" }
}
}
Daha detaylı bilgi almak istiyorsanız bu sayfayı inceleyebilirsiniz.
Kendinize iyi bakın :)