Slide 1

Slide 1 text

D D

Slide 2

Slide 2 text

S H S H Consultant, Formateur, Contributeur. @s_hulard    

Slide 3

Slide 3 text

U ? U ?

Slide 4

Slide 4 text

P ? P ?

Slide 5

Slide 5 text

C ? C ?

Slide 6

Slide 6 text

U U class Moteur { public function __construct(string $name) { $this->name = $name; } }

Slide 7

Slide 7 text

U U $container = [ 'moteur' => static function (): Moteur { return new Moteur('standard'); }, 'v8' => new Moteur('v8') ];

Slide 8

Slide 8 text

U U class Voiture { public function __construct() { $this->moteur = new Moteur('v8'); } }

Slide 9

Slide 9 text

U U $container['voiture'] = function () use ($container): Voiture { return new Voiture($container['moteur']); }; $maVoiture = $container['voiture']();

Slide 10

Slide 10 text

D S D S #services.yaml moteur: class: Moteur attributes: $name: 'standard' v8: class: Moteur attributes: $name: 'v8' voiture: class: Voiture attributes: $moteur: '@v8'

Slide 11

Slide 11 text

I ? I ? Découplage, Rôle, Architecture.

Slide 12

Slide 12 text

D ' PHP D ' PHP

Slide 13

Slide 13 text

D D

Slide 14

Slide 14 text

/* Laravel */ class VoitureServiceProvider extends ServiceProvider { public function register() { $this->app->bind('moteur', function (): Moteur { return new Moteur('standard'); }); $this->app->bind('v8', new Moteur('v8')); $this->app->bind('voiture', function (Application $app): Moteur { return new Voiture($app->make('v8')); }); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Slide 15

Slide 15 text

L L

Slide 16

Slide 16 text

$container = new Pimple\Container(); $container['moteur'] = function (): Moteur { return new Moteur('standard'); }; $container['v8'] = new Moteur('v8'); $container['voiture'] = $container->factory( function(Pimple\Container $c) { new Voiture($c['v8']); } ); $maVoiture = $container['voiture'];

Slide 17

Slide 17 text

N PSR N PSR

Slide 18

Slide 18 text

PSR PSR U U namespace Psr\Container; interface ContainerInterface { public function get($id); public function has($id); }

Slide 19

Slide 19 text

E ? E ?

Slide 20

Slide 20 text

IDD IDD I D D I D D interface Moteur { public function demarrer(): bool; } interface Voiture { public function allerA(Destination $destination): bool; }

Slide 21

Slide 21 text

IDD IDD I D D I D D class MoteurV8 implements Moteur { public function demarrer() { $this->faireDuBruit(); } }

Slide 22

Slide 22 text

IDD IDD I D D I D D $container['v8'] = new MoteurV8(); $container['voiture'] = function () use ($container): Voiture { return new Voiture($container['moteur']); }; $maVoiture = $container['voiture']();

Slide 23

Slide 23 text

P ' ? P ' ?

Slide 24

Slide 24 text

L ? L ? class CustomQueryPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { $container ->getDefinition(UploadExam::class) ->setArgument( '$files', $container->getDefinition('app.filesystem.tmp_dicom') ); } }

Slide 25

Slide 25 text

D S ? D S ?

Slide 26

Slide 26 text

D S ? D S ? use App\Entity\MyUser; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Security\Http\Attribute\CurrentUser; class SomeController extends AbstractController { public function index(#[CurrentUser] MyUser $user) { // ... } }

Slide 27

Slide 27 text

C ? C ? Facilité, Documentation.

Slide 28

Slide 28 text

No content