chcę wywoływać zapytania z poziomu modelu zamiast kontrolera, oczywiście w kontrolerze nie jest to problem, ponieważ mamy metodę getDoctrine().
Jako, że wywoływanie owego obiektu zamierzam używać w wielu modelach postanowiłem utworzyć obiekt ParentModel z którego będą poszczególne dziedziczyć.
przykład:
class DefaultController extends Controller { public function indexAction() { $defaultModel = new DefaultModel(); //linia 13 // $sectionList = $defaultModel->getAllSections();
DefaultModel:
class DefaultModel extends ParentModel { public function getAllSections() { $qb = $this->em->createQuery('SELECT ts FROM UserBundle\Entity\TopicSections ts'); return $qb->getResult(); }
ParentModel:
class ParentModel { protected $em; public function __construct(EntityManager $em) { $this->em = $em; }
Services.yml:
services: userbundle.model.parent_model: class: UserBundle\Model\ParentModel arguments: [ @doctrine.orm.entity_manager ]
Wg tego co znalałem w internecie wszystko powinno ładnie działać: routing wywołuje kontroler, w kontrolerze tworzę instancję obiektu, który w rodzicu tworzy $em, który jest niezbędny do zapytań, ale (oczywiście) tak nie jest.
Catchable Fatal Error: Argument 1 passed to UserBundle\Model\ParentModel::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /var/www/forum/src/UserBundle/Controller/DefaultController.php on line 13 and defined
Tutaj pytanie: co w poszczególnych krokach zrobiłem źle, że pojawia się owy błąd zamiast poprawnie wykonać kod? (Czy fakt dodania wpisu w service nie powinien powodować uniknięcie owego błędu?)
Chcę unikać przekazywania z kontrolera $em do modelu.
Tutaj mam jeszcze rozkwinę odnośnie działania Symfony:
Jeżeli framework szczyci się MVC to dlaczego zapytania domyslnie możemy tworzyć w kontrolerze? (Do tej pory zawsze spotykałem się z strukturą: kontroler wywołuje metodę z modelu w której jest owo zapytanie składane, model zwraca gotowe dane do kontrolera).