netfant / luya-category
LUYA 分类扩展,简化添加分类模型的过程
dev-master
2019-06-04 11:32 UTC
Requires
- creocoder/yii2-nested-sets: 0.9.*
Requires (Dev)
- luyadev/luya-testsuite: ^1.0.11
This package is auto-updated.
Last update: 2024-09-04 23:29:30 UTC
README
此包使用 Yii2 Nested Sets 以简化嵌套集合的 CRUD 操作。
功能
- 可轻松添加到模型中
- 具有嵌套集合的 CRUD 操作。
安装 & 配置
Composer 安装
composer require netfant/luya-category:dev-master
配置
调整模型使其与此类似
namespace app\modules\category\models;
use Yii;
use luya\admin\ngrest\base\NgRestModel;
/**
* Category Model
*/
class Category extends NgRestModel
{
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['restcreate'][] = 'operation';
$scenarios['restcreate'][] = 'operationItem';
$scenarios['restupdate'][] = 'operation';
$scenarios['restupdate'][] = 'operationItem';
return $scenarios;
}
public function behaviors()
{
return array_merge(parent::behaviors(), [
'tree' => [
'class' => NestedSetModelBehavior::class
]
]);
}
public function transactions()
{
return [
self::SCENARIO_DEFAULT => self::OP_ALL,
];
}
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'ID'),
'lft' => Yii::t('app', 'Lft'),
'rgt' => Yii::t('app', 'Rgt'),
'depth' => Yii::t('app', 'Depth'),
'name' => Yii::t('app', 'Name'),
'slug' => Yii::t('app', 'Slug'),
'operation' => Yii::t('app', 'Operation'),
'operationItem' => Yii::t('app', 'Item'),
];
}
public function ngRestAttributeTypes()
{
return [
'lft' => 'number',
'rgt' => 'number',
'depth' => 'number',
'name' => 'text',
'slug' => ['slug', 'listener' => 'name'],
];
}
public function ngRestScopes()
{
return [
['list', ['lft', 'rgt', 'depth', 'name', 'slug']],
[['create', 'update'], ['name', 'operation', 'operationItem', 'slug']],
['delete', true],
];
}
public function extraFields()
{
return [
'operation',
'operationItem'
];
}
public function ngrestExtraAttributeTypes()
{
return [
'operation' => [
'selectArray',
'data' => [
NestedSetModelBehavior::OPERATION_MAKE_ROOT => 'Make root',
NestedSetModelBehavior::OPERATION_PREPEND_TO => 'Prepend to',
NestedSetModelBehavior::OPERATION_APPEND_TO => 'Append to',
NestedSetModelBehavior::OPERATION_INSERT_BEFORE => 'Insert before',
NestedSetModelBehavior::OPERATION_INSERT_AFTER => 'Insert after',
]
],
'operationItem' => [
'selectModel',
'modelClass' => Category::class,
'valueField' => 'id',
'labelField' => 'name',
],
];
}
public function ngRestAttributeGroups()
{
return [
[['operation', 'operationItem'], 'Category', 'collapsed' => false],
];
}
}
调整 API 控制器以使用 trait
namespace app\modules\category\admin\apis;
/**
* Category API Controller.
*
* File has been created with `crud/create` command.
*/
class CategoryController extends \luya\admin\ngrest\base\Api
{
use NestedSetApiControllerTrait;
/**
* @var string The path to the model which is the provider for the rules and fields.
*/
public $modelClass = 'app\modules\category\models\Category';
}