2013-12-14 5 views
0

У меня есть класс контроллера HomeController с конкретным способом, чтобы получить Entity Manager:.Как использовать методы расширенного контроллера?

protected function getImageManager() 
{ 
    if(!isset($_SESSION)) session_start(); 

    if(isset($_SESSION['id'])) 
    {     
     if($em = $this->getDoctrine()->getEntityManager()) return $em; 
    } 
    return false; 
} 

и она работает, когда я использую его в HomeController. Но когда я расширяю контроллер и попытаться использовать этот метод, я получаю сообщение об ошибке: Fatal error: Call to a member function has() on a non-object in /home/xxxx/webDir/project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 191

Это, как я использую этот метод внутри HomeController и расширенный контроллер:

if($em = $this->getImageManager()) 
... 

Это, как я расширяю HomeController:

namespace MSD\HomeBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use MSD\HomeBundle\Entity\Imagen as Imagen; 
use MSD\HomeBundle\Controller\HomeController as HomeController; 

class ImageTransController extends HomeController 
{ 
function __construct() 
{ 
    if($em = $this->getImageManager()) return $this; 
     else $this->setError('Entity Manager error'); 
    } 
} 

Любая идея о том, что происходит не так?

+0

'HomeController' не имеет какой-либо метод конструктов. – Manolo

+1

Он также относится к той же концепции инъекции зависимостей, как я сказал в вашем новом сообщении –

ответ

0

Вы здесь много чего не так.

  1. сессия запускается автоматически в Symfony, так что вам не нужно запускать вручную
  2. Почему вы называете getImageManager когда то, что вы хотите EntityManager?
  3. Почему вы переопределяете конструктор?

Это, как вы должны сделать это

// HomeController.php 
public function getEntityManager() 
{ 
    return $this->getDoctrine()->getEntityManager(); 
} 

// ImageTransController 
class ImageTransController extends HomeController 
{ 
    public function someAction() 
    { 
     $em = $this->getEntityManager(); 
     // do something with $em 
    } 
} 
+0

Теперь я знаю, что проблема заключается в вызове Entity Manager в конструкторе. Вы можете взглянуть на мой новый вопрос: http://stackoverflow.com/questions/20587354/how-to-call-entity-manager-in-a-constructor – Manolo

Смежные вопросы