FatalErrorException:错误:在非对象 symfony 上调用成员函数 has()
Posted
技术标签:
【中文标题】FatalErrorException:错误:在非对象 symfony 上调用成员函数 has()【英文标题】:FatalErrorException: Error: Call to a member function has() on a non-object symfony 【发布时间】:2014-05-05 22:05:32 【问题描述】:我使用 symfony 控制器作为服务。但是当我在控制器中调用教义管理器时,它会给出错误 FatalErrorException: Error: Call to a member function has() on a non-object.
这是我的控制器:
命名空间 Acme\StoreBundle\Controller; 使用 Doctrine\ORM\EntityManager; 类 ServiceController 扩展控制器 /** * * @var 实体管理器 */ 受保护的$em; 公共函数 __construct(EntityManager $em) $this->em = $em;我的 services.yml 是这样的:
服务:
service_controller:
class: Acme\StoreBundle\Controller\ServiceController
arguments: ["@doctrine.orm.entity_manager"]
我在另一个 DbController 控制器中调用实体管理器:
<?php
public function users()
$query = $this->em->createQuery('select u from AcmeStoreBundle:User u');
$user = $query->getResult();
【问题讨论】:
请在此处添加您的控制器代码 【参考方案1】:可以在ServiceController中获取EntityManager,如下:
$em = $this->getDoctrine()->getManager();
所以下面的代码没有意义:
service_controller:
class: Acme\StoreBundle\Controller\ServiceController
arguments: ["@doctrine.orm.entity_manager"]
我真的很想看看你的 DbController 代码,你能展示一下吗?
我的 DbController 是这样的:
<?php
namespace Acme\StoreBundle\Controller;
use Acme\StoreBundle\Entity\UserCategoryTag;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DbController extends Controller
//Suppose you want get all users you can do some like this..
public function Users()
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('AcmeStoreBundle:User');
$user = $repository->findAll();
【讨论】:
我尝试使用 $em = $this->getDoctrine()->getManager();但它没有奏效。我想使用实体管理器作为服务。你能告诉我该怎么做吗? @user3467205 认真的吗?不能……你能先显示你所有的 DbController 代码吗? 控制器里有2500行,你想看看控制器里的所有代码吗? 谢谢,但没用。当我使用它时显示错误: FatalErrorException: Error: Call to a member function has() on a non-object in /var/www/Mifilters/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller .php 第 202 行 @Randhir Symfony2 控制器没有 __construct 方法,删除你的 serviceController 和 service.yml 中的服务【参考方案2】:您还可以使用 per-execute 方法,如下所示:
1] 为预执行方法创建新的监听类
namespace Acme\Listener;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
/**
* Acme\Listener\ControllerListener
*/
class ControllerListener
/**
* On Core Controller this is used to set pre execute
*
* @param GetResponseEvent $event
*/
public function onCoreController(FilterControllerEvent $event)
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType())
$_controller = $event->getController();
if (isset($_controller[0]))
$controller = $_controller[0];
if (method_exists($controller, 'preExecute'))
$controller->preExecute();
2] 在你的配置文件 app/config/config.yml 中配置监听器
services:
controller.pre_execute_listener:
class: Acme\Listener\ControllerListener
tags:
- name: kernel.event_listener, event: kernel.controller, method: onCoreController
3] 控制器文件
namespace Acme\StoreBundle\Controller;
use Doctrine\ORM\EntityManager;
class ServiceController extends Controller
public function preExecute()
$this->em = $this->getDoctrine()->getEntityManager();
4] 你的功能
<?php
public function users()
$query = $this->em->createQuery('select u from AcmeStoreBundle:User u');
$user = $query->getResult();
【讨论】:
【参考方案3】:我通过尝试很多方法解决了这个问题。 这是解决方案:
您必须将控制器用作服务。我使用 TagClass 控制器作为服务。这是我的控制器代码:
<?php
namespace Acme\StoreBundle\Controller;
class TagClassController extends Controller
public $em;
public function __construct(Entity Manager $em)
$this->em = $em;
public function ParseWebsite($categoryid)
?>
要使用它,您必须在 services.yml 中将控制器定义为服务,如下所示:
parameters:
acme.controller.tagclass.class: Acme\StoreBundle\Controller\TagClassController
services:
acme.controller.tagclass:
class: "%acme.controller.tagclass.class%"
arguments: [ @doctrine.orm.entity_manager ]
你可以像这样在 TagClass 中调用任何方法:
$this->forward('acme.controller.tagclass:ParseWebsite',array($categoryid));
【讨论】:
以上是关于FatalErrorException:错误:在非对象 symfony 上调用成员函数 has()的主要内容,如果未能解决你的问题,请参考以下文章
我得到了 FatalErrorException: 试图在奏鸣曲管理员中创建自定义操作
HtmlServiceProvider.php 第 36 行中的 FatalErrorException:laravel
php artisan 抛出 FatalErrorException 类未找到
Laravel 5.4 上 Manager.php 第 139 行中的 FatalErrorException
RedirectResponse.php 第 75 行中的 Lumen FatalErrorException:在 null 上调用成员函数 flashInput()