kak / behaviors
为 Yii2 优化的 behaviors 集合
v0.2
2020-05-13 11:06 UTC
Requires
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-08-28 22:12:21 UTC
README
多对多行为 (此项目分支自 https://github.com/voskobovich/ManyToManyBehavior) 物化路径行为 (此项目分支自 https://github.com/matperez/yii2-materialized-path)
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一
php composer.phar require --prefer-dist kak/behavior "*"
或
"kak/behavior": "*"
将以下内容添加到您的 composer.json
文件的 require 部分。
使用 ManyToManyBehavior
#MaterializedPathBehavior
将以下代码插入到您的 ActiveRecord 类中
use kak\models\behaviors\MaterializedPathBehavior // ... // step 1 public function behaviors() { return [ [ 'class' => MaterializedPathBehavior::class ], ]; } // step 2 /** * Query factory * @return MaterializedPathQuery */ public static function find() { return new MaterializedPathQuery(get_called_class()); }
创建一个继承自 ActiveQuery 的 MaterializedPathQuery 类
/** Class MaterializedPathQuery * @return bool */ class MaterializedPathQuery extends ActiveQuery { /** * Get root nodes * @return MaterializedPathModel */ public function getChildren($path) { /** @var ActiveQuery $this */ $this->andWhere(['path' => '.'.$path.'%']); return $this; } }
设置物化路径
$categoryModel = new Category(['parent_id' => 123 ]); $categoryModel->save();
#SluggableBehavior
将以下代码插入到您的 ActiveRecord 类中
use kak\models\behaviors\SluggableBehavior; public function behaviors() { return [ [ 'class' => SluggableBehavior::class, 'attribute' => 'title', 'slugAttribute' => 'slug', // 'replacements' => [ '_' => '-'] // 'limit' => '100' // truncate text // 'delimiter' => '-' // default delimiter ] ]; }
#CallbackBehavior
将以下代码插入到您的 ActiveRecord 类中
use kak\models\behaviors\CallbackBehavior; // ... public function behaviors() { return [ 'class' => CallbackBehavior::class, 'params' => [ 'operators' => [ 'attribute' => 'operator_list', // implode/explode method 'method' => CallbackBehavior::METHOD_STRING, 'delimiter' => '|', // set other delimiter only METHOD_STRING // or json_encode/json_decode method 'method' => CallbackBehavior::METHOD_JSON, // or custom callback 'set' => function ($value) { return implode(',', $value); }, 'get' => function ($value) { return explode(',', $value); }, ], ], ]; }
#UUIDBehavior
- 如果使用 PostgreSQL,则设置
uuid-ossp
模块 如果不存在,则创建 "uuid-ossp" 扩展
将以下代码插入到您的 ActiveRecord 类中
use kak\models\behaviors\UUIDBehavior; // ... public function behaviors() { return [ [ 'class' => UUIDBehavior::class, 'createViaDb' => true // is use postgress ], ; }