Commit Graph

53856 Commits

Author SHA1 Message Date
Robin Chalas
55b51d3f90 [Security] Rename User to InMemoryUser 2021-03-16 00:01:28 +01:00
Robin Chalas
abf16d0f1b minor #40470 [Cache] fix test case name (nicolas-grekas)
This PR was merged into the 4.4 branch.

Discussion
----------

[Cache] fix test case name

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Should make #40468 green.

Commits
-------

e2dffea49d [Translation] fix test case name
2021-03-15 19:43:41 +01:00
Nicolas Grekas
6fe82d8be7 Deprecate configuring tag names and service ids in compiler passes 2021-03-15 19:33:21 +01:00
bezin
f0cac47ae7
Be explicit about transparent background color of links in toolbar 2021-03-15 16:12:10 +01:00
Nicolas Grekas
e2dffea49d [Translation] fix test case name 2021-03-15 13:54:07 +01:00
Nicolas Grekas
252f2ca1fb [DependencyInjection] Add #[TaggedItem] attribute for defining the index and priority of classes found in tagged iterators/locators 2021-03-15 12:58:02 +01:00
Robin Chalas
5b878a2599 minor #40465 [RateLimiter] [5.2] Fix wrong namespace in tests (chalasr)
This PR was merged into the 5.2 branch.

Discussion
----------

[RateLimiter] [5.2] Fix wrong namespace in tests

| Q             | A
| ------------- | ---
| Branch?       | 5.2
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Commits
-------

c620f407ba [RateLimiter] Fix wrong namespace in tests
2021-03-14 21:02:07 +01:00
Robin Chalas
bc87acdf77 minor #40464 [4.4] Fix wrong namespace in tests (chalasr)
This PR was merged into the 4.4 branch.

Discussion
----------

[4.4] Fix wrong namespace in tests

| Q             | A
| ------------- | ---
| Branch?       |  4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Commits
-------

b3759c2882 [Cache] Fix wrong namespace in test
2021-03-14 21:00:50 +01:00
Robin Chalas
c620f407ba [RateLimiter] Fix wrong namespace in tests 2021-03-14 20:33:15 +01:00
Robin Chalas
b3759c2882 [Cache] Fix wrong namespace in test 2021-03-14 20:28:18 +01:00
Robin Chalas
59e5ac5dcf Merge branch '5.2' into 5.x
* 5.2:
  [Routing] Remove unnecessary references to User class in test fixtures
2021-03-14 15:11:16 +01:00
Robin Chalas
20ebdc7003 minor #40463 [Routing] Remove unnecessary references to User class in test fixtures (chalasr)
This PR was merged into the 5.2 branch.

Discussion
----------

[Routing] Remove unnecessary references to User class in test fixtures

| Q             | A
| ------------- | ---
| Branch?       | 5.2
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Commits
-------

76ee9baf8e [Routing] Remove unnecessary references to User class in test fixtures
2021-03-14 15:10:51 +01:00
Robin Chalas
76ee9baf8e [Routing] Remove unnecessary references to User class in test fixtures 2021-03-14 14:53:33 +01:00
Christian Flothmann
98892f7db9 Merge branch '5.2' into 5.x
* 5.2:
  fix test
2021-03-12 14:29:20 +01:00
Christian Flothmann
088fbf7948 fix test 2021-03-12 14:28:30 +01:00
Christian Flothmann
3145fde13b Merge branch '5.2' into 5.x
* 5.2:
  [Mailer] fix lowest allowed dependencies
  Refresh original user in SwitchUserListener.
  check if templating engine supports view
  [Mime] Escape commas in address names
2021-03-12 14:21:57 +01:00
Christian Flothmann
03a9ac26bc Merge branch '4.4' into 5.2
* 4.4:
  [Mailer] fix lowest allowed dependencies
  Refresh original user in SwitchUserListener.
  check if templating engine supports view
  [Mime] Escape commas in address names
