99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

如何開發(fā)一個 Notadd 插件

2018-05-23 12:02 更新

插件代碼結(jié)構(gòu)請參考項目

http://git.oschina.net/notadd/duoshuo

插件將包含如下幾個部分:

  • 插件注入
  • 路由注入
  • CSRF注入

插件安裝

對于 插件 的安裝,僅需將插件文件按照下面的目錄結(jié)構(gòu),放置到插件根目錄 extensions (wwwroot/extensions)下,然后執(zhí)行命令 composer update 即可。

目錄結(jié)構(gòu)

目錄結(jié)構(gòu)如下:

\vendor                   廠商目錄(目錄名稱僅為示例,開發(fā)時自行修改)
\extension                插件目錄(目錄名稱僅為示例,開發(fā)時自行修改)
\configuations            可加載配置文件目錄
\resources                資源目錄
\translations             翻譯文件目錄
\views                    視圖目錄
\src                      源碼目錄
\Extension                插件服務(wù)提供者定義文件
\composer.json            Composer 配置文件

一個 Notadd 的插件,是一個符合 composer 規(guī)范的包,所以,插件對第三方代碼有依賴時,可以在 composer.json 中的 require 節(jié)點中添加第三方的包。

而作為一個符合 Notadd 插件定義規(guī)范的包,composer.json 需擁有如下信息:

  • type 必須為 notadd-module
  • require 中必須添加包 notadd/installers

代碼參考如下(來自插件根目錄下的文件 composer.json, 文件中不應(yīng)該包含 // 的注釋信息,此處僅作為說明)

{
    "name": "notadd/duoshuo",
    "description": "Notadd Extension for Duoshuo.",
    "type": "notadd-extension",                                                      // type 必須設(shè)置為 notadd-extension
    "keywords": ["notadd", "duoshuo", "extension"],
    "homepage": "https://notadd.com",
    "license": "Apache-2.0",
    "authors": [
        {
            "name": "Notadd",
            "email": "notadd@ibenchu.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "Notadd\\Duoshuo\\": "src/"
        }
    },
    "require": {
        "php": ">=7.0",
        "notadd/installers": "0.5.*"                                                // 必須依賴包 notadd/installers
    }
}

插件注入

所謂 插件注入 ,是 Notadd 在加載插件的時候,會檢索插件目錄下的類 ModuleServiceProvider,此類必須命名為 ModuleServiceProvider,且需放在源碼根目錄中,且命名空間必須為 composer.json 的中 autoload 節(jié)點定義的符合 psr-4 規(guī)范的命名空間,否則 Notadd 將不能正確加載插件!

類 Extension 的父類必須為 Notadd\Foundation\Extension\Abstracts\Extension ,且必須包含 boot 方法。

類 Extension 的代碼參考如下:

<?php
/**
 * This file is part of Notadd.
 *
 * @author TwilRoad <269044570@qq.com>
 * @copyright (c) 2017, notadd.com
 * @datetime 2017-02-21 11:28
 */
namespace Notadd\Duoshuo;


use Notadd\Foundation\Extension\Abstracts\Extension as AbstractExtension;


/**
 * Class Extension.
 */
class Extension extends AbstractExtension
{
    /**
     * Boot provider.
     */
    public function boot()
    {
    }
}

路由注入

由于 Notadd 的路由注入,需要實現(xiàn)事件 RouteRegister,并在事件監(jiān)聽中添加 路由 。

所以,所謂的路由注入,實際是在類 Extension 實現(xiàn)事件 RouteRegister 的訂閱,并在事件訂閱類中注冊插件所需要的路由。

類 Extension 的代碼參考如下:

<?php
/**
 * This file is part of Notadd.
 *
 * @author TwilRoad <269044570@qq.com>
 * @copyright (c) 2017, notadd.com
 * @datetime 2017-02-21 11:28
 */
namespace Notadd\Duoshuo;


use Illuminate\Events\Dispatcher;
use Notadd\Duoshuo\Listeners\RouteRegister;
use Notadd\Foundation\Extension\Abstracts\Extension as AbstractExtension;


/**
 * Class Extension.
 */
class Extension extends AbstractExtension
{
    /**
     * Boot provider.
     */
    public function boot()
    {
        $this->app->make(Dispatcher::class)->subscribe(RouteRegister::class);
    }
}

事件訂閱類 RouteRegister 的代碼參考如下:

<?php
/**
 * This file is part of Notadd.
 *
 * @author TwilRoad <269044570@qq.com>
 * @copyright (c) 2017, notadd.com
 * @datetime 2017-02-21 11:50
 */
namespace Notadd\Duoshuo\Listeners;


use Notadd\Duoshuo\Controllers\DuoshuoController;
use Notadd\Foundation\Routing\Abstracts\RouteRegistrar as AbstractRouteRegistrar;


/**
 * Class RouteRegister.
 */
class RouteRegister extends AbstractRouteRegistrar
{
    /**
     * Handle Route Registrar.
     */
    public function handle()
    {
        $this->router->group(['middleware' => ['auth:api', 'cross', 'web'], 'prefix' => 'api/duoshuo'], function () {
            $this->router->post('backup', DuoshuoController::class . '@backup');
            $this->router->post('configuration', DuoshuoController::class . '@configuration');
            $this->router->post('number', DuoshuoController::class . '@number');
        });
    }
}

CSRF注入

所謂的CSRF注入,實際是在類 Extension 實現(xiàn)事件 CsrfTokenRegister 的訂閱,并在事件訂閱類中注冊插件所需要的路由。

類 Extension 的代碼參考如下:

<?php
/**
 * This file is part of Notadd.
 *
 * @author TwilRoad <269044570@qq.com>
 * @copyright (c) 2017, notadd.com
 * @datetime 2017-02-21 11:28
 */
namespace Notadd\Duoshuo;


use Illuminate\Events\Dispatcher;
use Notadd\Duoshuo\Listeners\CsrfTokenRegister;
use Notadd\Foundation\Extension\Abstracts\Extension as AbstractExtension;


/**
 * Class Extension.
 */
class Extension extends AbstractExtension
{
    /**
     * Boot provider.
     */
    public function boot()
    {
        $this->app->make(Dispatcher::class)->subscribe(CsrfTokenRegister::class);
    }
}

事件訂閱類 CsrfTokenRegister 的代碼參考如下:

<?php
/**
 * This file is part of Notadd.
 *
 * @author TwilRoad <269044570@qq.com>
 * @copyright (c) 2017, notadd.com
 * @datetime 2017-02-23 19:38
 */
namespace Notadd\Duoshuo\Listeners;


use Notadd\Foundation\Event\Abstracts\EventSubscriber;
use Notadd\Foundation\Http\Events\CsrfTokenRegister as CsrfTokenRegisterEvent;


/**
 * Class CsrfTokenRegister.
 */
class CsrfTokenRegister extends EventSubscriber
{
    /**
     * Name of event.
     *
     * @throws \Exception
     * @return string|object
     */
    protected function getEvent()
    {
        return CsrfTokenRegisterEvent::class;
    }


    /**
     * Register excepts.
     *
     * @param $event
     */
    public function handle(CsrfTokenRegisterEvent $event)
    {
        $event->registerExcept('api/duoshuo*');
    }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號