Chciałbym mieć dostęp do metod kontrolera z mojej usługi niestandardowej. Stworzyłem klasę MyManager i muszę do niej zadzwonić funkcje createForm()
i generateUrl()
. W kontrolerze mogę używać: $this->createForm(...)
i $this->generateUrl(...)
, ale co z obsługą? To jest możliwe? Naprawdę potrzebuję tych metod! Jakich argumentów powinienem użyć?Zadzwoń do createForm() i generateUrl() z usługi w Symfony2
Odpowiedz
Jeśli spojrzeć na tych dwóch metod w Symfony\Bundle\FrameworkBundle\Controller\Controller
klasy, widać nazwa usługi i jak z nich korzystać.
public function generateUrl($route, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
{
return $this->container->get('router')->generate($route, $parameters, $referenceType);
}
public function createForm($type, $data = null, array $options = array())
{
return $this->container->get('form.factory')->create($type, $data, $options);
}
Zasadniczo, klasa potrzebują usług router
i form.factory
za wdrożenie funkcjonalności. Nie polecam przekazywania kontrolera do twojej klasy. Kontrolery są klasami specjalnymi, które są używane głównie przez samą strukturę. Jeśli planujesz używać swojej klasy jako usługi, po prostu ją stwórz.
Utwórz konstruktor z dwoma argumentami dla usług i zaimplementuj wymagane metody w klasie.
class MyManager
{
private $router;
private $formFactory;
public function __construct($router, $formFactory)
{
$this->router = $router;
$this->formFactory = $formFactory;
}
// example method - same as in controller
public function createForm($type, $data = null, array $options = array())
{
return $this->formFactory->create($type, $data, $options);
}
// the rest of you class ...
}
I to jest najlepszy sposób na rozwiązanie tego problemu! Doszedłem do tego samego przed twoją odpowiedzią, więc myślimy podobnie :) – ZaquPL
zakładając, że wstrzykiwanie usługę do kontrolera można przekazać obiekt kontrolera do funkcji serwisowej
przykład
class myService
{
public function doSomthing($controller,$otherArgs)
{
$controller->generateForm();
}
}
class Mycontroller extends Controller
{
public function indexAction()
{
$this->get("my-service")->doSomthing($this,"hello");
}
}
To jest okropny pomysł. Powinieneś po prostu wstrzyknąć rzeczywistą usługę, której potrzebujesz, zamiast wstrzykiwać kontroler tylko po to, aby użyć metody '$ controller-> get()'. W najgorszym wypadku możesz wstrzyknąć '@ service_container', a następnie użyć tego (' $ this-> container-> get() '), ale nawet to nie jest najlepsza praktyka. – qooplmao
@Qoop, jakie jest twoje rozwiązanie? – wonde
To samo, co w zaakceptowanej odpowiedzi. Przekaż router i utwórz fabrykę usługi lub, jak wspomniałem, użyj kontenera usług, ale nie jest to zalecane. – qooplmao
- 1. Przekierowanie z usługi w Symfony2
- 2. Zadzwoń do asp.net klasy członkowskiej z kontrolera lub warstwy usługi?
- 3. Zadzwoń do Facebooka omniauth i #_
- 4. Symfony 3 createForm z parametrami konstrukcji
- 5. Dynamiczny identyfikator usługi w argumencie w symfony2?
- 6. Symfony2 Form Entity Update
- 7. Zadzwoń do href z JavaScript
- 8. Symfony2 - Znajdź oznaczone usługi w komendzie
- 9. Wstrzykiwanie gałązki jako usługi w Symfony2
- 10. Kątowa: konfiguruj trasy w zależności od metody usługi zadzwoń
- 11. przekazywanie danych z kontrolera do Type symfony2
- 12. Zadzwoń do R & Fortran
- 13. Zadzwoń do serwisu WWW asp.net z PHP z wieloma parametrami
- 14. Symfony2 uwierzytelnianie użytkowników za pośrednictwem usługi internetowej
- 15. Zadzwoń do zewnętrznego programu z Pythona i uzyskaj jego wyjście.
- 16. Symfony2: InvalidArgumentException: Definicja usługi "templating.helpers.assets" nie istnieje
- 17. Zadzwoń do funkcji torch7 (Lua) z pythona?
- 18. Zadzwoń do konstruktora niestandardowego z Dapper?
- 19. Zadzwoń do MiniDumpWriteDump z funkcją oddzwaniania
- 20. Zadzwoń do getLayoutInflater() w miejscach, które nie są w działalności
- 21. Android Zadzwoń do metody z innej klasy
- 22. Zadzwoń do aktywności rodzica z fragmentu
- 23. Uruchom usługę systemd z aplikacji C/C++ lub zadzwoń do usługi D-Bus
- 24. W Symfony2 jak mogę przekierować w kontrolerze do adresu URL z tagiem kotwicy/hash
- 25. Zadzwoń z drugiego sima
- 26. Jak mogę lepiej zrozumieć warstwę usługi w symfony2 w php
- 27. Zadzwoń do serwisu internetowego za pomocą wget
- 28. Zadzwoń do RenderSection dwa razy ...?
- 29. Zadzwoń do jQuery na buttonclick
- 30. Zadzwoń do błędu malloc w sesji gdb
Możesz przekazać kontroler do swojej usługi jako parametr, a następnie wywołać $ controller-> createForm (...) – rogeriolino