2017 © Pedro Peláez
 

yii-extension defaultpersister

Yii extension to save and restore model values in user session.

image

mikehaertl/defaultpersister

Yii extension to save and restore model values in user session.

  • Friday, March 29, 2013
  • by mike
  • Repository
  • 1 Watchers
  • 1 Stars
  • 17 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

DefaultPersister

This is a behavior for CModel (CFormModel, CActiveRecord) which allows to save the set of current attribute values as defaults for the current user and restore them at a later time., (*1)

Requirements

Should work with any 1.1.x version. Not tested with 1.0.x., (*2)

Usage

When this behavior is attached to a model, the current model values can be saved as default values with a simple command:, (*3)

$model->saveAsDefaults();

This will save all configured attributes in user state (session). To load these defaults back into the model you can use:, (*4)

$model->loadDefaults();

It's also possible to save or load only some attributes:, (*5)

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

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

To only load attributes that are safe in the current scenario, you can override the configured value of safeOnly (see below):, (*6)

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

Finally to clear the saved default values use:, (*7)

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

Configuration

Like all behaviors this extension has to be configured in the behaviors() method of a model:, (*8)

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

All attributes that should be saved with saveAsDefaults() must be listed in the attributes property of the behavior., (*9)

The complete list of configuration options is:, (*10)

  • attributes : list of attribute names that can be saved / loaded
  • safeOnly : if true, only attributes that are safe in the current scenario will be loaded with loadDefaults(). Default is false.
  • stateKeyPrefix : prefix for the user state key that is used to store defaults. Actual key name will be prefix + model class name. Defaults to default_.

If loadDefaults() is called before any values where ever saved with saveAsDefaults() the model is scanned for a method attributeDefaults(). If this method is found the returned values (name/value pairs) will be set as default. If no such method is available, loadDefaults() will do nothing in this case., (*11)

Since Version 1.1.0 resetDefaults() can be used to clear all attributes, one attribute or a list of attributes default values., (*12)

If YII_DEBUG is true, this behavior will trace some messages under the category application.behavior.defaultpersister., (*13)

Example

One scenario where this behavior can come in handy is e.g. when a model is used as complex filter model for a datagrid. Think of a backend area with pages for users and projects, each showing a filter form and a datagrid. Changes in the filter form trigger a AJAX grid update. Whenever backend personnel accesses such a page the last filter settings should be restored for convenience., (*14)

A controller action for this could look like:, (*15)

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,
        ));
}

Changelog

1.1.0

  • Fixed: Model defined attributes that are not in DB will also be set in AR
  • Added resetDefaults() method

1.0.0 - initial release

The Versions

29/03 2013

dev-master

9999999-dev https://github.com/mikehaertl/defaultpersister

Yii extension to save and restore model values in user session.

  Sources   Download

MIT

The Requires

  • php >=5.0.0

 

by Michael Haertl

model yii behavior

29/03 2013

1.1.0

1.1.0.0 https://github.com/mikehaertl/defaultpersister

Yii extension to save and restore model values in user session.

  Sources   Download

MIT

The Requires

  • php >=5.0.0

 

by Michael Haertl

model yii behavior