| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 
							- <?php
 
- namespace common\modules\rbac\models;
 
- use common\behaviors\CacheInvalidateBehavior;
 
- use common\behaviors\PositionBehavior;
 
- use common\modules\rbac\components\Configs;
 
- use common\modules\rbac\components\MenuHelper;
 
- use Yii;
 
- use yii\helpers\Html;
 
- /**
 
-  * This is the model class for table "menu".
 
-  *
 
-  * @property int $id Menu id(autoincrement)
 
-  * @property string $name Menu name
 
-  * @property int $parent Menu parent
 
-  * @property string $route Route for this menu
 
-  * @property int $order Menu order
 
-  * @property string $data Extra information for this menu
 
-  * @property Menu $menuParent Menu parent
 
-  * @property Menu[] $menus Menu children
 
-  *
 
-  * @author Misbahul D Munir <misbahuldmunir@gmail.com>
 
-  *
 
-  * @since 1.0
 
-  */
 
- class Menu extends \yii\db\ActiveRecord
 
- {
 
-     public $parent_name;
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public static function tableName()
 
-     {
 
-         return Configs::instance()->menuTable;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public static function getDb()
 
-     {
 
-         if (Configs::instance()->db !== null) {
 
-             return Configs::instance()->db;
 
-         } else {
 
-             return parent::getDb();
 
-         }
 
-     }
 
-     public function behaviors()
 
-     {
 
-         return [
 
-             [
 
-                 'class' => PositionBehavior::className(),
 
-                 'positionAttribute' => 'order',
 
-                 'groupAttributes' => [
 
-                     'parent' // multiple lists varying by 'parent'
 
-                 ],
 
-             ],
 
-             [
 
-                 'class' => CacheInvalidateBehavior::className(),
 
-                 'tags' => [
 
-                     MenuHelper::CACHE_TAG
 
-                 ]
 
-             ]
 
-         ];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function rules()
 
-     {
 
-         return [
 
-             [['name'], 'required'],
 
-             ['name', 'unique', 'targetAttribute' => ['name', 'parent']],
 
-             [['parent'], 'in', 'range' => static::find()->select(['id'])->column(), 'message' => 'Menu "{value}" not found.', ],
 
-             [['data', 'parent'], 'default'],
 
-             ['route', function($attribute){
 
-                 if (!empty($this->$attribute)) {
 
-                     $this->addError('route', '一级菜单不能有地址');
 
-                     return false;
 
-                 }
 
-                 return true;
 
-             }, 'when' => function($model){
 
-                 return is_null($model->parent);
 
-             }],
 
-             ['icon', 'string'],
 
-             [['order'], 'integer'],
 
-             [['route'], 'in',
 
-                 'range' => static::getSavedRoutes(),
 
-                 'message' => 'Route "{value}" not found.', ],
 
-         ];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function attributeLabels()
 
-     {
 
-         return [
 
-             'id' => Yii::t('rbac', 'ID'),
 
-             'name' => Yii::t('rbac', 'Name'),
 
-             'parent' => Yii::t('rbac', 'Parent'),
 
-             'route' => Yii::t('rbac', 'Route'),
 
-             'icon' => Yii::t('rbac', 'Icon'),
 
-             'order' => Yii::t('rbac', 'Order'),
 
-             'data' => Yii::t('rbac', 'Data'),
 
-         ];
 
-     }
 
-     /**
 
-      * Get menu parent.
 
-      *
 
-      * @return \yii\db\ActiveQuery
 
-      */
 
-     public function getMenuParent()
 
-     {
 
-         return $this->hasOne(self::className(), ['id' => 'parent']);
 
-     }
 
-     /**
 
-      * Get menu children.
 
-      *
 
-      * @return \yii\db\ActiveQuery
 
-      */
 
-     public function getMenus()
 
-     {
 
-         return $this->hasMany(self::className(), ['parent' => 'id']);
 
-     }
 
-     /**
 
-      * Get saved routes.
 
-      *
 
-      * @return array
 
-      */
 
-     public static function getSavedRoutes()
 
-     {
 
-        
 
-         $result = [];
 
-         foreach (Yii::$app->getAuthManager()->getPermissions() as $name => $value) {
 
-             if ($name[0] === '/' && substr($name, -1) != '*') {
 
-                 $result[] = $name;
 
-             }
 
-         }
 
-         return $result;
 
-     }
 
-     public static function getDropDownList($tree = [], &$result = [], $deep = 0, $separator = '        ')
 
-     {
 
-         $deep++;
 
-         foreach($tree as $list) {
 
-             $result[$list['id']] = str_repeat($separator, $deep-1) . $list['name'];
 
-             if (isset($list['children'])) {
 
-                 self::getDropDownList($list['children'], $result, $deep);
 
-             }
 
-         }
 
-         return $result;
 
-     }
 
- }
 
 
  |