我有一個控制器,它處理來自AJAX請求的表單提交。我不想重複自己,所以我把表單處理代碼的方法:使用PUT而不是POST提交表單
// Should process POST request
public function create(Request $request)
{
return $this->processEdit($request);
}
// Should process PUT request
public function update($id, Request $request)
{
$entity = $this->findEntity($id); // custom method
if (!$entity)
return $this->myCustomErrorResponse();
return $this->processEdit($request, $entity);
}
private function processEdit(Request $request, Entity $entity = null)
{
$form = $this->createForm('my_entity', $entity);
$form->handleRequest($request);
if ($form->isValid()) {
// Do something
} else {
// Handle invalid form
}
return $response;
}
我有以下兩種途徑:
ajax_create:
pattern:/
defaults: { _controller: 'MyBundle:Ajax:create' }
methods: [ POST ]
ajax_update:
pattern: /{id}
defaults: { _controller: 'MyBundle:Ajax:update' }
methods: [ PUT ]
requirements:
id: \d+
然而,當我通過AJAX提交表單,它不會接受PUT
請求,如果沒有任何表單錯誤消息,返回表單無效。如果我改變控制器代碼升技,
$form = $this->createForm('my_entity', $entity, array(
'method' => 'PUT',
));
...它將處理PUT
請求,但不POST
請求。
我想知道Symfony2的哪個部分檢查表單的HTTP方法,所以我試圖在源代碼中尋找答案,但是我找不到線索。請問你們有沒有分享你的知識?
另一個問題,有沒有辦法繞過HTTP方法檢查?我正在通過$method
到上面顯示的方法。
非常感謝。
更新:
爲了使我的問題更清楚,我的Symfony2應用程序請求路由(POST和PUT)到正確的控制器方法。
我提到的改變上面的代碼,那就是:
// Should process POST request
public function create(Request $request)
{
return $this->processEdit($request);
}
// Should process PUT request
public function update($id, Request $request)
{
$entity = $this->findEntity($id); // custom method
if (!$entity)
return $this->myCustomErrorResponse();
return $this->processEdit($request, 'PUT', $entity);
}
private function processEdit(Request $request, $method = 'POST', Entity $entity = null)
{
$form = $this->createForm('my_entity', $entity, array(
'method' => $method,
));
$form->handleRequest($request);
if ($form->isValid()) {
// Do something
} else {
// Handle invalid form
}
return $response;
}
嘿,那裏。昨天我正在執行另一個類似的表單,我突然意識到我可以使用'Request :: getMethod()'!無論如何,非常感謝。 – pikachu0