Symfony 控制器中的学说问题
Problems with doctrine in Symfony controller
我有一个错误,我找不到解决办法。我有一个驱动程序 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;
}
}
只看到 returns 使用 Doctrine 的用户列表,当我调用任何方法时,就像这样:
$users = new DataController();
$listOfUsers = $users->listOfUsers()
DataController class 中出现与 Doctrine 有关的异常:
Error: Call to a member function has() on a non-object
我不明白发生了什么,我正在使用和扩展控制器,所以你应该能够毫无错误地访问 Doctrine ...在其他控制器中使用 Doctrine 没有重大问题。
有什么解决办法吗?
非常感谢。
这是因为您创建实例的方式 class。一个常规的 symfony 控制器实例由 service container
创建,它调用 setContainer
方法。您的 DataController
class 不了解容器,这就是您收到错误的原因(您不能只做 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');
重要说明:另一件事是 Controller 是为了接受 Request
和 return Response
对象,在你的情况下你return 是一个不好的数组。您应该将此逻辑移动到 Controller class 之外的某个位置 - 类似于 UserManager
class。然后你应该将这个UserManager
定义为一个服务,注入Doctrine
,在那里做你的逻辑和return数据(一个数组)。比在你的控制器中你应该调用这个服务。
这样您将获得更清晰的代码并将逻辑移到控制器之外。
我有一个错误,我找不到解决办法。我有一个驱动程序 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;
}
}
只看到 returns 使用 Doctrine 的用户列表,当我调用任何方法时,就像这样:
$users = new DataController();
$listOfUsers = $users->listOfUsers()
DataController class 中出现与 Doctrine 有关的异常:
Error: Call to a member function has() on a non-object
我不明白发生了什么,我正在使用和扩展控制器,所以你应该能够毫无错误地访问 Doctrine ...在其他控制器中使用 Doctrine 没有重大问题。
有什么解决办法吗?
非常感谢。
这是因为您创建实例的方式 class。一个常规的 symfony 控制器实例由 service container
创建,它调用 setContainer
方法。您的 DataController
class 不了解容器,这就是您收到错误的原因(您不能只做 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');
重要说明:另一件事是 Controller 是为了接受 Request
和 return Response
对象,在你的情况下你return 是一个不好的数组。您应该将此逻辑移动到 Controller class 之外的某个位置 - 类似于 UserManager
class。然后你应该将这个UserManager
定义为一个服务,注入Doctrine
,在那里做你的逻辑和return数据(一个数组)。比在你的控制器中你应该调用这个服务。
这样您将获得更清晰的代码并将逻辑移到控制器之外。