Files
boutique-fanny/UPGRADE-2.3.md
2019-05-26 15:57:49 +02:00

132 lines
4.2 KiB
Markdown

UPGRADE FROM 2.2 to 2.3
=======================
EventDispatcher
----------------
* The `getDispatcher()` and `getName()` methods from `Symfony\Component\EventDispatcher\Event`
are deprecated, the event dispatcher instance and event name can be received in the listener call instead.
Before:
```php
use Symfony\Component\EventDispatcher\Event;
class Foo
{
public function myFooListener(Event $event)
{
$dispatcher = $event->getDispatcher();
$eventName = $event->getName();
$dispatcher->dispatch('log', $event);
// ... more code
}
}
```
After:
```php
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class MyListenerClass
{
public function myListenerMethod(Event $event, $eventName, EventDispatcherInterface $dispatcher)
{
$dispatcher->dispatch('log', $event);
// ... more code
}
}
```
While this above is sufficient for most uses, **if your module must be compatible with versions less than 2.3, or if your module uses multiple EventDispatcher instances,** you might need to specifically inject a known instance of the `EventDispatcher` into your listeners. This could be done using constructor or setter injection as follows:
```php
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class MyListenerClass
{
protected $dispatcher = null;
public function __construct(EventDispatcherInterface $dispatcher)
{
$this->dispatcher = $dispatcher;
}
}
```
Request and RequestStack
----------------
* The `Request` service are deprecated, you must now use the `RequestStack` service.
##### In your loops
The way to recover the request does not change.
To get the current request
```php
class MyLoopClass extends BaseLoop implements PropelSearchLoopInterface
{
public function buildModelCriteria()
{
// Get the current request
$request = $this->getCurrentRequest();
// Or
$request = $this->requestStack->getCurrentRequest();
// ... more code
}
}
```
##### In your controllers
It's not recommended to use `getRequest()` and `getSession()`, the Request instance can be received in the action method parameters.
However, the `getRequest()` method returns the current request.
**Warning !!** This is not compatible with Thelia 2.0, because it uses Symfony 2.2
To get the current request
```php
use Thelia\Core\HttpFoundation\Request;
class MyControllerClass extends ...
{
public function MyActionMethod(Request $request, $query_parameters ...)
{
$session = $request->getSession();
// ... more code
}
}
```
Container Scopes
----------------
* The "container scopes" concept no longer exists in Thelia 2.3.
For backward compatibility, the attributes `scope` is automatically removed of the xml configuration files.
**Warning !!** The attributes `scope` are always needed for your modules compatible with Thelia < 2.3.
[See the Symfony documentation for more information](http://symfony.com/doc/2.8/cookbook/service_container/scopes.html)
Unit Test
----------------
* The `SecurityContext`, `ParserContext`, `TokenProvider`, `TheliaFormFactory`, `TaxEngine` services are no longer dependent on "Request", but "RequestSTack".
This may break your unit tests.
For more information about the upgrade from Symfony 2.3 to Symfony 2.8
----------------
[Upgrade from Symfony 2.3 to 2.4](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.4.md)
[Upgrade from Symfony 2.4 to 2.5](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.5.md)
[Upgrade from Symfony 2.5 to 2.6](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.6.md)
[Upgrade from Symfony 2.6 to 2.7](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.7.md)
[Upgrade from Symfony 2.7 to 2.8](https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.8.md)
[Upgrade from Symfony 2.8 to 3.0](https://github.com/symfony/symfony/blob/2.8/UPGRADE-3.0.md)