amnah / yii2-classes
Yii2类库
dev-master
2015-07-20 00:38 UTC
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-14 14:39:57 UTC
README
一系列类的集合。使用composer安装:"amnah/yii2-classes": "dev-master"
。
目录
- [行为/软删除] (#softdelete)
- [小部件/ExtListView] (#extlistview)
- [测试/DbToDbFixtureManager] (#dbtodbfixturemanager)
软删除
此类为ActiveRecord模型添加了软删除功能。
在使用之前,请查看此响应以确定您是否真的需要此功能。
用法
- 向您的数据库表添加列
`delete_time`
(int或timestamp,默认为NULL) - 将行为添加到您的模型
public function behaviors() { return [ 'softDelete' => [ 'class' => 'amnah\yii2\behaviors\SoftDelete', // these are the default values, which you can omit 'attribute' => 'delete_time', 'value' => null, // this is the same format as in TimestampBehavior 'safeMode' => true, // this processes '$model->delete()' calls as soft-deletes ], ]; }
- 调用函数
// soft-delete model $model->remove(); // restore model $model->restore(); // delete model from db $model->forceDelete(); // soft-delete model if $safeMode = true // delete model from db if $safeMode = false $model->delete();
- (可选)通过添加默认条件/范围更新模型,仅选择未删除的记录
class Customer extends ActiveRecord { public static function find() { return parent::find()->where(['delete_time' => null]); } }
ExtListView
ExtListView类通过添加视图和闭包扩展了默认的yii\widgets\ListView
类。
用法
使用视图
// @app/views/list/index.php <?php echo ExtListView::widget([ // ... "layoutView" => "_list", "layoutViewParams" => [ // variables to pass into layoutView ], "emptyView" => "_listEmpty", "emptyViewParams" => [ // variables to pass into emptyView ], // ... ]); ?>
// @app/views/list/_list.php <div>{summary}</div> <div>{pager}</div> <div id="listitems" class="row"> {items} </div>
使用闭包
<?php echo ExtListView::widget([ // ... "layoutView" => function() { return ' <div>{summary}</div> <div>{pager}</div> <div id="listitems" class="row"> {items} </div> '; }, 'emptyView' => function() { return '<div>nothing found</div>'; }, // ... ]); ?>
DbToDbFixtureManager
DbToDbFixtureManager类从另一个数据库加载 fixtures,而不是从php数组加载。
如果您经常更改数据库模式,这非常有用。例如,您可以通过phpMyAdmin简单地复制您的开发Db,并将其用作fixtureDb - 无需通过多个php文件手动更新数据。从那里,当您有sql命令可用时,操纵数据也更简单。
此外,如果您有大量 fixtures 数据,这也很有用。与在php中加载数组并手动插入每个记录(这是DbFixtureManager的当前实现)相比,使用sql复制表要快得多。
注意:当前,fixtureDb必须与testDb(同一服务器、用户和密码)在相同的数据库连接上。这是因为它通过使用insert into `fixtureDb`.`table select * from testDb.table
来加载数据。
用法
// @app/tests/unit/_config.php 'components' => [ 'fixture' => [ 'class' => 'amnah\yii2\test\DbToDbFixtureManager', 'fixtureDb' => 'databasename_test', ], ]
// @app/tests/unit/models/UserTest.php protected function setUp() { parent::setUp(); // load fixtures using same exact call $this->loadFixtures(['tbl_user']); }