Allows you to use arrow function closures in Twig
While Closure is a bit of a monkey patch, it's a pretty clean/simple one that relies on functionality that is already built into Twig
Closure requires Craft CMS 4.x or 5.x
To install Closure, follow these steps:
-
Open your terminal and go to your Craft project:
cd /path/to/project
-
Then tell Composer to require the package:
composer require nystudio107/craft-closure
Twig supports arrow function closures, but only in the filter, map, and reduce filters.
Twig unfortunately has no plans to allow for more widespread usage of arrow function closures.
Craft Closure allows you to use arrow function closures anywhere, which is especially useful with Laravel Collection methods, many of which take a closure as a parameter.
Once you've added the nystudio107/craft-closure
package to your project, no further setup is needed. This is because it operates as an auto-bootstrapping Yii2 Module.
You can then pass an arrow function closure as a parameter to anything that accepts them, such as many Laravel Collection methods:
{% set collection = collect(['a', 'b', 'c']) %}
{% set contains = collection.contains((value, key) => value == 'z') %}
Or you can assign an arrow function closure to a Twig variable for re-use:
{% set collection = collect(['a', 'b', 'c']) %}
{% set closure = (value, key) => value == 'a' %}
{% set contains = collection.contains(closure) %}
Using arrow function closures especially useful now that Craft element queries can all return a Collection via the .collect() method.
More here: Twig Arrow Functions
Some things to do, and ideas for potential features:
- Initial release
Brought to you by nystudio107