我正在尝试使用最新的Symfony(2.4.5)和FOSRestBundle(dev-master 6b384c1)来引导简单的REST应用程序。
我的配置:
fos_rest:
format_listener: true
view:
view_response_listener: true
sensio_framework_extra:
view: { annotations: false }
router: { annotations: true }
我的路线:
products:
type: rest
resource: Telemetrik\Bundle\ProductBundle\Controller\ProductsController
控制器:
<?php
// namespace & imports
class ProductsController extends Controller
{
/**
* @return Form
* @View("TelemetrikProductBundle::form.html.twig")
*/
public function newProductAction()
{
return $this->getForm();
}
/**
* @param Request $request
* @return View|Form
* @View
*/
public function postProductsAction(Request $request)
{
$form = $this->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
// Logic placeholder
}
return $form;
}
protected function getForm()
{
return $this->createForm(new ProductType());
}
}
使用router:debug
时,我得到:
new_product GET ANY ANY /products/new.{_format}
post_products POST ANY ANY /products.{_format}
哪个很好但是因为newProductAction
应该是一个形式:
/products/new
而不是/products/new.html
访问我的表单(这似乎是我可以访问该资源的唯一选项)。如果我转到products/new
,我会收到:Format '' not supported, handler must be implemented
答案 0 :(得分:2)
sensio_framework_extra:
view: { annotations: false }
router: { annotations: true }
fos_rest:
routing_loader:
default_format: json
format_listener: true
view:
view_response_listener: true
答案 1 :(得分:2)
我帮助将格式默认添加到json
fos_rest:
routing_loader:
default_format: json
答案 2 :(得分:0)
将此添加到您的config.yml
:
fos_rest:
format_listener:
rules:
- { path: ^/products/new, priorities: [html, json, xml], fallback_format: html, prefer_extension: false }
这应该将html扩展名设置为此路径的默认值,并且应该使其不需要扩展名。