getDoctrine()在FOSUserBundle symfony2中不起作用

时间:2015-12-24 06:24:33

标签: php jquery ajax symfony

我需要创建一个州的下拉列表,这样一旦我从国家/地区drop_down中选择国家/地区,那么就应该使用Ajax来表示该国家/地区的drop_down。 我在收到错误后收到错误。

  

尝试调用类“FOS \ UserBundle \ Controller \ RegistrationController”的名为“getDoctrine”的未定义方法

调用AJAX并将国家/地区的ID传递给控制器​​,主要问题是getDoctrine功能。 这是我的控制器。

我是symfony的新手,请帮助我。

public function getStateAction(Request $request)
    {               
            $em1 = $this->getDoctrine()->getManager();
            $data = $request->request->all();   

            $countryId = $data['id'];
            $repository = $em->getRepository('FOSUserBundle:State');
            $query = $repository->createQueryBuilder('p');
            $query->where('p.country ='.$countryId);
            $query->orderBy('p.id', 'ASC');
            $stateList = $query->getQuery()->getResult();
            //print_r($stateList); die;
    }

这是我的ajax

$(document).ready(function(){   
    $("#fos_user_registration_form_country_id").change(function(){
    var countryId = $(this).val();
             if(countryId!=0){
               $.ajax({
               type: "POST",
               url: "{{ path('fos_user_registration_country') }}",
               data: {id: countryId},
               cache: false,
               success: function(result){
               ("#fos_user_registration_form_state_id").append(result);
             }
           });
        }
    });
});

3 个答案:

答案 0 :(得分:3)

我假设您使用的是不是最新主版本的FOSUserBundle版本。您的问题是由于直到dev-master版本,RegistrationController扩展Symfony\Component\DependencyInjection\ContainerAware而不是Symfony\Bundle\FrameworkBundle\Controller\ControllerController类扩展了ContainerAware并包含一系列快捷方式调用,例如getDoctrinegenerateUrlisGranted

getDoctrine方法只调用容器,如..

/**
 * Shortcut to return the Doctrine Registry service.
 *
 * @return Registry
 *
 * @throws \LogicException If DoctrineBundle is not available
 */
protected function getDoctrine()
{
    if (!$this->container->has('doctrine')) {
        throw new \LogicException('The DoctrineBundle is not registered in your application.');
    }

    return $this->container->get('doctrine');
}

您有两种选择:将getDoctrine方法复制到您的课程中,或直接使用$this->container->get('doctrine')

答案 1 :(得分:2)

您尝试过:

public function getStateAction(Request $request)
{   
    $em1 = $this->container->get('doctrine')->getManager();

    /.../
}

getDoctrine()Symfony\Bundle\FrameworkBundle\Controller\Controller

未延伸的班级FOS\UserBundle\Controller\RegistrationController的方法

答案 2 :(得分:0)

我将此行添加到控制器中,控制器继承自容器而不是控制器。谢谢你的帮助@scoolnico。

 public function getStateAction(Request $request)
        {               
                $em = $this->getDoctrine()->getManager();
                /../


        }