amnah/yii2-classes

Yii2类库

安装次数: 3,353

依赖项: 0

建议者: 0

安全性: 0

星标: 12

关注者: 3

分支: 3

开放性问题: 1

类型:yii2-extension

dev-master 2015-07-20 00:38 UTC

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