Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wstrzykiwanie zależności jak w Spring, @Component i @Autowired
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


Podoba mi się podpinanie zależności w Springu. Komponenty tworzymy tak:

  1. public class MarkdownParser {
  2. public String parse(String input) { /* kod metody */ }
  3. }

Następnie wykorzystujemy je w tych klasach, gdzie są potrzebne:

  1. public class NewsController {
  2. @Autowired
  3. final NewsDAO newsDAO;
  4.  
  5. @Autowired
  6. final MarkdownParser markdownParser;
  7.  
  8. @GetMapping("/read/{id}")
  9. public String read(@PathVariable int id) {
  10. return markdownParser.parse(newsDAO.getById(id));
  11. }
  12. }

W Phalcon PHP też istnieje wstrzykiwanie zależności, ale w nieco mniej wygodnej formie. Otóż w pliku startowym musimy skonfigurować wszystkie komponenty (oprócz wstępnie dostępnych) w ten sposób:

  1. // Uwaga: jest set() i setShared()
  2. $di->set('markdownParser', function() {
  3. return new MarkdownParser;
  4. });

Klasa MarkdownParser dziedziczy po Phalcon\Mvc\User\Component

  1. class MarkdownParser extends \Phalcon\Mvc\User\Component {
  2. public function parse($input) { /* kod metody */ }
  3. }

Raz zarejestrowany komponent jest widoczny wszędzie i wynika z tego dużo problemów. Ponadto IDE nie wie o tym i bez dodatkowych zabiegów nie podpowiada składni.
  1. public class NewsController extends \Phalcon\Mvc\Controller {
  2. public function readAction($id) {
  3. $this->view->text = $this->markdownParser->parse(News::findFirstById($id));
  4. }
  5. }

Jak zaimplementować podpinanie zależności à la Spring w PHP? Macie jakiś pomysł?


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 18:30