| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | 
							- <?php
 
- /**
 
-  * Created by PhpStorm.
 
-  * User:  NODELOG
 
-  * Date: 16/7/4
 
-  * Time: 下午12:28
 
-  */
 
- namespace plugins;
 
- use common\components\PackageInfo;
 
- use common\models\Plugin as PluginModel;
 
- use common\modules\rbac\models\Menu;
 
- use ReflectionClass;
 
- use Yii;
 
- use yii\base\BootstrapInterface;
 
- use yii\base\InvalidParamException;
 
- use yii\web\View;
 
- abstract class Plugin extends PackageInfo implements BootstrapInterface
 
- {
 
-     public $aliases = [];
 
-     /**
 
-      * @var string 模块所属应用ID(frontend,backend,wechat,api)
 
-      */
 
-     public $app = 'backend';
 
-     private $_model;
 
-     /**
 
-      * @return Plugin
 
-      */
 
-     public function getModel()
 
-     {
 
-         if ($this->_model == null) {
 
-             $model = PluginModel::findOne($this->getPackage());
 
-             if ($model == null) {
 
-                 $model = new PluginModel();
 
-                 $model->loadDefaultValues();
 
-                 $model->id = $this->getPackage();
 
-             }
 
-             $this->_model = $model;
 
-         }
 
-         return $this->_model;
 
-     }
 
-     /**
 
-      * 在菜单插件管理下添加一个新菜单
 
-      * @param $name
 
-      * @param $route
 
-      * @throws \yii\db\Exception
 
-      */
 
-     public function addMenu($name, $route)
 
-     {
 
-         $id = \Yii::$app->db->createCommand('SELECT `id` FROM {{%menu}} WHERE `name`="插件" AND `parent` IS NULL')->queryScalar();
 
-         if (!$id) {
 
-             $model = new Menu();
 
-             $model->name = '插件';
 
-             $model->route = '';
 
-             $model->parent = 24;
 
-             $model->save();
 
-             $id = $model->id;
 
-         }
 
-         $model = new Menu();
 
-         $model->name = $name;
 
-         $model->route = $route;
 
-         $model->parent = $id;
 
-         $model->save();
 
-     }
 
-     /**
 
-      * 删除一个插件管理下的子菜单
 
-      * @param $name
 
-      * @throws \yii\db\Exception
 
-      */
 
-     public function deleteMenu($name)
 
-     {
 
-         \Yii::$app->db->createCommand("DELETE FROM {{%menu}} WHERE `name`='{$name}'")->execute();
 
-     }
 
-     public function install()
 
-     {
 
-         return true;
 
-     }
 
-     public function uninstall()
 
-     {
 
-         return true;
 
-     }
 
-     /**
 
-      * 各插件在系统bootstrap阶段执行,前台执行frontend方法,后台执行backend方法.
 
-      * 比如插件要在后台添加一个控制器,则可以这样写
 
-      * ```
 
-         public function backend($app)
 
-         {
 
-             $app->controllerMap['donation'] = [
 
-                 'class' => '\plugins\donation\controllers\AdminController',
 
-                 'viewPath' => '@plugins/donation/views/admin'
 
-             ];
 
-         }
 
-      * ```
 
-      * @param \yii\base\Application $app
 
-      */
 
-     public function bootstrap($app)
 
-     {
 
-         if ($this->hasMethod($app->id)) {
 
-             call_user_func([$this, $app->id], $app);
 
-         }
 
-     }
 
-     private $_view;
 
-     /**
 
-      * Returns the view object that can be used to render views or view files.
 
-      * The [[render()]] and [[renderFile()]] methods will use
 
-      * this view object to implement the actual view rendering.
 
-      * If not set, it will default to the "view" application component.
 
-      * @return \yii\web\View the view object that can be used to render views or view files.
 
-      */
 
-     public function getView()
 
-     {
 
-         if ($this->_view === null) {
 
-             $this->_view = Yii::$app->getView();
 
-         }
 
-         return $this->_view;
 
-     }
 
-     /**
 
-      * Sets the view object to be used by this widget.
 
-      * @param View $view the view object that can be used to render views or view files.
 
-      */
 
-     public function setView($view)
 
-     {
 
-         $this->_view = $view;
 
-     }
 
-     /**
 
-      * Renders a view.
 
-      * The view to be rendered can be specified in one of the following formats:
 
-      *
 
-      * - path alias (e.g. "@app/views/site/index");
 
-      * - absolute path within application (e.g. "//site/index"): the view name starts with double slashes.
 
-      *   The actual view file will be looked for under the [[Application::viewPath|view path]] of the application.
 
-      * - absolute path within module (e.g. "/site/index"): the view name starts with a single slash.
 
-      *   The actual view file will be looked for under the [[Module::viewPath|view path]] of the currently
 
-      *   active module.
 
-      * - relative path (e.g. "index"): the actual view file will be looked for under [[viewPath]].
 
-      *
 
-      * If the view name does not contain a file extension, it will use the default one `.php`.
 
-      *
 
-      * @param string $view the view name.
 
-      * @param array $params the parameters (name-value pairs) that should be made available in the view.
 
-      * @return string the rendering result.
 
-      * @throws InvalidParamException if the view file does not exist.
 
-      */
 
-     public function render($view, $params = [])
 
-     {
 
-         return $this->getView()->render($view, $params, $this);
 
-     }
 
-     /**
 
-      * Renders a view file.
 
-      * @param string $file the view file to be rendered. This can be either a file path or a path alias.
 
-      * @param array $params the parameters (name-value pairs) that should be made available in the view.
 
-      * @return string the rendering result.
 
-      * @throws InvalidParamException if the view file does not exist.
 
-      */
 
-     public function renderFile($file, $params = [])
 
-     {
 
-         return $this->getView()->renderFile($file, $params, $this);
 
-     }
 
-     /**
 
-      * Returns the directory containing the view files for this widget.
 
-      * The default implementation returns the 'views' subdirectory under the directory containing the widget class file.
 
-      * @return string the directory containing the view files for this widget.
 
-      */
 
-     public function getViewPath()
 
-     {
 
-         $class = new ReflectionClass($this);
 
-         return dirname($class->getFileName()) . DIRECTORY_SEPARATOR . 'views';
 
-     }
 
- }
 
 
  |