Temel Eklenti Oluşturma ve Yayınlama Süreci
İlke
- Cross-origin eklentisi örneğiyle: eklenti üç parçadan oluşur – cross-origin middleware dosyası,
middleware.phpyapılandırma dosyası ve komutla otomatik oluşturulanInstall.php. - Bu üç dosyayı paketleyip Composer’a yayınlamak için komut kullanılır.
- Kullanıcı Composer ile cross-origin eklentisini kurduğunda,
Install.phpmiddleware ve yapılandırmayı{ana proje}/config/pluginiçine kopyalar; webman yükleyip cross-origin’i etkinleştirir. - Kullanıcı Composer ile eklentiyi kaldırdığında,
Install.phpilgili middleware ve yapılandırma dosyalarını siler; eklenti otomatik olarak kaldırılır.
Kurallar
- Eklenti adı iki bölümden oluşur:
vendorveeklenti adı, örn.webman/push, Composer paket adıyla eşleşir. - Eklenti yapılandırma dosyaları
config/plugin/vendor/eklenti adı/altındadır (console komutu yapılandırma dizinini otomatik oluşturur). Eklenti yapılandırma gerektirmiyorsa otomatik oluşturulan dizin silinmelidir. - Eklenti yapılandırma dizini yalnızca şunları destekler:
app.php(ana yapılandırma),bootstrap.php(süreç başlatma),route.php(rotalar),middleware.php(middleware),process.php(özel süreçler),database.php(veritabanı),redis.php(Redis),thinkorm.php(thinkorm). Bunlar webman tarafından otomatik tanınır. - Yapılandırmaya erişim:
config('plugin.vendor.eklenti adı.yapılandırma dosyası.öğe');, örn.config('plugin.webman.push.app.app_key'). - Eklentinin kendi veritabanı yapılandırması varsa:
illuminate/databaseiçinDb::connection('plugin.vendor.eklenti adı.bağlantı'),thinkormiçinDb::connect('plugin.vendor.eklenti adı.bağlantı'). - Eklenti
app/içine iş dosyaları koyacaksa ana proje ve diğer eklentilerle çakışmaması gerekir. - Eklentiler mümkün olduğunca ana projeye dosya veya dizin kopyalamamalıdır. Örn. cross-origin eklentisinde yalnızca yapılandırma kopyalanır; middleware dosyaları
vendor/webman/cros/srciçinde kalır. - Eklenti namespace’leri için PascalCase önerilir, örn.
Webman/Console.
Örnek
webman/console komut satırını yükleyin
composer require webman/console
Eklenti oluştur
Oluşturulacak eklentinin adı foo/admin olsun (Composer üzerinden yayınlanacak proje adı, küçük harf olmalı). Çalıştırın:
php webman plugin:create --name=foo/admin
vendor/foo/admin (eklenti dosyaları) ve config/plugin/foo/admin (yapılandırma) oluşur.
Not
config/plugin/foo/adminşunları destekler:app.php,bootstrap.php,route.php,middleware.php,process.php,database.php,redis.php,thinkorm.php. webman ile aynı biçim, otomatik birleştirme.
Erişimdepluginöneki kullanın, örn.config('plugin.foo.admin.app').
Eklenti dışa aktar
Geliştirme bittikten sonra çalıştırın:
php webman plugin:export --name=foo/admin
Dışa aktar
Açıklama
Dışa aktarmadaconfig/plugin/foo/admin,vendor/foo/admin/srciçine kopyalanır veInstall.phpoluşturulur. Kurulum/kaldırma sırasındaInstall.phpçalışır.
Varsayılan kurulum:vendor/foo/admin/srciçindeki yapılandırmayı projeninconfig/plugindizinine kopyalar.
Varsayılan kaldırma: projeninconfig/plugindizinindeki eklenti yapılandırma dosyalarını siler.
Kurulum/kaldırma sırasında özel işlem içinInstall.phpdeğiştirilebilir.
Eklentiyi gönder
- GitHub ve Packagist hesabınız olduğunu varsayın.
- GitHub’da
admindeposu oluşturun ve kodu push edin, örn.https://github.com/kullanici-adiniz/admin. https://github.com/kullanici-adiniz/admin/releases/newadresine gidip release oluşturun, örn.v1.0.0.- Packagist’te
Submittıklayıphttps://github.com/kullanici-adiniz/admingönderin; eklenti yayınlanır.
İpucu
Packagist’te isim çakışması olursa başka bir vendor seçin, örn.foo/admin’ımyfoo/adminyapın.
Güncellemelerde: kodu GitHub’a push edin, https://github.com/kullanici-adiniz/admin/releases/new adresinde yeni bir release oluşturun, ardından https://packagist.org/packages/foo/admin sayfasında Update tıklayın.
Eklentiye komut ekleme
Bazı eklentilerin özel komutlara ihtiyacı vardır. Örn. webman/redis-queue kurunca proje redis-queue:consumer komutunu alır. php webman redis-queue:consumer send-mail çalıştırmak SendMail.php consumer sınıfını hızlıca üretir; geliştirme kolaylaşır.
foo/admin eklentisine foo-admin:add komutunu eklemek için:
Komut oluştur
vendor/foo/admin/src/FooAdminAddCommand.php dosyasını oluşturun
<?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 = 'Komut açıklaması';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Add name');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
Not
Eklentiler arasında komut çakışmasını önlemek içinvendor-plugin:komutbiçimini kullanın. Örn.foo/admineklentisinin tüm komutlarıfoo-admin:önekine sahip olmalıdır, örn.foo-admin:add.
Yapılandırma ekle
config/plugin/foo/admin/command.php oluşturun
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// Gerektiğinde daha fazla ekleyin...
];
İpucu
command.phpeklentinin özel komutlarını kaydeder. Her eleman bir komut sınıfıdır.webman/consolebunları otomatik yükler. Detay için Konsol komutları.
Dışa aktarmayı çalıştır
php webman plugin:export --name=foo/admin çalıştırarak eklentiyi dışa aktarıp Packagist’e yayınlayın. foo/admin kurulduktan sonra foo-admin:add komutu kullanılabilir olur. php webman foo-admin:add jerry çalıştırıldığında Admin add jerry yazdırılır.