如何使用扩展控制器中的方法?

时间:2013-12-14 16:18:04

标签: php symfony entitymanager

我有一个控制器类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');
    }
}

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:0)

你在这里犯了很多错误。

  1. 会话在Symfony中自动启动,因此您不必手动启动它
  2. 当你想要的是EntityManager时,为什么要调用getImageManager?
  3. 你为什么要重写构造函数?
  4. 这就是你应该这样做的方式

    // HomeController.php
    public function getEntityManager()
    {
        return $this->getDoctrine()->getEntityManager();
    }
    
    // ImageTransController
    class ImageTransController extends HomeController
    {
        public function someAction()
        {
            $em = $this->getEntityManager();
            // do something with $em
        }
    }