Commit Graph

7825 Commits

Author SHA1 Message Date
Fabien Potencier e968cf6591 Merge branch '3.x' into 4.x
* 3.x:
  Tweak null-safe operator implementation
  Add null-safe operator
  Update u.rst to clarify truncate method's third argument behavior
2026-01-17 15:17:13 +01:00
Fabien Potencier c02aa11d0c minor #4740 Tweak null-safe operator implementation (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Tweak null-safe operator implementation

Follow-up for #4717

Commits
-------

6904954165 Tweak null-safe operator implementation
2026-01-17 15:14:24 +01:00
Fabien Potencier 6904954165 Tweak null-safe operator implementation 2026-01-17 15:11:37 +01:00
Fabien Potencier b1b2a0923f feature #4717 Add null-safe operator (felds)
This PR was squashed before being merged into the 3.x branch.

Discussion
----------

Add null-safe operator

Adds native support for Twig’s null-safe `?.` operator so templates can traverse objects and arrays without defensive plumbing: `{{ user?.address?.city }}` now renders the value when present and stays silent when any hop is `null`.

`?.` reuses the existing `GetAttrExpression` operator, so it should have otherwise the same precedence and behavior as `.`.

Usage cases can be found in the tests:
https://github.com/twigphp/Twig/blob/7d98d45f58df040f41a81f7f8d4cce6c42be781e/tests/ExpressionParserTest.php#L304-L343

Tests cover both the rendered output and the generated PHP.

Let me know if any tests are missing or if the implementation should be done any other way.

Commits
-------

263c04fd1f Add null-safe operator
2026-01-17 14:57:55 +01:00
Felds Liscia 263c04fd1f Add null-safe operator 2026-01-17 14:57:47 +01:00
Fabien Potencier 2bddfddb7d minor #4737 Update u.rst to clarify truncate method's third argument behavior (Always-Victorious)
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
2026-01-17 10:27:09 +01:00
Fabien Potencier 46f0152bcd Remove versionadded from docs 2026-01-17 10:25:10 +01:00
Fabien Potencier 280960d9e1 Merge branch '3.x' into 4.x
* 3.x:
  Fix documentation for getOperators()
  bump version
  Enhance enum.rst with dynamic case example
  Add === and !== operators
  Update extends.rst
  Fix spread operator behavior
2026-01-17 10:24:43 +01:00
Fabien Potencier bd4b47e38c minor #4739 Fix documentation for getOperators() (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Fix documentation for getOperators()

Closes #4710

Commits
-------

ae51f93f70 Fix documentation for getOperators()
2026-01-17 10:21:12 +01:00
Fabien Potencier ae51f93f70 Fix documentation for getOperators() 2026-01-17 10:19:56 +01:00
Fabien Potencier 141e984c3e minor #4738 bump version (xabbuh)
This PR was merged into the 3.x branch.

Discussion
----------

bump version

#4736 added new operators thus require the minor version to be increased

Commits
-------

55cb67f87d bump version
2026-01-16 13:48:36 +01:00
Christian Flothmann 55cb67f87d bump version 2026-01-16 11:26:26 +01:00
Always-Victorious 28c2606be7 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.
2026-01-15 15:43:42 +01:00
Fabien Potencier 94abd1c39b feature #4736 Add === and !== operators (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Add === and !== operators

Commits
-------

94c8bdd6a6 Add === and !== operators
2026-01-14 22:27:11 +01:00
Fabien Potencier 3ef425879d minor #4726 Enhance enum.rst with dynamic case example (Kocal)
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
2026-01-14 22:26:14 +01:00
Hugo Alliaume bcc5ffc301 Enhance enum.rst with dynamic case example 2026-01-14 22:26:11 +01:00
Fabien Potencier 94c8bdd6a6 Add === and !== operators 2026-01-14 09:58:48 +01:00
Fabien Potencier 0b1ef6cda0 minor #4734 Update extends.rst (MAHADEV-J)
This PR was squashed before being merged into the 3.x branch.

Discussion
----------

Update extends.rst

Semantically correct HTML elements instead of `<div>`itis

Commits
-------

5b63d90bfb Update extends.rst
2026-01-14 08:47:34 +01:00
MAHADEV-J 5b63d90bfb Update extends.rst 2026-01-14 08:47:31 +01:00
Fabien Potencier 2d741f9a16 bug #4731 Fix spread operator behavior (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Fix spread operator behavior

