Uygulama Eklentileri
Her bir uygulama eklentisi, {ana proje}/plugin dizini altına yerleştirilmiş tamamlanmış bir uygulamadır.
İpucu
Yerelde bir uygulama eklentisi oluşturmak içinphp webman app-plugin:create {plugin_adı}komutunu (webman/console>=1.2.16 gerektirir) kullanabilirsiniz, örneğinphp webman app-plugin:create cmskomutu aşağıdaki dizin yapısını oluşturacaktır
plugin/
└── cms
├── app
│ ├── controller
│ │ └── IndexController.php
│ ├── exception
│ │ └── Handler.php
│ ├── functions.php
│ ├── middleware
│ ├── model
│ └── view
│ └── index
│ └── index.html
├── config
│ ├── app.php
│ ├── autoload.php
│ ├── container.php
│ ├── database.php
│ ├── exception.php
│ ├── log.php
│ ├── middleware.php
│ ├── process.php
│ ├── redis.php
│ ├── route.php
│ ├── static.php
│ ├── thinkorm.php
│ ├── translation.php
│ └── view.php
└── public
Görüldüğü gibi bir uygulama eklentisi, webman ile aynı dizin yapısına ve yapılandırma dosyalarına sahiptir. Aslında bir uygulama eklentisi geliştirmek, webman projesi geliştirmekle neredeyse aynı deneyime sahiptir, sadece aşağıdaki birkaç konuya dikkat etmek gerekmektedir.
Ad Alanları
Eklenti dizini ve adlandırma PSR4 standartlarına uygun olmalıdır, çünkü eklentiler plugin dizini altına yerleştirilir, bu nedenle ad alanları genellikle plugin ile başlar, örneğin plugin\cms\app\controller\UserController, burada cms eklentinin kaynak kodu ana dizinidir.
URL Erişimi
Uygulama eklentisi URL adresi yolu her zaman /app ile başlar, örneğin plugin\cms\app\controller\UserController için URL adresi http://127.0.0.1:8787/app/cms/user'dır.
Statik Dosyalar
Statik dosyalar plugin/{eklenti}/public dizinine yerleştirilir, örneğin http://127.0.0.1:8787/app/cms/avatar.png adresine erişmek aslında plugin/cms/public/avatar.png dosyasını almak anlamına gelir.
Yapılandırma Dosyaları
Eklentinin yapılandırması, normal webman projesiyle aynıdır, ancak genellikle eklentinin yapılandırması yalnızca o eklenti için geçerlidir, ana projeyi genellikle etkilemez.
Örneğin plugin.cms.app.controller_suffix değeri sadece eklentinin denetleyici ek soneki üzerinde etkilidir, ana projeyi etkilemez.
Örneğin plugin.cms.app.controller_reuse değeri sadece eklentinin denetleyiciyi yeniden kullanıp kullanmama durumunu etkiler, ana projeyi etkilemez.
Örneğin plugin.cms.middleware değeri sadece eklentinin ara yazılımını etkiler, ana projeyi etkilemez.
Örneğin plugin.cms.view değeri sadece eklentinin kullandığı görünümü etkiler, ana projeyi etkilemez.
Örneğin plugin.cms.container değeri sadece eklentinin kullandığı konteynırı etkiler, ana projeyi etkilemez.
Örneğin plugin.cms.exception değeri sadece eklentinin istisna işleme sınıfını etkiler, ana projeyi etkilemez.
Ancak, çünkü yönlendirme globaldir, bu nedenle eklenti yapılandırmanın yönlendirme de global düzeyde etkili olacağını unutmamak gerekmektedir.
Yapılandırmayı Almak
Belirli bir eklenti yapılandırmasını almak için config('plugin.{eklenti}.{belirli_yapılandırma}'); yöntemi kullanılır, örneğin config('plugin.cms.app') ile plugin/cms/config/app.php dosyasının tüm yapılandırmasını alabilirsiniz.
Aynı şekilde ana proje veya diğer eklentiler, config('plugin.cms.xxx') kullanarak cms eklentisinin yapılandırmasını alabilir.
Desteklenmeyen Yapılandırmalar
Uygulama eklentileri server.php, session.php yapılandırmalarını desteklemez, app.request_class, app.public_path, app.runtime_path yapılandırmalarını desteklemez.
Veritabanı
Eklenti kendi veritabanını yapılandırabilir, örneğin plugin/cms/config/database.php dosyası şu içeriğe sahiptir
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql bağlantı adıdır
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'veritabanı',
'username' => 'kullanıcı_adı',
'password' => 'parola',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin bağlantı adıdır
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'veritabanı',
'username' => 'kullanıcı_adı',
'password' => 'parola',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Kullanım şekli Db::connection('plugin.{eklenti}.{bağlantı_adı}'); şeklindedir, örneğin
use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();
Ana projenin veritabanını kullanmak istenirse, direkt olarak kullanılabilir, örneğin
use support\Db;
Db::table('user')->first();
// Varsayalım ki ana projede admin bağlantısı da yapılandırılmış
Db::connection('admin')->table('admin')->first();
İpucu
thinkorm'un kullanımı da benzerdir
Redis
Redis kullanımı veritabanıyla benzerdir, örneğin plugin/cms/config/redis.php dosyası şu içeriğe sahiptir
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
'cache' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
],
];
Kullanım şekli
use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');
Aynı şekilde, ana projenin Redis yapılandırmasını yeniden kullanmak istenirse
use support\Redis;
Redis::get('key');
// Varsayalım ki ana projede cache bağlantısı da yapılandırılmış
Redis::connection('cache')->get('key');
Günlük
Günlük sınıfının kullanımı veritabanı kullanımına benzer.
use support\Log;
Log::channel('plugin.admin.default')->info('test');
Ana projenin günlük yapılandırmasını yeniden kullanmak istiyorsanız, doğrudan şunu kullanabilirsiniz:
use support\Log;
Log::info('Günlük içeriği');
// Varsayalım ana projenin 'test' adında bir günlük yapılandırması var
Log::channel('test')->info('Günlük içeriği');
Uygulama Eklentisi Kurulumu ve Kaldırılması
Uygulama eklentisi kurulumu, eklenti dizinini {ana proje}/plugin dizinine kopyalamanız yeterlidir; yeniden yükleme veya yeniden başlatma gereklidir.
Kaldırma işlemi, ilgili eklenti dizinini {ana proje}/plugin dizininden doğrudan silerek gerçekleştirilebilir.