Temel Eklenti Oluşturma ve Yayınlama Süreci
Prensip
- Bir çapraz alan eklentisi örneğinde, eklenti üç bölümden oluşur; biri çapraz alan ara yazılım programı dosyası, diğeri ara yazılım yapılandırma dosyası middleware.php ve üçüncüsü ise komutla otomatik oluşturulan Install.php dosyasıdır.
- Üç dosyayı paketlemek ve composer'a yayınlamak için bir komut kullanıyoruz.
- Kullanıcı composer ile çapraz alan eklentisini kurduğunda, eklentideki Install.php dosyası çapraz alan ara yazılım programı dosyasını ve yapılandırma dosyasını
/{ana proje}/config/plugin
dizinine kopyalar ve webman'ı yükler. Bu, çapraz alan ara yazılım dosyasının otomatik yapılandırılmasını sağlar. - Kullanıcı composer ile bu eklentiyi kaldırdığında, Install.php ilgili çapraz alan ara yazılım programı dosyası ve yapılandırma dosyasını siler; eklentinin otomatik kaldırılmasını sağlar.
Standart
- Eklenti adı iki bölümden oluşur;
sağlayıcı
veeklenti adı
, örneğinwebman/push
, bu composer paket adıyla eşleşir. - Eklenti yapılandırma dosyaları tek tip olarak
config/plugin/sağlayıcı/eklenti_adı/
altında yer almalıdır (console komutu yapılandırma dizinini otomatik oluşturacaktır). Eğer eklentinin yapılandırmaya ihtiyacı yoksa, otomatik oluşturulan yapılandırma dizini silinmelidir. - Eklenti yapılandırma dizini yalnızca app.php eklenti ana yapılandırması, bootstrap.php işlem başlatma yapılandırması, route.php yönlendirme yapılandırması, middleware.php ara yazılım yapılandırması, process.php özel işlem yapılandırması, database.php veritabanı yapılandırması, redis.php redis yapılandırması ve thinkorm.php thinkorm yapılandırması gibi dosyaları destekler. Bu yapılandırmalar webman tarafından otomatik olarak tanınır.
- Eklenti aşağıdaki yöntemle yapılandırmayı alır:
config('plugin.sağlayıcı.eklenti_adı.yapılandırma_dosyası.belirli_yapılandırma_ögesi');
, örneğinconfig('plugin.webman.push.app.app_key')
. - Eklenti kendi veritabanı yapılandırmasına sahipse, aşağıdaki şekilde erişir.
illuminate/database
içinDb::connection('plugin.sağlayıcı.eklenti_adı.belirli_bağlantı')
,thinkrom
içinDb::connct('plugin.sağlayıcı.eklenti_adı.belirli_bağlantı')
. - Eğer eklenti
app/
dizini altında iş dosyaları koyması gerekiyorsa, kullanıcı projesi ve diğer eklentilerle çakışmadığından emin olmalıdır. - Eklentinin ana projeye dosya veya dizin kopyalamasından mümkün olduğunca kaçınması gerekir; örneğin, çapraz alan eklentisi yalnızca yapılandırma dosyasını ana projeye kopyalamalı, ara yazılım dosyası
vendor/webman/cros/src
altında tutulmalı, ana projeye kopyalanmamalıdır. - Eklenti ad alanlarının büyük harfle başlaması önerilir; örneğin Webman/Console.
Örnek
webman/console
komut satırı kurulum
composer require webman/console
Eklenti Oluşturma
Oluşturulacak eklentinin adı foo/admin
olsun (isim, daha sonra composer ile yayımlanacak proje adı olmakta, küçük harfle yazılmalıdır).
Aşağıdaki komutu çalıştırın:
php webman plugin:create --name=foo/admin
Eklenti oluşturulduktan sonra, eklenti ile ilgili dosyaları saklamak için vendor/foo/admin
altında dizin ve eklenti ile ilgili yapılandırmaları saklamak için config/plugin/foo/admin
altında bir dizin oluşturulacaktır.
Dikkat
config/plugin/foo/admin
aşağıdaki yapılandırmaları destekler; app.php eklenti ana yapılandırması, bootstrap.php işlem başlatma yapılandırması, route.php yönlendirme yapılandırması, middleware.php ara yazılım yapılandırması, process.php özel işlem yapılandırması, database.php veritabanı yapılandırması, redis.php redis yapılandırması ve thinkorm.php thinkorm yapılandırması. Yapılandırma formatı webman ile aynıdır, bu yapılandırmalar otomatik olarak webman tarafından tanınır ve yapılandırmaya dahil edilir.
Kullanırkenplugin
ön eki ile erişin; örneğinconfig('plugin.foo.admin.app')
.
Eklenti Dışa Aktarma
Eklentiyi geliştirdikten sonra, eklentiyi dışa aktarmak için aşağıdaki komutu çalıştırın:
php webman plugin:export --name=foo/admin
Dışa aktarım
Açıklama
Dışa aktarıldıktan sonraconfig/plugin/foo/admin
dizinivendor/foo/admin/src
dizinine kopyalanacak ve otomatik olarak bir Install.php dosyası oluşturulacaktır. Install.php, otomatik kurulum ve otomatik kaldırma işlemleri sırasında bazı işlemleri gerçekleştirmek için kullanılır.
Kurulum varsayılan olarakvendor/foo/admin/src
içindeki yapılandırmayı mevcut projeconfig/plugin
dizinine kopyalamaktadır.
Kaldırma sırasında varsayılan işlem mevcut projeconfig/plugin
içindeki yapılandırma dosyalarını silmektir.
Eklentiyi kurulum ve kaldırma sırasında bazı özelleştirilmiş işlemler yapmak için Install.php'yi değiştirebilirsiniz.
Eklenti Gönderimi
- Varsayılan olarak, github ve packagist hesaplarınız olduğunu varsayıyoruz.
- github üzerinde bir admin projesi oluşturun ve kodunuzu yükleyin, proje adresi varsayılan olarak
https://github.com/kullanıcı_adınız/admin
olarak varsayalım. https://github.com/kullanıcı_adınız/admin/releases/new
adresine gidin vev1.0.0
gibi bir sürüm yayınlayın.- packagist adresine gidin, üst kısımdaki
Submit
seçeneğine tıklayın ve github proje adresinizihttps://github.com/kullanıcı_adınız/admin
gönderin, bu şekilde eklentinizin yayımlanmasını tamamladınız.
İpucu
Eğerpackagist
üzerinde eklenti gönderimi sırasında ad çakışması ortaya çıkarsa, farklı bir sağlayıcı adı seçebilirsiniz; örneğinfoo/admin
yerinemyfoo/admin
.
Sonrasında eklenti projenizin kodları güncellendikçe, kodu github'a senkronize etmeniz ve tekrar https://github.com/kullanıcı_adınız/admin/releases/new
adresine giderek yeni bir sürüm yayınlamanız gerekecek; ardından https://packagist.org/packages/foo/admin
sayfasına gidip Update
düğmesine tıklayarak sürümünüzü güncelleyebilirsiniz.
Eklentiye Komut Eklemek
Bazen eklentilerimiz bazı yardımcı işlevleri sağlayan özel komutlara ihtiyaç duyar; örneğin webman/redis-queue
eklentisini kurduktan sonra, proje otomatik olarak bir redis-queue:consumer
komutunu ekleyecektir; kullanıcı sadece php webman redis-queue:consumer send-mail
çalıştırdığında proje içinde bir SendMail.php tüketici sınıfı oluşturulacak; bu, hızlı geliştirmeyi kolaylaştırır.
Diyelim ki foo/admin
eklentisi foo-admin:add
komutunu eklemek istiyor, aşağıdaki adımları izleyin.
Yeni Komut Oluşturma
Komut dosyasını oluşturun vendor/foo/admin/src/FooAdminAddCommand.php
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command
{
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = 'Burada komut satırı açıklaması var';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Ekleme İsmi');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin ekle $name");
return self::SUCCESS;
}
}
Dikkat
Eklentiler arasında komut çakışmalarını önlemek için, komut satırı formatınınsağlayıcı-eklenti_adı:belirli_komut
şeklinde olması önerilir; örneğinfoo/admin
eklentisi için tüm komutlarfoo-admin:
ile başlamalıdır; örneğinfoo-admin:add
.
Yapılandırmayı Artırma
Yapılandırmayı oluşturun config/plugin/foo/admin/command.php
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....birden fazla yapılandırma ekleyebilirsiniz...
];
İpucu
command.php
, eklentilere özel komutlar tanımlamak için kullanılır; dizideki her bir öğe bir komut sınıfı dosyasını temsil eder ve her dosya bir komuta karşılık gelir. Kullanıcı komut satırını çalıştırdığında,webman/console
her eklentinincommand.php
dosyasında ayarlanan özel komutları otomatik olarak yükleyecektir. Komutlarla ilgili daha fazlasını öğrenmek için komut satırı belgesine bakabilirsiniz.
Dışa Aktarma Gerçekleştirin
php webman plugin:export --name=foo/admin
komutunu çalıştırarak eklentiyi dışa aktarın ve packagist
'e gönderin. Bu şekilde kullanıcı foo/admin
eklentisini kurduğunda, foo-admin:add
komutu da eklenecektir. php webman foo-admin:add jerry
çalıştırıldığında Admin ekle jerry
çıktısı verilecektir.