zyh/yii2-plugins

这是一个插件管理,钩子,事件管理

Installs: 11

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 1

Forks: 0

Open Issues: 0

Type:yii2-extension

dev-master 2019-11-27 13:46 UTC

This package is auto-updated.

Last update: 2024-05-23 18:19:44 UTC


README

这是一个基于Yii的插件管理系统,可使用Yii自带的事件及自定义钩子Hooks来创建自定义的插件

主要特性

  • 基于Yii模块创建的插件管理系统
    • 支持Yii的局部、全局、Event事件的使用
    • 支持Hook的使用
    • 支持自定义国际化语义
    • 支持自定义模板页面
    • 支持自定义布局
    • 支持自定义安装sql文件
    • 支持安装、卸载、更新、禁用、启用时自定义的方法

安装

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist zyh/yii2-plugins "master-dev"

or add

"zyh/yii2-plugins": "master-dev"

to the require section of your composer.json file.

Yii模块配置

Once the extension is installed, simply use it in your code by :

    //模块配置
    'modules'=>[
        'plugins' => [
            'class' => 'zyh\plugins\Module',
            /*
            //自定义插件管理后台控制controller
            'controllerMap' => [
                'plugins' => [
                    // 指向自己的控制器
                    'class' => 'app\controllers\PluginsController',
                ]
            ],
            'params' => [
                // 插件广场接口
                'apiUrl' => 'http://30071.dev.91gaoding.com/api/plugins',
                // 插件下载接口(返回插件下载地址)
                'downloadUrl' => 'http://30071.dev.91gaoding.com/plugins/download'
                // 返回json {"msg":{"data":{"url":"下载zip地址"}}}
            ],
            */
            
            /*
             // 可自定义自己页面位置
            'layout' => 'main', // 布局名称
            'layoutPath' => '@app/views/layouts', // 布局位置
            'viewPath' => '@app/views', // 页面位置
            */
            
            'pluginRoot' => '@app/plugins', ##放置插件的namespace目录
            'pluginNamespace' => 'app\plugins',  ##放置插件的namespace
        ],
        ...
    ]

使用方式

先对Yii模块进行配置,再拷贝事例中的代码,直接运行

Hook使用

 Hook::listen('admin_login_init',$params);

Yii Event使用

// 当前继承的component类
$this->trigger('admin_login_init');
 
or
 
// Yii全局事件
\Yii::trigger('admin_login_init')
 
or 

// Event事件
Event::trigger('admin_login_init');

插件目录说明

拷贝example下menu到你创建的pluginRoot目录文件夹下

  • assets (js,css,img)资源拷贝项目web目录下
  • controllers 插件控制(必须有)
  • messages 自定义语义
  • views 插件模板和Yii模板文件使用方式一致(可自定义主题)
  • info.ini 插件配置(必需有)
  • install.sql 插件安装后导入的sql语句
  • Menu.php 插件主类(必需有)
  • MenuAsset.php 如有js,img,css存放地址

assets

js/
img
css

controllers

<?php
class MenuController extends PluginBaseController
{

    public function actionIndex(){
        // 插件国际化语义调用方式 输出:测试
        echo \Yii::t('menu','test');
        return $this->render('menu/index');
    }
}

注意: 如果插件名和控制器名一致路由为(menu/action)和(menu/controller/action)

messages

<?php
return [
   "Test" => "测试", 
];

注意: 如果插件名和控制器名一致翻译文件命名为插件名(例如:menu.php)和插件名/controller(例如:menu/test)

info

name = menu
title = 菜单插件
intro = 可在线执行FastAdmin的命令行相关命令
author = ZhangYongHui
website = http://www.fastadmin.net
version = 1.0.5
state = 1

插件类

use zyh\plugins\components\Plugin;

<?php

class Menu extends Plugin
{

    public function hooks()
    {
        return [
            'admin_login_init' => 'loginInit',  // 钩子名 => 方法名
        ];
    }

    public function events()
    {
        return [
            // 继承component的类名
            'app\controllers\SiteController' => [
                // 事件名
                'admin_login_init' => [
                    'loginInit2',   // 方法名
                    ['loginInit3','adsfasdf',false]  // [方法名,参数,追加]
                ]
            ],
        ];
    }

    /**
     * $params 参数
     * $extra  其他参数
     */
    public function loginInit($params, $extra)
    {
        echo "登录初始化";
    }

    /**
     * $event 事件
     */
    public function loginInit2($event)
    {
        echo "登录初始化";
    }

    public function loginInit3($event)
    {
        echo "登录初始化";
    }


    public function install()
    {
        // 自定义新增方法,如(菜单)方法
        return true;
    }

    public function uninstall()
    {
        // 自定义删除方法,如(菜单)方法
        return true;
    }
}

资源类

use yii\web\AssetBundle;

class MenuAsset extends AssetBundle
{
    //资源文件的源文件位置
    public $sourcePath = '@app/plugins/menu/assets';
}
// 页面资源调用方式
$configJs = MenuAsset::register($this)->baseUrl.'/js/config.js';