使用Symfony和Doctrine调用成员函数has()on null 500

时间:2016-12-09 15:33:35

标签: symfony doctrine

我在设置doctrine以从以下服务文件运行时遇到一些麻烦。

<?php

// src/AppBundle/Services/SuperusersService.php
namespace AppBundle\Services;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Doctrine\ORM\EntityManager;

class SuperusersService extends Controller
{

    public function sayHello()
    {

        $em = $this->getDoctrine()->getManager();

         // Query here

    }

}

当我运行以上内容时,我收到以下错误消息。

  

调用成员函数has()on null 500内部服务器错误 -   FatalThrowableError

我从以下控制器文件中调用该文件。

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class LoginController extends Controller
{
    /**
     * @Route("/login")
     */
    public function indexAction(Request $request)
    {

        if(!empty($_POST)){

            ////
            // If for submitted attempt to log the user in.
            ////

            $superusersService = $this->get('app.superusers.services');

            $superusersService->sayHello();

        }

        $name = "Login";

        return $this->render('login/login.html.php', 
        array());

    }
}

服务档案

# Learn more about services, parameters and containers at
# http://symfony.com/doc/current/service_container.html
parameters:
#    parameter_name: value

services:
#    service_name:
#        class: AppBundle\Directory\ClassName
#        arguments: ["@another_service_name", "plain_value", "%parameter_name%"]
    app.superusers.services:
            class: AppBundle\Services\SuperusersService

现在我已经看了一些其他问题,但到目前为止我无法解决上述问题。我认为这与文件的设置有关,但我不确定是什么。

1 个答案:

答案 0 :(得分:6)

当控制器声明为服务时,容器属性不再存在,因此您无法再使用

获取服务
$this->get('service_name')

解决方案: 您需要按照常规服务的方式注入依赖项,这里是example

另外,我不确定这是否仅仅是测试代码,但你应该避免使用$ _POST全局变量,你可以使用提供的$ request方法。