我需要创建一个州的下拉列表,这样一旦我从国家/地区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);
}
});
}
});
});
答案 0 :(得分:3)
我假设您使用的是不是最新主版本的FOSUserBundle版本。您的问题是由于直到dev-master版本,RegistrationController
扩展Symfony\Component\DependencyInjection\ContainerAware
而不是Symfony\Bundle\FrameworkBundle\Controller\Controller
。 Controller
类扩展了ContainerAware
并包含一系列快捷方式调用,例如getDoctrine
,generateUrl
和isGranted
。
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();
/../
}