【问题标题】:How to use methods from an extended controller?如何使用扩展控制器中的方法?
【发布时间】:2013-12-14 16:18:03
【问题描述】:

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

知道出了什么问题吗?

【问题讨论】:

  • HomeController 没有任何构造方法。
  • 它也属于我在您的新帖子中所说的依赖注入概念

标签: php symfony entitymanager


【解决方案1】:

你在这里做错了很多事情。

  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
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多