Uygulama Eklentisi
Her bir uygulama eklentisi, {ana proje}/plugin
dizininde bulunan tam bir uygulamadır.
İpucu
php webman app-plugin:create {eklenti adı}
komutunu kullanarak yerel olarak bir uygulama eklentisi oluşturabilirsiniz.
Örneğin,php webman app-plugin:create cms
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
Bir uygulama eklentisinin, webman ile aynı dizin yapısına ve yapılandırma dosyalarına sahip olduğunu görüyoruz. Aslında bir uygulama eklentisi geliştirmek, bir webman projesi geliştirmekle hemen hemen aynı deneyimi sunar; sadece aşağıdaki birkaç noktaya dikkat etmeniz gerekir.
Ad Alanı
Eklenti dizini ve adlandırması PSR4 standartlarına uyar; çünkü eklentiler plugin dizininde yer alır, bu nedenle ad alanları plugin ile başlar. Örneğin, plugin\cms\app\controller\UserController
, burada cms eklentinin kaynak ana dizinidir.
URL Erişimi
Uygulama eklentisinin URL adresleri /app
ile başlar; örneğin plugin\cms\app\controller\UserController
URL adresi http://127.0.0.1:8787/app/cms/user
olur.
Statik Dosyalar
Statik dosyalar plugin/{eklenti}/public
altında yer alır; örneğin http://127.0.0.1:8787/app/cms/avatar.png
adresine erişmek, aslında plugin/cms/public/avatar.png
dosyasını alır.
Yapılandırma Dosyaları
Eklentinin yapılandırması, normal bir webman projesiyle aynıdır; ancak eklenti yapılandırması genellikle yalnızca mevcut eklenti için geçerlidir ve ana projeyi genellikle etkilemez. Örneğin, plugin.cms.app.controller_suffix
değeri yalnızca eklentinin denetleyici uzantısını etkiler, ana proje üzerinde bir etkisi yoktur. Örneğin, plugin.cms.app.controller_reuse
değeri yalnızca eklentinin denetleyiciyi yeniden kullanmasını etkiler, ana proje üzerinde bir etkisi yoktur. Örneğin, plugin.cms.middleware
değeri yalnızca eklentinin ara yazılımını etkiler, ana proje üzerinde bir etkisi yoktur. Örneğin, plugin.cms.view
değeri yalnızca eklentinin kullandığı görünümü etkiler, ana proje üzerinde bir etkisi yoktur. Örneğin, plugin.cms.container
değeri yalnızca eklentinin kullandığı konteyneri etkiler, ana proje üzerinde bir etkisi yoktur. Örneğin, plugin.cms.exception
değeri yalnızca eklentinin istisna işleme sınıfını etkiler, ana proje üzerinde bir etkisi yoktur.
Ancak, yönlendirme küresel olduğu için, eklenti yapılandırmasının yönlendirmeleri de küresel etkiye sahiptir.
Yapılandırmayı Almak
Belirli bir eklenti yapılandırmasını almak için yöntem config('plugin.{eklenti}.{belirli yapılandırma}');
şeklindedir. Örneğin, plugin/cms/config/app.php
içindeki tüm yapılandırmayı almak için yöntem config('plugin.cms.app')
şeklindedir. Aynı şekilde, ana proje veya diğer eklentiler de config('plugin.cms.xxx')
yöntemini 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ı
Eklentiler, kendi veritabanlarını yapılandırabilir; örneğin plugin/cms/config/database.php
içeriği aşağıdaki gibidir:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql bağlantı adı
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'veritabanı',
'username' => 'kullanıcı adı',
'password' => 'şifre',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
'admin' => [ // admin bağlantı adı
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'veritabanı',
'username' => 'kullanıcı adı',
'password' => 'şifre',
'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 isterseniz, doğrudan kullanabilirsiniz; ö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 da benzer bir kullanıma sahiptir.
Redis
Redis kullanımı veritabanına benzer; örneğin plugin/cms/config/redis.php
:
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 isterseniz:
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ı kullanımı da 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 isterseniz, doğrudan kullanabilirsiniz:
use support\Log;
Log::info('günlük içeriği');
// Varsayalım ki ana projede test 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 eklentisini kurarken yalnızca eklenti dizinini {ana proje}/plugin
dizinine kopyalamanız yeterlidir; etkinleşmesi için reload veya restart yapmak gerekir. Kaldırmak için doğrudan {ana proje}/plugin
altındaki ilgili eklenti dizinini silmeniz yeterlidir.