在Symfony控制器中的教条问题
我有一个错误,我找不到解决方案。我有一个司机的Symfony这样的:在Symfony控制器中的教条问题
<?php
namespace Consolidador\PanelBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DataController extends Controller
{
public function listOfUsers()
{
$em = $this->getDoctrine()->getManager();
$settings = $em->getRepository('PanelBundle:Users')->findAll();
return $settings;
}
}
由于只看到返回使用Doctrine用户的列表,以及当我打电话的任何方法,如:
$users = new DataController();
$listOfUsers = $users->listOfUsers()
例外出现在DataController类类具有与学说做:
Error: Call to a member function has() on a non-object
我不明白发生了什么,我使用和扩展控制器,所以你应该能够访问主义没有任何错误......在其他C ontrollers使用主义没有重大问题。
任何解决方案?
非常感谢。
这是因为您创建类的实例的方式。一个常规的symfony控制器实例由service container
创建,它调用setContainer
方法。您的DataController
班级对容器不了解,这就是为什么您会收到错误(您不能仅仅执行new DataController()
)。
一个快速脏的方式来解决,这是刚刚成立容器上的DataController
实例:
$users = new DataController();
$users->setContainer($container); //you need to have container available, I don't know what context are you in
$listOfUsers = $users->listOfUsers();
了适当的方式做,这是define your Controller as a service,注入Doctrine
到它,并通过
$dataController = $this->container->get('your_data_controller_class');
重要注意事项:其他的事情是,控制器意味着要采取Request
和r eturn Response
对象,在你的情况下,你正在返回一个不好的数组。您应该将此逻辑移到Controller类之外的某个位置 - 类似UserManager
类。那么你应该将这个UserManager
定义为服务,注入Doctrine
,在那里做你的逻辑并返回数据(一个数组)。在你的控制器中,你应该调用这个服务。
这样你将得到更干净的代码并将控制器外部的逻辑移动。
谢谢,我试着直接在课堂上设置容器,它工作。我会阅读你通过我的链接,尽可能正确地做到这一点。谢谢! – JSGarcia 2015-04-01 11:13:32
你如何传递一个doctrine引用到你的类datacontroller?你可以发布datacontroller类的代码吗? – Matteo 2015-04-01 10:53:26
代码DataController类已启动。我不以任何方式引用Doctrine,是不是你认为如果扩展一个Controller类的类可以直接访问容器依赖关系,那么Doctrine? – JSGarcia 2015-04-01 11:00:16