我有一个控制器类HomeController
,它有一个特定的方法来获取Entity Manager
。:
protected function getImageManager()
{
if(!isset($_SESSION)) session_start();
if(isset($_SESSION['id']))
{
if($em = $this->getDoctrine()->getEntityManager()) return $em;
}
return false;
}
当我在CCD_ 3中使用它时,它就起作用了。但是当我扩展控制器并尝试使用这种方法时,我得到了一个错误: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');
}
}
知道出了什么问题吗?
你在这里做错了很多事情。
- 会话是在Symfony中自动启动的,因此您不必手动启动它
- 当您想要的是EntityManager时,为什么要调用getImageManager
- 为什么要重写构造函数
这就是你应该怎么做
// HomeController.php
public function getEntityManager()
{
return $this->getDoctrine()->getEntityManager();
}
// ImageTransController
class ImageTransController extends HomeController
{
public function someAction()
{
$em = $this->getEntityManager();
// do something with $em
}
}