2021-03-12 14:18:39 +01:00
Christian Flothmann
58b1c61db3 minor #40455 [Mailer] fix lowest allowed dependencies (xabbuh)
This PR was merged into the 4.4 branch.

Discussion
----------

[Mailer] fix lowest allowed dependencies

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

Commits
-------

e9f2ef211e [Mailer] fix lowest allowed dependencies
2021-03-12 14:11:54 +01:00
Christian Flothmann
e9f2ef211e [Mailer] fix lowest allowed dependencies 2021-03-12 12:23:44 +01:00
Fabien Potencier
6c0102c184 feature #40240 [Validator] Add Validation::createIsValidCallable() that returns a boolean instead of exception (wouterj)
This PR was merged into the 5.3-dev branch.

Discussion
----------

[Validator] Add Validation::createIsValidCallable() that returns a boolean instead of exception

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #36820
| License       | MIT
| Doc PR        | tbd

This adds a `Validator::createValidCallable()` (I'm very open for other name suggestions) that returns a boolean instead of exceptions. This allows usingit in places where booleans are expected, for instance in the referenced OptionsResolver case:

```php
$resolver->setAllowedValues('name', Validation::createValidCallable(
    new Assert\Length(['min' => 10 ])
));
```

Commits
-------

e731f5fda9 [Validator] Add createValidCallable() that returns a boolean
2021-03-12 09:58:03 +01:00
Fabien Potencier
93467c507e bug #39866 [Mime] Escape commas in address names (YaFou)
This PR was merged into the 4.4 branch.

Discussion
----------

[Mime] Escape commas in address names

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #39416
| License       | MIT
| Doc PR        | --
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.

Additionally (see https://symfony.com/releases):
 - Always add tests and ensure they pass.
 - Never break backward compatibility (see https://symfony.com/bc).
 - Bug fixes must be submitted against the lowest maintained branch where they apply
   (lowest branches are regularly merged to upper ones so they get the fixes too.)
 - Features and deprecations must be submitted against branch 5.x.
-->

Before:
```php
$address = new Address('fabien@symfony.com', 'Fabien, Potencier');
$address->toString(); // Fabien, Potencier <fabien@symfony.com> -> Interpreted like two emails
```

After:
```php
$address = new Address('fabien@symfony.com', 'Fabien, Potencier');
$address->toString(); // "Fabien, Potencier" <fabien@symfony.com>
```

Commits
-------

39e9158999 [Mime] Escape commas in address names
2021-03-12 09:47:38 +01:00
Fabien Potencier
c487a56bf4 minor #40322 [Console] improve exception message when required argument is added after an optional one (marbul)
This PR was merged into the 5.3-dev branch.

Discussion
----------

[Console] improve exception message when required argument is added after an optional one

| Q             | A
| ------------- | ---
| Branch?       | 5.x <!-- see below -->
| Bug fix?      | no
| New feature?  | wouldn't say so, rather DX improvement <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #40302 <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | n/a

Hello, this is my first contribution to Symfony Framework. It's time to pull my weight.
About the issue:
I did improve an error message to include passed argument's name and the latest optional argument's name.
![Screenshot at 2021-02-26 23-08-10](https://user-images.githubusercontent.com/79662742/109361609-8f011e80-7889-11eb-8700-cbbd388c0109.png)
An author also mentioned "But which command?", however this is shown twice as we can see on the screenshot above so I skipped that.

Commits
-------

9bddbbd7ed #40302 improve exception message when required argument is added after an optional one
2021-03-12 09:40:58 +01:00
Fabien Potencier
7754beddfc minor #40315 [HttpFoundation] Use InputBag for POST requests too (acasademont)
This PR was merged into the 5.3-dev branch.

Discussion
----------

[HttpFoundation] Use InputBag for POST requests too

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | Partially revert #37265
| License       | MIT
| Doc PR        | -

#37265 was created as a fix for #37100. However, when #37327 was merged, the original bug was also fixed with a different solution (allowing null values on `InputBag::set`) and parts of #37265 are not needed anymore. By using only `InputBag` as the `$request` bag we can tighten the typehint again and make static analysis a bit more useful.

Commits
-------

381a0a19f7 use InputBag for POST requests too, added missing scalar type hints
2021-03-12 09:36:26 +01:00
Fabien Potencier
fb670dfb2d bug #40373 Check if templating engine supports given view (fritzmg)
This PR was merged into the 4.4 branch.

Discussion
----------

Check if templating engine supports given view

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Currently the `ControllerTrait::render` and `ControllerTrait::renderView` methods assume that when the `templating` service is available it can always render the given view via that service.

However, that might not be the case. For example if `framework.templating` is not configured to support the `twig` engine for example but only some other custom engine, e.g.

```yaml
framework:
  templating:
    engines:
      - foobar
```

it will fail when the given view references a Twig template for instance and the configured engine cannot render that.

The `Symfony\Component\Templating\EngineInterface` which `templating` implements defines a `support` method:

2536e178b1/src/Symfony/Component/Templating/EngineInterface.php (L56-L63)

which should be used here, in order to make sure that `templating` actually does support rendering the given view.

Commits
-------

0f9434c189 check if templating engine supports view
2021-03-12 09:20:53 +01:00
Fabien Potencier
183b91c6ec feature #40366 [FrameworkBundle] Add KernelTestCase::getContainer() (Nyholm)
This PR was squashed before being merged into the 5.3-dev branch.

Discussion
----------

[FrameworkBundle] Add KernelTestCase::getContainer()

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | yes
| Tickets       |
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/14731

There are at least 3 ways to get the container in a test class:

```php
class FooTest extends WebTestCase
{
    public function testGetContainerA()
    {
        $kernel = self::bootKernel();
        $container = $kernel->getContainer();
    }

    public function testGetContainerB()
    {
        self::bootKernel();
        $container = self::$container;
    }

    public function testGetContainerC()
    {
        $client = self::createClient();
        $container = $client->getContainer();
    }
}
```

I suggest to add a fourth =)

Basically, in tests you should always use the `test.service_container`. It is hard to remove A and C, but I can deprecate C and add a helper function.

```php
class FooTest extends WebTestCase
{
    public function testGetContainerTheOnlyWayYouShouldUse()
    {
        $container = $this->getContainer();
    }
}
```

This new way will also boot your kernel if it is not already booted.

Commits
-------

f4c97240ff [FrameworkBundle] Add KernelTestCase::getContainer()
2021-03-12 07:17:39 +01:00
Nyholm
f4c97240ff [FrameworkBundle] Add KernelTestCase::getContainer() 2021-03-12 07:17:35 +01:00
Fabien Potencier
5d728150d3 bug #40444 [FrameworkBundle] AnnotationsCacheWarmer should support doctrine/annotations:^1.13 (Nyholm)
This PR was squashed before being merged into the 5.3-dev branch.

Discussion
----------

[FrameworkBundle] AnnotationsCacheWarmer should support doctrine/annotations:^1.13

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #40353
| License       | MIT
| Doc PR        |

The `AnnotationsCacheWarmer` is creating a cached a `new CachedReader` in the `doWarmUp()`. But this will fail if doctrine/cache is not installed. In #40338 I added the `kernel.cache_warmer` tag on `annotations.cache_warmer` service even though the doctrine/cache is not installed.

This PR will make sure `AnnotationsCacheWarmer` is using the `PsrCacheReader` when available.

This bug was not found in the tests because doctrine/cache is always installed.

----------

Big golden star to @jrushlow because you test dev-master.

Commits
-------

fb1cc72b18 [FrameworkBundle] AnnotationsCacheWarmer should support doctrine/annotations:^1.13
2021-03-12 07:13:32 +01:00
Nyholm
fb1cc72b18 [FrameworkBundle] AnnotationsCacheWarmer should support doctrine/annotations:^1.13 2021-03-12 07:13:27 +01:00
Fabien Potencier
2bfc6417f3 bug #39992 [Security] Refresh original user in SwitchUserListener (AndrolGenhald)
This PR was merged into the 4.4 branch.

Discussion
----------

[Security] Refresh original user in SwitchUserListener

Fixes #39991

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #39991
| License       | MIT
| Doc PR        | NA

Fix SwitchUserListener to update original token with refreshed user. This prevents a non-refreshed user from causing problems elsewhere, such as in Voters.

Commits
-------

42453454c9 Refresh original user in SwitchUserListener.
2021-03-12 07:11:15 +01:00
Fabien Potencier
bbb4d9f26e feature #40441 [WebProfilerBundle] Disable CSP if dumper was used (monojp)
This PR was squashed before being merged into the 5.3-dev branch.

Discussion
----------

[WebProfilerBundle] Disable CSP if dumper was used

| Q             | A
| ------------- | ---
| Branch?       | 5.x for features
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #29084
| License       | MIT
| Doc PR        | -

Disables a configured Content Security Policy if the dumper was used to avoid breaking the toolbar. This is a less invasive alternative to #29155 which fixes #29084 (there is a project with a test case linked there).

Commits
-------

5dc2637263 [WebProfilerBundle] Disable CSP if dumper was used
2021-03-12 07:08:17 +01:00
Martin Herndl
5dc2637263 [WebProfilerBundle] Disable CSP if dumper was used 2021-03-12 07:08:12 +01:00
Fabien Potencier
136e54ce44 feature #40448 [twig-bridge] Allow NotificationEmail to be marked as public (maxailloud)
This PR was squashed before being merged into the 5.3-dev branch.

Discussion
----------

[twig-bridge] Allow NotificationEmail to be marked as public

| Q             | A
| ------------- | ---
| Branch?       | 5.x for features
| Bug fix?      |no
| New feature?  | yes
| Deprecations? |no
| Tickets       | Fix #37879
| License       | MIT
| Doc PR        | -

Closes https://github.com/symfony/symfony/issues/37879

`NotificationEmail` can be created public from the `asPublicEmail` method in any context but with the Notifier component. In this case it is created by it as not public and therefore displays the importance in the subject of the email.
For end users, aka not admin, the importance in the subject's email is not necessary.
This PR will allow if needed to set a `NotificationEmail` as public even after being created, wherever it was created.

I am not sure how to handle the version in the changelog.
For the tests I don't know what's the policy so I just added a new case in each test case.

Commits
-------

8f753d27f2 [twig-bridge] Allow NotificationEmail to be marked as public
2021-03-12 07:00:29 +01:00
Maxime Ailloud
8f753d27f2 [twig-bridge] Allow NotificationEmail to be marked as public 2021-03-12 07:00:23 +01:00
AndrolGenhald
42453454c9 Refresh original user in SwitchUserListener.
Fixes #39991
2021-03-11 19:21:32 -06:00
Alexander M. Turek
7f65a27996 Merge branch '5.2' into 5.x
* 5.2:
  bug #40427 [Console] Stop accepting ints as InputOption defaults
  Fix fingerprint when context is not serializable
  Fix `ConstraintViolation#getMessageTemplate()` to always return `string`
2021-03-12 01:42:40 +01:00
Alexander M. Turek
950e1444cb Merge branch '4.4' into 5.2
* 4.4:
  bug #40427 [Console] Stop accepting ints as InputOption defaults
  Fix fingerprint when context is not serializable
2021-03-12 01:42:05 +01:00
Jérémy Derussé
bbf786c3db
minor #40428 [Console] Fix type of InputOption::$default (oliverklee)
This PR was merged into the 4.4 branch.

Discussion
----------

[Console] Fix type of InputOption::$default

Options can also be `int`s. So add this type to the PHPDoc parameter
type annotation of `InputInterface::setOption` and the return type
annotation of `InputInterface::getOption`.

| Q             | A
| ------------- | ---
| Branch?       | 4.4 or 5.2 for bug fixes
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #40427
| License       | MIT

Commits
-------

3a2d1b4a0a bug #40427 [Console] Stop accepting ints as InputOption defaults
2021-03-11 19:20:35 +01:00
Fabien Potencier
9f3c30a50d bug #40446 [TwigBridge] Fix "Serialization of 'Closure'" error when rendering an TemplatedEmail (jderusse)
This PR was merged into the 4.4 branch.

Discussion
----------

[TwigBridge] Fix "Serialization of 'Closure'" error when rendering an TemplatedEmail

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #40445
| License       | MIT
| Doc PR        |

When context contains a closure, it can't be serialized. In that case, we now assume that fingerprint is always different, and in that case, email will always be re-rendered

Commits
-------

c3e30ebda2 Fix fingerprint when context is not serializable
2021-03-11 17:02:07 +01:00
Oliver Klee
3a2d1b4a0a bug #40427 [Console] Stop accepting ints as InputOption defaults
The types accepted and provided by `InputInterface::getOption`
and `setOption` do not include `int` (and passing something like
`--option=123` will set the option to the string `"123"`, not
to the integer `123`).

The `InputOption` default types should match this.
2021-03-11 16:23:19 +01:00
Jérémy Derussé
c3e30ebda2
Fix fingerprint when context is not serializable 2021-03-11 15:05:56 +01:00
Fabien Potencier
dc8a43b764 bug #40416 Fix ConstraintViolation#getMessageTemplate() to always return string (Ocramius)
This PR was merged into the 5.2 branch.

Discussion
----------

Fix `ConstraintViolation#getMessageTemplate()` to always return `string`

| Q             | A
| ------------- | ---
| Branch?       | 5.2
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

`ConstraintViolation#getMessageTemplate()`'s inherited signature states that `string` is
to be returned by it at all times, yet the implementation returns `null` when no message
template had been provided at instantiation.

This patch obviates it, returning an empty string when the
message template is `null`.

Ref: https://github.com/symfony/symfony/pull/40415#issuecomment-792839512

Commits
-------

72a464e449 Fix `ConstraintViolation#getMessageTemplate()` to always return `string`
2021-03-11 08:18:44 +01:00
Alexander M. Turek
906b609d0e Merge branch '5.2' into 5.x
* 5.2:
  Bump Symfony version to 5.2.6
  Update VERSION for 5.2.5
  Update CHANGELOG for 5.2.5
  Update translations for Norwegian Nynorsk (nn) #38756
  Fix eventListener initialization when eventSubscriber constructor dispatch an event
  [FrameworkBundle] fix XSD
  clear unchecked choice radio boxes even if clear missing is set to false
  Fix `ConstraintViolation#getPropertyPath()` to always return `string`
  [ErrorHandler] Added missing type annotations to FlattenException
  [TwigBridge] Allow version 3 of the Twig extra packages
  Fix FrameworkBundle PropertyAccess definition when not in debug
2021-03-10 23:12:52 +01:00
Alexander M. Turek
16bacb1b27 Merge branch '4.4' into 5.2
* 4.4:
  Update translations for Norwegian Nynorsk (nn) #38756
  Fix eventListener initialization when eventSubscriber constructor dispatch an event
  clear unchecked choice radio boxes even if clear missing is set to false
  [ErrorHandler] Added missing type annotations to FlattenException
  [TwigBridge] Allow version 3 of the Twig extra packages
  Fix FrameworkBundle PropertyAccess definition when not in debug
2021-03-10 23:10:15 +01:00
Alexander M. Turek
ef59c89dea [DependencyInjection] Fix return type 2021-03-10 21:03:02 +01:00
Fabien Potencier
74c3c5fcb3 Bump Symfony version to 5.2.6 2021-03-10 18:11:15 +01:00
Fabien Potencier
8f9f599e7f
Merge pull request #40440 from fabpot/release-5.2.5
released v5.2.5
2021-03-10 18:07:52 +01:00
Fabien Potencier
3da617f52c Update VERSION for 5.2.5 2021-03-10 18:07:35 +01:00
Fabien Potencier
40d955f286 Update CHANGELOG for 5.2.5 2021-03-10 18:07:21 +01:00
Nyholm
6f4552fcec
[Runtime] Remove "docs" from readme 2021-03-10 15:14:31 +01:00
Fabien Potencier
c06a76c384 feature #38465 [Runtime] a new component to decouple applications from global state (nicolas-grekas)
This PR was merged into the 5.3-dev branch.

Discussion
----------

[Runtime] a new component to decouple applications from global state

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/15081

Follow up of #36652, see discussion there.

What if we could decouple the bootstrapping logic of our apps from any global state?

This PR makes it possible via a new proposed `symfony/runtime` component.

The immediate benefit this provides is easier maintenance of Symfony apps: code that is currently shipped by recipes will be able to move to `vendor/`. Read the previous sentence twice, this is big :)
Check the following PR to see how far this goes: https://github.com/symfony/recipes/pull/787

The longer-term benefit is being able to run the exact same app under several runtimes: PHP-FPM, CLI, but also PHP-PM and similar. Thanks to the proposed interface, this benefit could span to any PHP apps; not only to apps using the Symfony HttpKernel/HttpFoundation components. This part could be moved to `symfony/contracts` in the future.

Performance-wise, I measured no significant difference with the current way of running apps.

RuntimeInterface
----------------

The core of this component is the `RuntimeInterface` which describes a high-order
runtime logic.

It is designed to be totally generic and able to run any application outside of
the global state in 6 steps:

 1. the main entry point returns a callable that wraps the application;
 2. this callable is passed to `RuntimeInterface::getResolver()`, which returns a
    `ResolverInterface`; this resolver returns an array with the (potentially
    decorated) callable at index 0, and all its resolved arguments at index 1;
 3. the callable is invoked with its arguments; it returns an object that
    represents the application;
 4. that object is passed to `RuntimeInterface::getRunner()`, which returns a
    `RunnerInterface`: an instance that knows how to "run" the object;
 5. that instance is `run()` and returns the exit status code as `int`;
 6. the PHP engine is exited with this status code.

This process is extremely flexible as it allows implementations of
`RuntimeInterface` to hook into any critical steps.

Autoloading
-----------

This package registers itself as a Composer plugin to generate a
`vendor/autoload_runtime.php` file. This file shall be required instead of the
usual `vendor/autoload.php` in front-controllers that leverage this component
and return a callable.

Before requiring the `vendor/autoload_runtime.php` file, set the
`$_SERVER['APP_RUNTIME']` variable to a class that implements `RuntimeInterface`
and that should be used to run the returned callable.

Alternatively, the class of the runtime can be defined in the `extra.runtime.class`
entry of the `composer.json` file.

A `SymfonyRuntime` is used by default. It knows the conventions to run
Symfony and native PHP applications.

Examples
--------

This `public/index.php` is a "Hello World" that handles a "name" query parameter:
```php
<?php

require_once dirname(__DIR__).'/vendor/autoload_runtime.php';

return function (array $request, array $context): void {
    // $request holds keys "query", "body", "files" and "session",
    // which map to $_GET, $_POST, $_FILES and &$_SESSION respectively

    // $context maps to $_SERVER

    $name = $request['query']['name'] ?? 'World';
    $time = $context['REQUEST_TIME'];

    echo sprintf('Hello %s, the current Unix timestamp is %s.', $name, $time);
};
```

This `bin/console.php` is a single-command "Hello World" application
(run `composer require symfony/console` before launching it):
```php
<?php

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

require_once dirname(__DIR__).'/vendor/autoload_runtime.php';

return function (Command $command) {
    $command->addArgument('name', null, 'Who should I greet?', 'World');

    return $command->setCode(function (InputInterface $input, OutputInterface $output) {
        $name = $input->getArgument('name');
        $output->writeln(sprintf('Hello <comment>%s</>', $name));
    });
};
```

The `SymfonyRuntime` can resolve and handle many types related to the
`symfony/http-foundation` and `symfony/console` components.
Check its source code for more information.

Commits
-------

61b32ab2a3 [Runtime] a new component to decouple applications from global state
2021-03-10 14:27:50 +01:00