Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.php > #16145

Symfony 4 - jaka korzyść z wstrzykiwanych service providerów?

From Marek S <precz@spamowi.com>
Newsgroups pl.comp.lang.php
Subject Symfony 4 - jaka korzyść z wstrzykiwanych service providerów?
Date 2019-04-14 22:27 +0200
Organization ATMAN - ATM S.A.
Message-ID <q90548$dop$1@node1.news.atman.pl> (permalink)

Show all headers | View raw


Witam,

Wyjaśnię, że stawiam pierwsze kroki w Symfony 4. Dotarłem do etapu 
tworzenia Service Providerów w jakimś kursie. Oczywiście ja, jakto ja, 
nigdy bezmyśnie nie przepisuję tego, co w kursie mówią lecz od razu 
buduję życiowe sytuacje symulując praktyczne użycie.

No i albo czegoś nie ogarniam, albo autowiring to jakaś ściema i kula u 
nogi, czasem nawet uniemożliwiająca korzystanie z tej funkcjonalności. 
Korzystanie z klas w klasyczny sposób dla PHP wydaje się być 
nieporównywalnie lepszym podejściem. Sprostujcie mnie. Zapewne czegoś 
nie dostrzegam.

Oto przykład kontrolera, gdzie poległem:
<?php

namespace App\Controller;

use App\Entity\Users;
use App\Services\MarekService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends AbstractController {
     /**
      * DefaultController constructor.
      */
     public function __construct(MarekService $marekService) {
         array_unshift($marekService->gifts, "constr");
     }


     private function getRandom(MarekService $marekService): array {
         return $marekService->gifts;
     }


     /**
      * @Route("/default", name="default")
      */
     public function index(MarekService $marekService) {
         $users = 
$this->getDoctrine()->getRepository(Users::class)->findBy([], ['name' => 
'ASC']);

         return $this->render('default/index.html.twig', [
             'controller_name' => 'DefaultController',
             "users" => $users,
             "gifts2" => $this->getRandom(),
             "gifts" => $marekService->gifts,
         ]);
     }
}

Załóżmy, że wszystkie metody będą potrzebowały korzystać z MarekService. 
Jeśli chodzi o metody publiczne, te, które budują routing lub 
konstruktor, to wszystko ok choć, moim zdaniem, niepotrzebnie dużo 
piszemy przekazując do każdej z tych metod regułkę:

MarekService $marekService

Prościej byłoby w konstruktorze przypisać do zmiennej prywatnej:

$this->prv=new MarekService();

...i dalej w kodzie posługiwać się $this->priv zamiast każdorazowo 
wstrzykiwać coś.

Po drugie, przy wstrzykiwaniu powstała sprzeczność. Popatrzcie na metodę 
prywatną $this->getRandom(). Wstrzykuję do niej MarekService, a z 
drugiej strony chcę ją użyć bez przekazywania parametrów (na dole 
skryptu), bo nie ma po co ich przekazywać. Metoda ma mi coś zwrócić i 
koniec, kropka. Gdybym bazował na $this->priv, to taka sprzeczność nie 
miałaby miejsca.



-- 
Pozdrawiam,
Marek

Back to pl.comp.lang.php | Previous | NextNext in thread | Find similar


Thread

Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Marek S <precz@spamowi.com> - 2019-04-14 22:27 +0200
  Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Borys Pogoreło <borys@pl.edu.leszno> - 2019-04-15 00:56 +0200
    Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Marek S <precz@spamowi.com> - 2019-04-15 23:38 +0200
      Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Borys Pogoreło <borys@pl.edu.leszno> - 2019-04-16 17:55 +0200
        Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Marek S <precz@spamowi.com> - 2019-04-17 00:11 +0200
          Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Borys Pogoreło <borys@pl.edu.leszno> - 2019-04-17 10:36 +0200
            Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Marek S <precz@spamowi.com> - 2019-04-17 22:26 +0200
              Re: Symfony 4 - jaka korzyść z wstrzykiwanych service providerów? Borys Pogoreło <borys@pl.edu.leszno> - 2019-04-30 16:13 +0200

csiph-web