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.