use*_*111 15 php symfony fosrestbundle
有人可以清楚地解释如何使用FOSRest为REST请求配置路由吗?每个教程似乎都有不同的做法.
我的控制器:
<?php
namespace Data\APIBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class DatasetController extends Controller{
protected function postDatasetAction(Request $request){
//Query here
}
Run Code Online (Sandbox Code Playgroud)
URL应如下所示:Symfony/web/app_dev.php/api/dataset.所以我认为路线应该是......
应用程序/配置/ routes.yml
data_api:
resource: "@DataAPIBundle/Resources/config/routing.yml"
prefix: /api
type: rest
Run Code Online (Sandbox Code Playgroud)
和....
数据/ APIBundle /资源/配置/ routing.yml中
data_query:
type: rest
pattern: /dataset
defaults: {_controller: DataAPIBundle:Dataset:datasetAction, _format: json }
requirements:
_method: POST
Run Code Online (Sandbox Code Playgroud)
Thi*_*nne 17
请按照下一个URL阅读官方文档:http: //symfony.com/doc/master/bundles/FOSRestBundle/index.html
从这个捆绑包开始,我建议遵循单一的restful controller文档:http: //symfony.com/doc/master/bundles/FOSRestBundle/5-automatic-route-generation_single-restful-controller.html
您还可以找到有关此捆绑包可提供的内容的明确示例(https://github.com/liip/LiipHelloBundle).
您发布的片段中的一些内容引起了我的注意:
您的控制器方法的可见性受到保护,而它应该是公开的(http://symfony.com/doc/current/book/controller.html)
public function postDatasetAction(Request $request) {
// your code
}
Run Code Online (Sandbox Code Playgroud)
为配置路由而创建的"routing.yml"文件应包含上述控制器方法的名称(postDatasetAction而不是DatasetAction):
# routing.yml
data_query:
type: rest
pattern: /dataset
defaults: {_controller: DataAPIBundle:Dataset:postDatasetAction, _format: json }
requirements:
_method: POST
Run Code Online (Sandbox Code Playgroud)
请在下面找到一个示例来设置如下路线:
get_items获取任何/items.{json}
# config.yml
fos_rest:
allowed_methods_listener: true
format_listener:
default_priorities: ['json', html, '*/*']
fallback_format: json
prefer_extension: true
param_fetcher_listener: true
routing_loader:
default_format: json
view:
formats:
json: true
mime_types:
json: ['application/json', 'application/x-json']
force_redirects:
html: true
view_response_listener: force
Run Code Online (Sandbox Code Playgroud)
# routing.yml
categories:
type: rest
resource: Acme\DemoBundle\Controller\ItemController
Run Code Online (Sandbox Code Playgroud)
<?php
namespace Acme\DemoBundle\Controller
use FOS\RestBundle\Request\ParamFetcher;
use FOS\RestBundle\Controller\Annotations as Rest;
class ItemController
{
/**
* Get items by constraints
*
* @Rest\QueryParam(name="id", array=true, requirements="\d+", default="-1", description="Identifier")
* @Rest\QueryParam(name="active", requirements="\d?", default="1", description="Active items")
* @Rest\QueryParam(name="from", requirements="\d{4}-\d{2}-\d{2}", default="0000-00-00", description="From date")
* @Rest\QueryParam(name="to", requirements="\d{4}-\d{2}-\d{2}", default="0000-00-00", description="End date")
* @Rest\QueryParam(name="labels", array=true, requirements="\d+", default="-1", description="Labels under which items have been classifed")
*
* @Rest\View()
*
* @param ParamFetcher $paramFetcher
*/
public function getItemsAction(ParamFetcher $paramFetcher) {
$parameters = $paramFetcher->all();
// returns array which will be converted to json contents by FOSRestBundle
return $this->getResource($parameters);
}
}
Run Code Online (Sandbox Code Playgroud)
PS:您需要添加一个视图以将资源显示为HTML页面