This PR was merged into the 3.x branch.
Discussion
----------
Update u.rst to clarify truncate method's third argument behavior
Current wording "to preserve whole words" suggests setting the argument to ``true`` preserves words. However, the parameter is ``$cut`` (defaults to ``true`` for cutting at exact length), and ``false`` is required to preserve whole words.
Commits
-------
28c2606be7 Update u.rst to clarify truncate method's third argument behavior
This PR was merged into the 3.x branch.
Discussion
----------
Fix documentation for getOperators()
Closes#4710
Commits
-------
ae51f93f70 Fix documentation for getOperators()
Current wording "to preserve whole words" suggests setting the argument to ``true`` preserves words. However, the parameter is ``$cut`` (defaults to ``true`` for cutting at exact length), and ``false`` is required to preserve whole words.
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Enhance enum.rst with dynamic case example
Added example for dynamic enum case display.
Commits
-------
bcc5ffc301 Enhance enum.rst with dynamic case example
It may be obvious, but I first thought initializing an BackendEnum with a certain value could be possible with `enum(FQCN, value)`, but it does not, it always returns the first case instance (if exists).
Instead, `enum(FQCN).from(value)` must be used, I think it's worth to improve `enum()` examples.
This PR was merged into the 3.x branch.
Discussion
----------
Coding standard suggestion about empty content
Hi `@fabpot`
As suggested by `@stof` https://github.com/symfony/symfony/pull/60761#discussion_r2140647490
This would allow writing `{#--#}` rather than `{#- -#}` when following the twig coding standard.
Commits
-------
0b93a1fa5a Stof suggestion about empty content
This PR was squashed before being merged into the 3.x branch.
Discussion
----------
Create attributes `AsTwigFilter`, `AsTwigFunction` and `AsTwigTest` to ease extension development
One drawback to writing extensions at present is that the declaration of functions/filters/tests is not directly adjacent to the methods. It's worse for runtime extensions because they need to be in 2 different classes. See [`SerializerExtension`](https://github.com/symfony/symfony/blob/7.0/src/Symfony/Bridge/Twig/Extension/SerializerExtension.php) and [`SerializerRuntime`](https://github.com/symfony/symfony/blob/7.0/src/Symfony/Bridge/Twig/Extension/SerializerRuntime.php) as an example.
By using attributes for filters, functions and tests definition, we can make writing extensions more expressive, and use reflection to detect particular options (`needs_environment`, `needs_context`, `is_variadic`).
Example if we implemented the `formatDate` filter: https://github.com/twigphp/Twig/blob/aeeec9a5e907a79e50a6bb78979154599401726e/extra/intl-extra/IntlExtension.php#L392-L395
By using the `AsTwigFilter` attribute, it is not necessary to create the `getFilters()` method. The `needs_environment` option is detected from method signature. The name is still required as the method naming convention (camelCase) doesn't match with Twig naming convention (snake_case).
```php
use Twig\Extension\Attribute\AsTwigFilter;
class IntlExtension
{
#[AsTwigFilter(name: 'format_date')]
public function formatDate(Environment $env, $date, ?string $dateFormat = 'medium', string $pattern = '', $timezone = null, string $calendar = 'gregorian', string $locale = null): string
{
return $this->formatDateTime($env, $date, $dateFormat, 'none', $pattern, $timezone, $calendar, $locale);
}
}
```
This approach does not totally replace the current definition of extensions, which is still necessary for advanced needs. It does, however, make for more pleasant reading and writing.
This makes writing lazy-loaded runtime extension the easiest way to create Twig extension in Symfony: https://github.com/symfony/symfony/pull/52748
Related to https://github.com/symfony/symfony/issues/50016
Is there any need to cache the parsing of method attributes? They are only read at compile time, but that can have a performance impact during development or when using dynamic templates.
Commits
-------
5886907b28 Create attributes `AsTwigFilter`, `AsTwigFunction` and `AsTwigTest` to ease extension development
This PR was merged into the 3.x branch.
Discussion
----------
[Docs] Replace `=` by `:` in code examples
Replace `=` by `:` in code examples
* function/include
* filters/format_number
Commits
-------
84b0499dbd [Docs] Replace `=` by `:` in code examples
This PR was merged into the 3.x branch.
Discussion
----------
[Doc] Fix `code-block` in html_cva
There is no `terminal` code-block in the current Twig documentation.
Using `bash` here instead is more in line with the other pages.
(...and will allow to simplify CSS needed for code blocks)
Commits
-------
a7c0482dc9 [Doc] Fix `code-block` in html_cva
There is no `terminal` code-block in the current Twig documentation.
Using `bash` here instead is more in line with the other pages.
(...and will allow to simplify CSS needed for code blocks)
This PR was merged into the 3.x branch.
Discussion
----------
reduce the number of deprecations being triggered
Triggering deprecations for specific arguments is not needed as the method itself is deprecated as well.
Commits
-------
155d0faab4 reduce the number of deprecations being triggered
This PR was merged into the 3.x branch.
Discussion
----------
Make the defined test implementation more generic
Commits
-------
2d84abfd08 Make the defined test implementation more generic