我是Symfony的新手,并尝试修复错误。我通过restApi插入数据时出现 Access-Control-Allow-Origin标头出现在请求的资源上错误。
这是一个以给定格式发送数据的restful api:
{"default_runs":["24"],"date":1451932200,"driver":107}
控制器
public function postScheduleAction(Request $request)
{
$user = $this->getUser();
$user_id = $user->getId();
$entity = new Schedule();
$form = $this->createForm(new ScheduleType(), $entity);
$now = time();
$data = json_decode($request->getContent(), true);
$data["is_default"] = true;
$data["status"] = 0;
$finalData = array_merge($data,array("created_time"=>$now,"created_by"=>$user_id));
$request->request->replace(is_array($finalData) ? $finalData : array());
//I have checked, code is working fine till this line,
//but after bind the form it gives me error
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return array(
'id' => $entity->getId(),
);
}
return array(
'form' => $form,
);
}
Conclusion after debugging
我搜索了很多,转储到每一行,最后我用自定义的php-msql插入查询更改了symfony的插入功能,然后它工作正常。
所以现在我知道$form->bind($request);
行有任何错误,通过错过Access-Control-Allow-Origin
标题的任何胎儿错误,我都会收到错误。
有人可以帮助我抓住$form->bind($request);
中的错误,以便我可以解决该错误。
由于
答案 0 :(得分:0)
我认为您的错误不同,并说:
"请求的资源上没有Access-Control-Allow-Origin标头"
并出现错误,因为您想从服务器所在的其他域发出AJAX请求。
它与Same Origin Policy相关联,您可能需要实施CORS
同时检查以下链接:
答案 1 :(得分:0)
Access-Control-Allow-Origin: *
必须位于RESTful api响应的标题中,或者它需要与您的域名一起使用,否则它是跨源资源共享(大多数站点都不允许)。
您仍然可以在域内的服务器上代理外部资源(甚至包括标题),然后使用您的控制器点击它。
答案 2 :(得分:0)
我找到了问题并且问题已经解决,感谢所有人的回答。
实际上问题不在于Access-Control-Allow-Origin
标题(CORS)
。数据库外键关系存在问题。子表中存在与父表无关的错误条目。
因此,在绑定表单$form->bind($request);
时,它正在检查外键关系,并且由于该错误的条目而失败,并且它返回未格式化的错误(带有Access-Control-Allow-Origin
标头)。这就是它向我显示Access-Control-Allow-Origin header is present on the requested resource
错误的原因。