Vorrei avere accesso ai metodi del controller dal mio servizio personalizzato. Ho creato la classe MyManager e ho bisogno di chiamare al suo interno le funzioni createForm()
e generateUrl()
. Nel controller posso usare: $this->createForm(...)
e $this->generateUrl(...)
, ma con il servizio? È possibile? Ho davvero bisogno di questi metodi! Quali argomenti dovrei usare?Chiama createForm() e generateUrl() dal servizio in Symfony2
risposta
Se si guarda a questi due metodi in Symfony\Bundle\FrameworkBundle\Controller\Controller
di classe, si vedrà nome dei servizi e come usarli.
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);
}
In sostanza, si classe bisogno di servizi router
e form.factory
per implementare la funzionalità. Non è consigliabile passare il controller alla classe. I controller sono classi speciali che vengono utilizzate principalmente dal framework stesso. Se prevedi di utilizzare la tua classe come servizio, creala.
services:
my_manager:
class: Something\MyManager
arguments: [@router, @form.factory]
Creare un costruttore con due argomenti per i servizi e implementare i metodi richiesti nella classe.
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 ...
}
E questo è il modo migliore per risolvere questo problema! Sono arrivato allo stesso prima della tua risposta, quindi pensiamo allo stesso modo :) – ZaquPL
supponendo che si sta iniettando il servizio nel controller, è possibile passare l'oggetto controller alla funzione di servizio
esempio
class myService
{
public function doSomthing($controller,$otherArgs)
{
$controller->generateForm();
}
}
class Mycontroller extends Controller
{
public function indexAction()
{
$this->get("my-service")->doSomthing($this,"hello");
}
}
Questa è una pessima idea. Dovresti semplicemente iniettare il servizio effettivo di cui hai bisogno piuttosto che iniettare il controller solo per usare il metodo '$ controller-> get()'. Nel peggiore dei casi è possibile iniettare il '@ service_container' e quindi usarlo (' $ this-> container-> get() ') ma anche quella non è la migliore pratica. – qooplmao
@Qoop quindi qual è la soluzione? – wonde
Lo stesso della risposta accettata. Passare nel router e compilare la fabbrica per il servizio o, come già detto, utilizzare il contenitore dei servizi ma non è consigliato. – qooplmao
- 1. generateUrl controller esterno
- 2. Iniettare SwiftMailer in servizio Symfony2
- 3. utente Symfony2 accesso dal servizio di estensione ramoscello
- 4. Chiama AngularJS dal codice precedente
- 5. symfony2 - aggiunta di scelte dal database
- 6. Iniezione di Twig come servizio in Symfony2
- 7. Accedi al servizio in esecuzione e chiama il suo metodo?
- 8. L'utente di Symfony2 non chiama gli ascoltatori
- 9. Chiama la classe di appartenenza a asp.net dal controller o dal livello di servizio?
- 10. Symfony2 Aggiornamento entità modulo
- 11. Symfony2 e Angular. Autenticazione utente
- 12. Leggere e scrivere cookie in Symfony2
- 13. chiama Thread.sleep() dal contesto sincronizzato in Java
- 14. - Esecuzione in background dal servizio
- 15. Chiama una funzione in background dal popup
- 16. Quando il distruttore chiama un servizio WCF
- 17. Perché symfony2 non chiama i miei ascoltatori di eventi?
- 18. ID servizio dinamico in un argomento in symfony2?
- 19. Chiama il servizio web da SQL CLR?
- 20. Dove posizionare la logica aziendale in Symfony2?
- 21. Spostare servizio di Symfony2 config per impacchettare
- 22. Notifica attività dal servizio
- 23. passaggio di dati dal controller a Type symfony2
- 24. Symfony2 scelta e MongoDB
- 25. Il servizio Intent non si chiama mai
- 26. Creare un modulo come un servizio in Symfony2
- 27. Eccezione: impossibile trovare l'elemento endpoint predefinito quando si chiama il servizio di traduzione Bing dal servizio RESTFUL
- 28. getEntityManager() e getDoctrine() in Symfony2
- 29. Service DependencyInjection in Symfony2
- 30. snellimento Symfony2 controller e persistere logica
È possibile passare il controller al servizio come parametro, quindi chiamare $ Controller-> createForm (...) – rogeriolino