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 cms
komutu 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.