PHPackages                             sauvesolutions/presenters - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. sauvesolutions/presenters

ActiveLibrary

sauvesolutions/presenters
=========================

Simple inverse presenter for Laravel

v0.2.5(6y ago)332MITPHP

Since Aug 28Pushed 6y ago1 watchersCompare

[ Source](https://github.com/SauveSolutions/presenters)[ Packagist](https://packagist.org/packages/sauvesolutions/presenters)[ RSS](/packages/sauvesolutions-presenters/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (9)Dependencies (2)Versions (11)Used By (0)

Presenters/Unpresenters Framework
=================================

[](#presentersunpresenters-framework)

Presenters are often used to convert data in a storage format for display. Typical implementations use the decorator pattern.

A similar problem exists when receiving information back from a user, for example on a web form. This needs to be converted from a human readable format into a format suitable for storage.

This is an **Unpresenter**.

This implementation provides four core capabilities

- Automatically handles date conversion from a defined format into a Carbon instance for storage
- Automatically handles checkboxes from forms (not nested)
- Handles validation simply
- Provides facility to mutate any attribute.

Requirements
------------

[](#requirements)

- Laravel
- As for Laravel &gt;= v4.1

Installation
------------

[](#installation)

You must install this library through Composer:

```
{
    "require": {
        "SauveSolutions/presenters": "0.2.*"
    }
}
```

Usage
-----

[](#usage)

Using the library is very simple.

1. Derive an unpresenter class from SauveSolutions\\presenters\\Unpresenter and implement the functionality you need, typically this is just listing the date variables, the checkbox variables and the validation rules.
2. In a controller instantiate an instance of the Unpresenter and pass the input array to the constructor.
3. Call validate and trap any ValidationExceptions thrown.
4. Access input variables directly from the unpresenter instance.

```
class ExampleUnpresenter extends SauveSolutions\presenters\Unpresenter {

    //specify any date fields
    protected $dates = ['a_date'];

    //specify any checkboxes that may be expected in the data sent with the web request
    protected $checkboxes = ['important'];

    /**
     * Specify the validation rules to be applied.
     *
     * @param $bUpdate boolean Pass true if the object is being updated, false otherwise.
     * @return array The validation rules.
     */
    public function getValidationRules($update) {
        //if updating an existing record then $update would be true, for a new record it would be false. This allows you
        //to create different rules for updates to existing records or creation of new records, e.g. unique checks that exclude the current record.
        //for this example however simply use a single response.

        return array(
                    'a_date' => 'date_format:d/m/Y'
                );

    }

}
```

Then in your controller method, for example Store.

```
public function store() {

    $input = Input::except('_token', '_method');

    $input = new ExampleUnpresenter($input);

    //simple try/catch block - the exception could be caught globally if preferred.
    try {
        //now try and validate
        $input->validate(false);
    } catch (SauveSolutions\exceptions\ValidationException $e) {
        //if it failed then redirect back.
        return Redirect::route('example.create')->withInput()->withErrors($e->getValidationErrors());
    }

    //now create a new example model.
    $model = new ExampleModel();
    $model->a_date = $input['a_date'];
    $model->save();

    //and finally let's show the index page.
    return Redirect::route('example.index');

}
```

Alternative
-----------

[](#alternative)

An alternative is to call $unpresenter-&gt;parseInput() which processes all of the input data and returns a plain php array of the transformed inputs.

FAQ
---

[](#faq)

*The DateConverter trait uses an English locale date format (d/m/Y) how can I change this?* The simplest approach would be to derive your own Unpresenter class which overrides DateConverter::getDateFormat(). It is expected in any non trivial application that the date format is an attribute of the User or a similar global setting. Then use your Unpresenter class as the base class of any other Unpresenters you create.

Laravel 4.3
-----------

[](#laravel-43)

Laravel 4.3 has implemented a new FormRequest object that performs the validation functionality of the Unpresenter class. Together with the ability to resolve a class from a hint on a controller method out of the IoC container will provide a further productivity boost. It is likely that the Unpresenter functionality can be combined with the FormRequest functionality in a subclass to provide the transformation capbility. This will be investigated in a future update.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~223 days

Recently: every ~0 days

Total

10

Last Release

2265d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/43636?v=4)[Alistair Stubbs](/maintainers/aestubbs)[@aestubbs](https://github.com/aestubbs)

---

Top Contributors

[![aestubbs](https://avatars.githubusercontent.com/u/43636?v=4)](https://github.com/aestubbs "aestubbs (19 commits)")

### Embed Badge

![Health badge](/badges/sauvesolutions-presenters/health.svg)

```
[![Health](https://phpackages.com/badges/sauvesolutions-presenters/health.svg)](https://phpackages.com/packages/sauvesolutions-presenters)
```

###  Alternatives

[laravel/horizon

Dashboard and code-driven configuration for Laravel queues.

4.2k84.2M225](/packages/laravel-horizon)[spatie/laravel-sitemap

Create and generate sitemaps with ease

2.6k14.6M107](/packages/spatie-laravel-sitemap)[spatie/laravel-honeypot

Preventing spam submitted through forms

1.6k6.0M60](/packages/spatie-laravel-honeypot)[laravel-notification-channels/apn

Apple APN Push Notification Channel

2021.9M4](/packages/laravel-notification-channels-apn)[specialtactics/l5-api

Dependencies for the Laravel API Boilerplate package

3672.8k2](/packages/specialtactics-l5-api)[takielias/tablar-kit

The Elegance of Tablar Dashboard

413.4k](/packages/takielias-tablar-kit)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
