This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Fabien Potencier db8d87dce2 feature #21819 [Twig Bridge] A simpler way to retrieve flash messages (javiereguiluz)
This PR was squashed before being merged into the 3.3-dev branch (closes #21819).

Discussion
----------

[Twig Bridge] A simpler way to retrieve flash messages

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Getting flash messages in templates is more complex than it could be. Main problems:

1. It's too low level: you need to get the "flash bag" (and first, learn what a "flash bag" is) and then you need to call the internal method: `all()`, `get()`, etc.
2. You need to be careful because the session will start automatically when you ask for flashes (even if there are no flashes). You can prevent this with the `{% if app.session is not null and app.session.started %}` code, but it's boring to always use that.

So, I propose to add a new `app.flashes` helper that works as follows.

---

## Get all the flash messages

### Before

```twig
{% if app.session is not null and app.session.started %}
    {% for label, messages in app.session.flashbag.all %}
        {% for message in messages %}
            <div class="alert alert-{{ label }}">
                {{ message }}
            </div>
        {% endfor %}
    {% endfor %}
{% endif %}
```

### After

```twig
{% for label, messages in app.flashes %}
    {% for message in messages %}
        <div class="alert alert-{{ label }}">
            {{ message }}
        </div>
    {% endfor %}
{% endfor %}
```

---

## Get only the flashes of type `notice`

```twig
{% if app.session is not null and app.session.started %}
    {% for message in app.session.flashbag.get('notice') %}
        <div class="alert alert-notice">
            {{ message }}
        </div>
    {% endfor %}
{% endif %}
```

### After

```twig
{% for message in app.flashes('notice') %}
    <div class="alert alert-notice">
        {{ message }}
    </div>
{% endfor %}
```

---

As an added bonus, you can get any number of flash messages because the method allows to pass an array of flash types:

```twig
{% for label, messages in app.flashes(['warning', 'error']) %}
    {% for message in messages %}
        <div class="alert alert-{{ label }}">
            {{ message }}
        </div>
    {% endfor %}
{% endfor %}
```

Commits
-------

5a56b23327 [Twig Bridge] A simpler way to retrieve flash messages
2017-03-23 08:48:12 -07:00
.composer Drop hirak/prestissimo 2016-05-12 07:44:15 -05:00
.github [github] Add a reminder about CHANGELOG.md files 2017-03-06 21:03:23 +01:00
src/Symfony feature #21819 [Twig Bridge] A simpler way to retrieve flash messages (javiereguiluz) 2017-03-23 08:48:12 -07:00
.editorconfig Add EditorConfig File 2012-06-16 14:08:15 +02:00
.gitignore Add appveyor.yml for C.I. on Windows 2015-08-25 23:41:37 +02:00
.php_cs.dist Merge branch '2.7' into 2.8 2017-01-21 08:53:15 -08:00
.travis.yml Merge branch '3.2' 2017-03-08 17:48:13 -08:00
appveyor.yml Merge branch '3.1' into 3.2 2017-01-03 12:28:32 +01:00
CHANGELOG-3.0.md Merge branch '2.8' into 3.1 2016-08-05 10:37:39 +02:00
CHANGELOG-3.1.md updated CHANGELOG for 3.1.9 2017-01-12 12:43:31 -08:00
CHANGELOG-3.2.md updated CHANGELOG for 3.2.6 2017-03-10 10:30:45 -08:00
composer.json feature #21093 [Lock] Create a lock component (jderusse) 2017-03-22 11:45:21 -07:00
CONTRIBUTING.md Mention the community review guide 2016-12-18 22:02:35 +01:00
CONTRIBUTORS.md Merge branch '2.8' into 3.2 2017-03-06 11:30:27 -08:00
LICENSE updated LICENSE year 2017-01-02 12:30:00 -08:00
phpunit Use PHPUnit 6.0 on PHP 7.* test lines 2017-02-21 14:43:45 +01:00
phpunit.xml.dist [Cache] Implement PSR-16 SimpleCache v1.0 2017-01-23 14:57:50 +01:00
README.md Rename StackOverflow to Stack Overflow 2017-03-08 11:34:04 +01:00
UPGRADE-3.0.md Merge branch '2.8' into 3.2 2017-01-31 22:49:23 +01:00
UPGRADE-3.1.md [Serializer] Remove AbstractObjectNormalizer::isAttributeToNormalize 2016-12-08 16:02:32 +01:00
UPGRADE-3.2.md fixed CS 2017-03-05 08:45:00 -08:00
UPGRADE-3.3.md feature #18140 [Console] Add console.ERROR event and deprecate console.EXCEPTION (wouterj) 2017-03-22 16:10:45 -07:00
UPGRADE-4.0.md feature #18140 [Console] Add console.ERROR event and deprecate console.EXCEPTION (wouterj) 2017-03-22 16:10:45 -07:00

Symfony is a PHP framework for web applications and a set of reusable PHP components. Symfony is used by thousands of web applications (including BlaBlaCar.com and Spotify.com) and most of the popular PHP projects (including Drupal and Magento).

Installation

Documentation

Community

Contributing

Symfony is an Open Source, community-driven project with thousands of contributors. Join them contributing code or contributing documentation.

Security Issues

If you discover a security vulnerability within Symfony, please follow our disclosure procedure.

About Us

Symfony development is sponsored by SensioLabs, lead by the Symfony Core Team and supported by Symfony contributors.