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.