MikeHaertl/defaultpersister

Yii 扩展,用于在用户会话中保存和恢复模型值。

安装: 24

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:yii-extension

1.1.0 2013-03-29 14:10 UTC

This package is auto-updated.

Last update: 2024-08-24 03:44:22 UTC


README

这是一个针对 CModelCFormModelCActiveRecord)的行为,它允许保存当前属性值的集合作为当前用户的默认值,并在稍后恢复它们。

##要求

应与任何 1.1.x 版本兼容。未在 1.0.x 版本上测试。

##使用方法

当此行为附加到模型时,可以使用简单的命令将当前模型值保存为默认值

$model->saveAsDefaults();

这将保存所有配置的属性到用户状态(会话)。要将这些默认值加载回模型,可以使用

$model->loadDefaults();

也可以保存或加载一些属性

// Will merge with already saved defaults
$model->saveAsDefaults('name');
$model->saveAsDefaults(array('status','project_id'));

$model->loadDefaults('name');
$model->loadDefaults(array('name','project_id'));

为了只加载当前场景中安全的属性,可以覆盖配置的 safeOnly 值(见下文)

// true indicates that only safe attributes should be loaded
$model->loadDefaults(null,true);

最后,要清除保存的默认值,请使用

$model->resetDefaults();       // Reset all defaults
$model->resetDefaults('name'); // Reset specific attribute

##配置

像所有行为一样,此扩展必须在模型的 behaviors() 方法中配置

public function behaviors()
{
    return array(
        'defaults'=>array(
            'class'=>'ext.defaultpersister.AttributeDefaultsPersister',
            'attributes'=>array('name','status','project_id'),
        ),
    );
}

所有应该使用 saveAsDefaults() 保存的属性必须列在行为的 attributes 属性中。

完整的配置选项列表如下

  • attributes : 可保存/加载的属性名列表
  • safeOnly : 如果为 true,则只有当前场景中安全的属性才会用 loadDefaults() 加载。默认为 false
  • stateKeyPrefix : 用于存储默认值的用户状态键的前缀。实际键名将是前缀 + 模型类名。默认为 default_

如果在使用 saveAsDefaults() 保存了任何值之前调用 loadDefaults(),则将扫描模型以查找方法 attributeDefaults()。如果找到此方法,则返回的值(名称/值对)将被设置为默认值。如果没有这样的方法,则在这种情况下 loadDefaults() 将不执行任何操作。

从版本 1.1.0 开始,可以使用 resetDefaults() 清除所有属性、单个属性或属性列表的默认值。

如果 YII_DEBUG 为 true,则此行为将在 application.behavior.defaultpersister 类别下跟踪一些消息。

##示例

此行为可以派上用场的情况之一是,例如,当模型用作数据网格的复杂过滤器模型时。考虑一个后端区域,其中包含用户和项目的页面,每个页面都显示一个过滤器表单和一个数据网格。过滤器表单中的更改将触发 AJAX 网格更新。每当后端人员访问此类页面时,应该恢复最后过滤器设置以方便使用。

此操作的控制器动作可能如下所示

public function actionUserList()
{
    $filter=new User('filter');
    $filter->loadDefaults();

    // Set filter attributes on Ajax request and save them as default
    if (($isAjax=isset($_GET['ajax'])) && isset($_GET['User']))
    {
        $filter->attributes=$_GET['User'];
        if (!$filter->validate())   // Invalid filter settings!
            return;
        $filter->saveAsDefaults();
    }

    // Similar to the search() method in Yii's default CRUD models,
    // this method creates a CActiveDataProvider from the current
    // attribute values:
    $data=$filter->getDataProvider();

    if ($isAjax)
        // render only the partial for the data grid:
        $this->renderPartial('_userGrid',array(
            'data'=>$data,
        ));
    else
        // render complete view with filter and data grid
        $this->render('userList',array(
            'filter'=>$filter,
            'data'=>$data,
        ));
}

##更改日志

1.1.0

  • 修复:模型定义的属性,不在数据库中,也将设置在 AR 中
  • 添加了 resetDefaults() 方法

1.0.0 - 初始版本