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';
- }
- }
|