---
name: "HTML::FormFu::Model::HashRef"
section: "3pm"
platform: "linux"
package: "libhtml-formfu-perl"
version: "2.07000-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/HTML::FormFu::Model::HashRef"
---

# HTML::FormFu::Model::HashRef(3pm)

handle hashrefs

## NAME

HTML::FormFu::Model::HashRef - handle hashrefs

## VERSION

version 2.07

## SYNOPSIS

```
  ---
    elements:
      - user_id
      - user_name
      - type: Repeatable
        nested_name: addresses
        elements:
          - type: Hidden
            name: id
          - street
  $form->model('HashRef')->default_values( {
    user_id => 123,
    user_name => 'Hans',
    addresses => [
      { id => 2,
        street => 'Somewhere' },
      { id => 3,
        street => 'Somewhere Else' }
    ]
    } );
  $form->default_model('HashRef');
  my $hashref = $form->model->create();
  # $hashref is very much the same as the hashref you passed to default_values()
```

## DESCRIPTION

If you need the content of a formular as hashref or for processing with other modules like `"JSON"` you can use this model.

## METHODS

### create

This method creates a hashref from a filled form. This form can be filled by calling "default\_values" in HTML::FormFu, default\_values of any other model class (e. g. HTML::FormFu::Model::DBIC) or by simply submitting the form.

If "deflators" is true all deflators are processed (defaults to `1`).

If "options" is true the value of all elements which have options like HTML::FormFu::Element::Select will be transformed.

```
  ---
    elements:
      - type: Select
        name: select
        options:
          - [1, "Foo"]
          - [2, "Bar"]
```

If the value of `"select"` is `1`, create will create this hashref:

```
  { 'select' => { label => 'Foo', value => 1 } }
```

If there is more than one value selected, an arrayref is created instead:

```
  { 'select' => [ { label => 'Foo', value => 1 },
                  { label => 'Bar', value => 2 } ] }
```

If "options" is false, the output will look like this:

```
  { 'select' => 1 }
```

respectively

```
  { 'select' => [1, 2] }
```

"options" is false by default.

To get a flattened hash, you can set `"/flatten"` to a true value (defaults to `0`). This will generate a hash which uses the nested name of each field as key and the value of this field as hash value. If there is a field which has more than one value, a counter is added. The above example would result in a hash like this using `"/flatten"`:

```
  { 'select_0' => 1,
    'select_1' => 2 }
```

### update

Alias for "create".

### default\_values

Populate a form using a hashref. This hashref has the same format as the output of "create". If "inflators" is true, all inflators will be processed (defaults to `1`).

## CONFIGURATION

These methods do not return the model object so chaining is not possible!

### options

Adds the label of a value to the hashref if the element has "options" in HTML::FormFu::Role::Element::Group. See "create" for an example. Defaults to `0`.

### flatten

Flattens the hash using Hash::Flatten. See "create" for an example. Defaults to `0`.

### deflators

If true, processes deflators in `"/create"`. Defaults to `1`.

### inflators

If true, processes inflators in `"/default_values"`. Defaults to `1`.

## SEE ALSO

HTML::FormFu, Hash::Flatten

## AUTHOR

Moritz Onken, `"onken@houseofdesign.de"`

## AUTHOR

Carl Franks \<cpan@fireartist.com\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by Carl Franks.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
