Giriş
Paketler Laravel’e ek işlevler eklemek için öncelikli yoldur.
Farklı tiplerde paketler vardır. Bazı paketler kendi başına, yani Laravel ile yalnızca değil herhangi bir frameworkle çalışabilir. Tüm kendi başına çalışan paketler Laravel ile kullanılabilir.
Diğer paketler Laravel ile birlikte kullanılmak için yapılan paketlerdir. Bu paketler, Laravel uygulamanızın özelliklerini arttıran yönlendiriciler (route), kontrolcüler (controller), görünüm (view) ve yapılandırmalar olabilir. Bu makalede Laravel için yapılmış olan paketleri açıklanacak.
Servis Sağlayıcılar (Service Providers)
Servis sağlayıcılar Laravel ile paketinizin bağlantı noktasıdır. Servis sağlayıcı, paketin Laravel’in servis taşıyıcısına bağlanması ve paketlerin kaynaklarının yüklenmesinden sorumludur.
Servis sağlayıcı register
ve boot
metodlarını içeren Illuminate\Support\ServiceProvider
sınıfından genişletilir (extend edilir). Ana Servis Sağlayıcı (ServiceProvider
) illuminate/support
composer paketinden konumlandırılmıştır.
Yönlendirme (Routing)
Paketize yönlendiricileri tanımlamak için basitçe paketinizin servis sağlacısının boot
metoduna require
ile dahil edin. Yönlendirici dosyanızın içinde tipik Laravel uygulamasında yapabilecğeiniz yönlendirme kayıtları için Route
facade kullanabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 |
/** * Perform post-registration booting of services. * * @return void */ public function boot() { if (! $this->app->routesAreCached()) { require __DIR__.'/../../routes.php'; } } |
Kaynaklar (Resources)
Görünümler
Paketinizin görünümlerini Laravel ile kullanmanız için bu görünümlerin nerede olduğunu Laravel’e göstermeniz gerekir. Bunu servis sağlayıcının loadViewsFrom
metodu kullanılarak yapılabilir. loadViewsFrom
metodu iki argüman kabul eder: görünüm şablonlarının yeri ve paketin ismi. Örneğin, paketinizin ismi “courier” ise servis sağlayıcınızın boot
metoduna aşağıdaki gibi ekleyin.
1 2 3 4 5 6 7 8 9 |
/** * Perform post-registration booting of services. * * @return void */ public function boot() { $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier'); } |
Paket görünümümleri package::view
ikili iki nokta üst üste yazılımı ile tanımlanır. Yani, courier
paketinden admin
görünümünü yüklemek isterseniz:
1 2 3 |
Route::get('admin', function () { return view('courier::admin'); }); |
Paket Görünümlerinin Üzerine Yazma
loadViewsFrom
metodunu kullandığınızda, Laravel aslında iki konum kaydeder: uygulamanın resources/view/vendor
klasörü ve sizin belirleyeceğiniz konum. Yani courier
örneğinde: bitr paket görünümü isteği yapıldığında, Laravel ilk olarak geliştiricinin resources/views/vendor/courier
içinde özel bir versiyonunun olup olmadığına bakar. Sonra özelleştme yoksa, Laravel paket görünümünü loadViewsFrom
ile belirtilen yerde yerde arar. Bu son kullanıcın paket görünümlerinin özelleştirmeyi kolaylaştırır.
Görünümlerin Yayınlanması
Görünümlerinizin uygulamanın resources/views/vendor
klasröü içinde yayınlanmasını istiyorsanız, servis salayıcınızın publishes
metodunu kullanmalısınız. publishes
metodu paket görünüm yolları ve onlara uyan yayın konumlarını gösteren dizi argüman kabul eder.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * Perform post-registration booting of services. * * @return void */ public function boot() { $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier'); $this->publishes([ __DIR__.'/path/to/views' => base_path('resources/views/vendor/courier'), ]); } |
Şimdi, kullanıcınar vendor:publish
Artisan komutunu çalıştırdığında, paketinizin görünümleri belirtilen yola koplanmış olacak.
Çeviriler (Translations)
Eğer pakeriniz çeviri dosyaları içeriyorsa Laravel’in onları nasıl yükleyeceğini belirtmek için loadTranslationsFrom
metodunu kullanabilirsiniz. Örneğin, paket isminiz “courier” ise, servis sağlayıcınızın boot
metoduna aşağıdakini eklemelisiniz.
1 2 3 4 5 6 7 8 9 |
/** * Perform post-registration booting of services. * * @return void */ public function boot() { $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier'); } |
Paket çevirileri package::file.line
ikili iki nokta üst üste yazılımı ile tanımlanır. Yani courier
paketinizin messages
dosyasındaki welcome
satırını şu şekilde yükleyebilirsiniz:
1 |
echo trans('courier::messages.welcome'); |
Ayarlar (Configuration)
Tipik olarak paketinizin yapılandırma dosyasını uygulamanın kendi config
kalsöründe istersiniz. Bu kullanıcının varsayılan ayarları kolayca düzenlemsine izin verir. Yapılandırma dosyasını yayınlamak için publishes metodunu aşağıdaki şekilde kullanın.
1 2 3 4 5 6 7 8 9 10 11 |
/** * Perform post-registration booting of services. * * @return void */ public function boot() { $this->publishes([ __DIR__.'/path/to/config/courier.php' => config_path('courier.php'), ]); } |
Şimdi, kullanıcı paketinzi Laravel’in vendor:publish
komutuyla çalıştırdığında, dosyanız dosyanız belirtilen adrese kopyalanacak. Yapılandırmanız yayınlandığında, diğer yapılandırmalar gibi ulaşılabilir.
1 |
$value = config('courier.option'); |
Varsayılan Paket Ayarları
Sizin paket yapılandırmalarınızı uygulamanızla birleştirmek isteyebilrisiniz. Yapılandırmayı birleştirmek için servis sağlayıcındaki register
metodu içinde mergeConfigFrom
metodunu kullanın.
1 2 3 4 5 6 7 8 9 10 11 |
/** * Register bindings in the container. * * @return void */ public function register() { $this->mergeConfigFrom( __DIR__.'/path/to/config/courier.php', 'courier' ); } |
Erişilebilir Dosyalar
Paketinizde Javascript, CSS ve resimleri olabilir. Bunları uygulamanızın public
klasröründe yayınlamak için servis saplayıcınızın publishes
metodunu kullanın.
1 2 3 4 5 6 7 8 9 10 11 |
/** * Perform post-registration booting of services. * * @return void */ public function boot() { $this->publishes([ __DIR__.'/path/to/assets' => public_path('vendor/courier'), ], 'public'); } |
Şimdi, kullanıcılar peketinizin vendor::publish
komutunu çalıştırdığında, sizin ulaşılabilir dosyalarınız nelirtilen konuma kpyalanacak. Paket güncellendiğinde bu dosyaların üzerine yazmak isteyeceksiniz, bu durumda --force
etiketini kullanabilirsiniz.
1 |
php artisan vendor:publish --tag=public --force |
Dosyalarınızın herzaman güncel olmasını istiyorsanız composer.json
dossyanızdaki post-update-cmd
listesine bu komutu ekleyebilirsiniz.