• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony - problem z ładowaniem Service (EntityManagerInterface) wewnątrz klasy

0 głosów
1,377 wizyt
pytanie zadane 7 września 2017 w PHP przez To Ja Początkujący (490 p.)

Witam. Chcę załadować EntityManagerInterface wewnątrz własnej klasy. Robię wszystko według tego poradnika. Moja klasa:

namespace AppBundle\classes;

use Doctrine\ORM\EntityManagerInterface;

class DB{
    private $em;

    public function __construct(EntityManagerInterface $em){
        $this->em = $em;
    }
}

Według tej strony, jeśli mam standardowe ustawienia (autowire i autoconfigure), to powinno działać.
Fragment services.yml:

  # automatically injects dependencies in your services
  autowire: true
  # automatically registers your services as commands, event subscribers, etc.
  autoconfigure: true

Mimo tego otrzymuję następujący błąd:
 

Type error: Too few arguments to function AppBundle\classes\DB::__construct(), 0 passed in ...\src\AppBundle\Controller\DefaultController.php on line 20 and exactly 1 expected

Z góry dziękuję za pomoc. smiley

2 odpowiedzi

0 głosów
odpowiedź 14 września 2017 przez To Ja Początkujący (490 p.)
wybrane 14 września 2017 przez To Ja
 
Najlepsza

Rozwiązałem problem. Piszę, gdyby ktoś miał w przyszłości podobny:

Błąd polegał na tym, że w Controllerze użyłem

$DB = new DB;

zamiast odwołać się do tej klasy jako parametru w akcji Controllera:

/**
     * @Route("/", name = "homepage")
*/
    public function defaultAction(DB $DB)
   {

Alternatywnie można to zrobić w ten sposób:

$DB = $this->get(DB::class);

jednakże wtedy w services.yml powinno być:

        # this means you cannot fetch services directly from the container via $container->get()
        # if you need to do this, you can override this setting on individual services
        public: true

Tak więc problem był w Controllerze, choć błąd wskazywał na klasę. :)

0 głosów
odpowiedź 7 września 2017 przez Boshi VIP (100,240 p.)
Zarejestrowałeś klasę jako serwis? i po co ci ta klasa, jest bezużyteczna?
komentarz 7 września 2017 przez To Ja Początkujący (490 p.)
Przeglądam teraz dokumentację, kombinuję i szczerze napiszę, że nie mam pojęcia o jaką rejestrację chodzi. Nie wiem, co według Ciebie jest bezużyteczne, jeśli moja klasa - tak, bo póki co nic nie zawiera. Doctrine działa mi bez zarzutu w controllerze, chciałbym mieć też dostęp do obsługi bazy danych wewnątrz klasy. :)
komentarz 7 września 2017 przez Boshi VIP (100,240 p.)
Ale co ta klasa ma robić i po co? przecież w kontrolerach masz dostęp do entityManagera.

Jeżeli chcesz obudować doctrine we własną klasę bazy danych to jest to idiotyczny pomysł.

 

https://symfony.com/doc/current/components/dependency_injection.html

Podobne pytania

0 głosów
1 odpowiedź 627 wizyt
pytanie zadane 12 sierpnia 2019 w PHP przez Artek Stary wyjadacz (11,800 p.)
0 głosów
1 odpowiedź 241 wizyt
pytanie zadane 22 lutego 2020 w PHP przez XiverKi Bywalec (2,050 p.)
0 głosów
0 odpowiedzi 704 wizyt
pytanie zadane 15 listopada 2019 w PHP przez michal_php Stary wyjadacz (13,700 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...