MikeHaertl / defaultpersister
Yii 扩展,用于在用户会话中保存和恢复模型值。
Requires
- php: >=5.0.0
This package is auto-updated.
Last update: 2024-08-24 03:44:22 UTC
README
这是一个针对 CModel
(CFormModel
,CActiveRecord
)的行为,它允许保存当前属性值的集合作为当前用户的默认值,并在稍后恢复它们。
##要求
应与任何 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() 方法