Closes #4637

Commits
-------

2376bbaf3e Fix spread operator behavior
2026-01-13 10:14:41 +01:00
Fabien Potencier f9d61e8a0d Merge branch '3.x' into 4.x
* 3.x:
  Fix deprecations
  Fix intl-extra tests
  Fix CHANGELOG
2026-01-12 10:15:26 +01:00
Fabien Potencier c034e0ba76 minor #4732 Fix deprecations (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Fix deprecations

Commits
-------

8391928896 Fix deprecations
2026-01-12 10:13:47 +01:00
Fabien Potencier 8391928896 Fix deprecations 2026-01-12 09:52:14 +01:00
Fabien Potencier 2376bbaf3e Fix spread operator behavior 2026-01-12 08:54:38 +01:00
Fabien Potencier 92f5098ad5 minor #4727 Fix CHANGELOG (usarise)
This PR was merged into the 3.x branch.

Discussion
----------

Fix CHANGELOG

Commit [Support for invoking closures](https://github.com/twigphp/Twig/commit/918f52e818f7c56e90ec462ae90b230da244a7ed) was added after release 3.17.1 https://github.com/twigphp/Twig/commits/v3.18.0

Commits
-------

97ff597b8a Fix CHANGELOG
2026-01-09 18:53:33 +01:00
Fabien Potencier a7436995d4 minor #4730 Fix intl-extra tests (Jean-Beru)
This PR was merged into the 3.x branch.

Discussion
----------

Fix intl-extra tests

Fix CI since `Scripts::getNames()` returns 4 new values. It just tests if the value is an array to limit maintenance on future updates.

Commits
-------

683adc550f Fix intl-extra tests
2026-01-08 19:56:46 +01:00
hubert.lenoir 683adc550f Fix intl-extra tests 2026-01-08 18:09:48 +01:00
Fabien Potencier 9ac4a2dd9c Merge branch '3.x' into 4.x
* 3.x:
  Fix tiny typo in CI workflow label
  Fix typo
  Fix opcache preload warning for unlinked anonymous class
  Bump version
  Prepare the 3.22.2 release
  Add .gitignore & .gitattributes to all .gitattributes
2026-01-07 16:24:12 +01:00
Fabien Potencier 90acdc54f6 minor #4729 Fix tiny typo in CI step name (smnandre)
This PR was merged into the 3.x branch.

Discussion
----------

Fix tiny typo in CI step name

Just a nano-typo there in a step name

`symfony/translation-contract`+`s`

Commits
-------

949f351458 Fix tiny typo in CI workflow label
2026-01-06 08:05:11 +01:00
Simon André 949f351458 Fix tiny typo in CI workflow label
Just a nano-typo there

"symfony/translation-contract" -> "symfony/translation-contract**s**"
2026-01-05 22:50:27 +01:00
Fabien Potencier 4537dff30b Fix typo 2026-01-05 21:37:31 +01:00
Fabien Potencier 118a3a741e bug #4728 Fix opcache preload warning for unlinked anonymous class (OndraM)
This PR was merged into the 3.x branch.

Discussion
----------

Fix opcache preload warning for unlinked anonymous class

This fixes PHP opcache preload warning, caused by https://github.com/php/php-src/issues/10131 .  The warning is now produced when the preload is initiated.

> Can't preload unlinked class Twig\ExpressionParser\Infix\BinaryOperatorExpressionParser@anonymous: Unknown parent Twig\ExpressionParser\Infix\BinaryOperatorExpressionParser

This started with Twig 3.21, when the anonymous class started to be used in ExtensionSet.

This is a similar woraround as is already used in a TwigBridge, as suggested by `@nicolas`-grekas here https://github.com/symfony/symfony/pull/38533
Also similar fix is in API platform: https://github.com/api-platform/core/pull/3827

Commits
-------

86997d1bef Fix opcache preload warning for unlinked anonymous class
2026-01-05 21:36:53 +01:00
Ondřej Machulda 86997d1bef Fix opcache preload warning for unlinked anonymous class 2026-01-05 19:11:58 +01:00
usarise 97ff597b8a Fix CHANGELOG 2025-12-26 21:33:38 +07:00
Fabien Potencier 6e38bec2ee minor #4718 Add .gitignore & .gitattributes to all .gitattributes (jmsche)
This PR was merged into the 3.x branch.

Discussion
----------

Add .gitignore & .gitattributes to all .gitattributes

Commits
-------

ff327e4163 Add .gitignore & .gitattributes to all .gitattributes
2025-12-18 21:46:15 +01:00
Fabien Potencier aa8635647f Bump version 2025-12-14 12:29:52 +01:00
Fabien Potencier 946ddeafa3 Prepare the 3.22.2 release v3.22.2 2025-12-14 12:28:47 +01:00
Fabien Potencier 8a5510c83b Merge branch '3.x' into 4.x
* 3.x:
  Update CHANGELOG
  Update CHANGELOG
  Avoid ord deprecation in PHP 8.5
2025-12-14 12:27:56 +01:00
Fabien Potencier eca0d9c7b9 Update CHANGELOG 2025-12-14 12:27:39 +01:00
Fabien Potencier cf87925346 bug #4724 Avoid ord deprecation notice in PHP 8.5 (iquito)
This PR was merged into the 3.x branch.

Discussion
----------

Avoid ord deprecation notice in PHP 8.5

Change the one usage of `ord()` in Twig where a multibyte character can trigger the new deprecation in PHP 8.5, which is in the `html_attr` escape functionality in EscaperRuntime, currently leading to:

```
ord(): Providing a string that is not one byte long is deprecated. Use ord($str[0]) instead"
```

This small change fixes it. There are no other usages of `ord()` in Twig which lead to this deprecation notice.

Commits
-------

4d98cce4e4 Avoid ord deprecation in PHP 8.5
2025-12-14 12:27:12 +01:00
Fabien Potencier 537b4f2899 Update CHANGELOG 2025-12-14 12:17:55 +01:00
Andreas 4d98cce4e4 Avoid ord deprecation in PHP 8.5
Change the one usage of ord() in Twig where a multibyte character can trigger the new deprecation in PHP 8.5, which is in the `html_attr` escape functionality, previously leading to:

ord(): Providing a string that is not one byte long is deprecated. Use ord($str[0]) instead"
2025-12-14 11:29:02 +01:00
Fabien Potencier b9391dc8b0 Merge branch '3.x' into 4.x
* 3.x:
  Add split.sh config
2025-12-05 11:47:16 +01:00
Fabien Potencier 4f323346a3 Add split.sh config 2025-12-05 11:47:00 +01:00
Fabien Potencier 56a7aa4e4f Merge branch '3.x' into 4.x
* 3.x:
  use getShareDir as an indicator of Symfony version
  Add 'invoke' to filters index
  [Core] Fix cycle() with non-countable ArrayAccess+Traversable objects
  Update .gitattributes to exclude phpstan configs
  Bump version
  Prepare the 3.22.1 release
  Update CHANGELOG
  `CoreExtension` : Make error message more readable
  Add caution note for random function usage
  Add throw tag to parse methods
2025-12-05 09:58:08 +01:00
Fabien Potencier 8308f7fa24 bug #4722 use getShareDir as an indicator of Symfony version (tacman)
This PR was squashed before being merged into the 3.x branch.

Discussion
----------

use getShareDir as an indicator of Symfony version

Proposal to fix #4719 , replaces #4721

Commits
-------

c4dcd0bb8c use getShareDir as an indicator of Symfony version
2025-12-05 09:51:55 +01:00
Tac Tacelosky c4dcd0bb8c use getShareDir as an indicator of Symfony version 2025-12-05 09:51:53 +01:00
jmsche ff327e4163 Add .gitignore & .gitattributes to all .gitattributes 2025-12-02 15:45:16 +01:00
Fabien Potencier 8074ddcab8 minor #4714 Add 'invoke' to filters index (webda2l)
This PR was merged into the 3.x branch.

Discussion
----------

Add 'invoke' to filters index

Missing from https://github.com/twigphp/Twig/pull/4518 I think.

Commits
-------

f7daf71acc Add 'invoke' to filters index
2025-11-27 06:52:14 +01:00
David ALLIX f7daf71acc Add 'invoke' to filters index 2025-11-26 20:33:56 +01:00