标签: fosrestbundle

如何使用FOSRESTBundle为某些操作生成自定义路由?

我实际上使用自动路由生成我的api Rest,使用FOSRESTBundle,我也使用NelmioApiDocBundle生成api doc.

为我的routing.yml生成api的路由

users:
    type:     rest
    resource: Project\RESTBundle\Controller\UsersController
Run Code Online (Sandbox Code Playgroud)

但是对于某些操作,我想设置我的自定义路由...如果我尝试为操作添加另一个路由规则,它只是忽略它并生成自动路由.

symfony symfony-2.1 fosrestbundle

4
推荐指数
1
解决办法
2746
查看次数

FOSRestBundle和JMS Serializer,在提交JSON时出错

我一直在尝试Symfony 2.2,FOSRest Bundle(使用JMS Serializer)和使用MongoDB的Doctrine ODM.

经过几个小时试图找出如何正确设置FOSRest捆绑包后,我仍然遇到一些麻烦:我有一个非常简单的路线,返回产品和价格列表.每当我请求HTML格式时,我得到正确的响应,但如果我请求任何其他格式(JSON,XML),我会收到错误:

[{"message": "Resources are not supported in serialized data. Path: Monolog\\Handler\\StreamHandler -> Symfony\\Bridge\\Monolog\\Logger -> Doctrine\\Bundle\\MongoDBBundle\\Logger\\Logger -> Doctrine\\Bundle\\MongoDBBundle\\Logger\\AggregateLogger -> Doctrine\\ODM\\MongoDB\\Configuration -> Doctrine\\MongoDB\\Connection -> Doctrine\\ODM\\MongoDB\\LoggableCursor",
    "class": "JMS\\Serializer\\Exception\\RuntimeException",...
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到完整的错误信息

我当前的设置非常简单:我创建了一个到控制器的单一路径,返回产品列表和价格(我按照这个例子来创建产品文档).

这是路线:

rest_product:
    type: rest
    resource: Onema\RestApiBundle\Controller\ProductController
Run Code Online (Sandbox Code Playgroud)

这是控制器:

<?php
namespace Onema\RestApiBundle\Controller;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\Rest\Util\Codes;
use JMS\Serializer\SerializationContext;
use Onema\RestApiBundle\Document\Product;

class ProductController extends FOSRestController implements ClassResourceInterface
{
    public function getAction()
    {
        $dm = $this->get('doctrine_mongodb')->getManager();
        $products = $dm->getRepository('RestApiBundle:Product')->findAll();

        if(!$products)
        {
            throw …
Run Code Online (Sandbox Code Playgroud)

php mongodb symfony doctrine-odm fosrestbundle

4
推荐指数
1
解决办法
1万
查看次数

处理查询字符串?

使用Symfony2,FOSRest和Doctrine构建API.鉴于以下路线:

"GET /api/path/to/product"
Run Code Online (Sandbox Code Playgroud)

以及以下参数:

[("vendorID", 10), ("destination", "tanzania"), ("type", "accommodation"), ("sort", "price", "ASC")]
Run Code Online (Sandbox Code Playgroud)

使用FOSRest捆绑包可以检索这些字符串,但是,将它们映射到学说查询是挑战的起因.

我想过使用为查询字符串的不同组合定制的大量案例语句,而不是优雅的解决方案.想要构建一个不会严重影响性能的更通用的控制器.任何建议都会有帮助.

symfony doctrine-orm fosrestbundle symfony-2.2 symfony-2.3

4
推荐指数
1
解决办法
5171
查看次数

Symfony 2 - FOSUserBundle - 如何在API中集成

我正在研究一个新项目symfony 2.我正在同时学习这个框架.对于用户管理,我使用捆绑FOSUserBundle.我的项目运作良好,我可以登录,注册,注销和所有其他命令.

问题是,我想制作智能手机应用程序,它将使用我的Symfony应用程序的API.在应用中,用户必须登录或注册.是否也可以为API使用FOSUserBundle方法?

我研究了另一个非常适合制作API的软件包,它是FOSRestBundle.如果没有解决方案,你认为我将不得不创建我自己的用户方法,如:

    /api/login
    /api/registrer 
Run Code Online (Sandbox Code Playgroud)

然后,在这个方法里面,我重定向到FOSUserBundle方法?我很想知道什么是最好的,最干净的登录方式,并通过智能手机注册FOSUserBundle,所以使用API

谢谢

api mobile symfony fosuserbundle fosrestbundle

4
推荐指数
2
解决办法
6580
查看次数

FOSRestBundle将json数据发布到不起作用的表单

我将JSON数据发布到控制器中的表单.实体没有填写我发送的属性,这里是它的样子:

// Controller

class UserApiController extends FOSRestController
{
    // works fine
    public function cgetAction()
    {
        return $this->get('model.user')->getAllUsers();
    }

    // works fine
    public function getAction($id)
    {
        return $this->get('model.user')->getUserById($id);
    }

    // this method fails
    public function postAction(Request $request)
    {
        $form = $this->createForm(new UserType(), new User());
        $form->bind($request);

        if($form->isValid())
        {
            die('are you valid or not??');
        }

        return $this->view($form, 400);
    }
}
Run Code Online (Sandbox Code Playgroud)

实体看起来像常规实体,也可以形成.

我有一个测试控制器将json数据发送到api:

public function testJsonPostAction()
    {
        $client = static::createClient();
        $client->request(
            'POST',
            '/api/1.0/users',
            array(),
            array(),
            array('CONTENT_TYPE' => 'application/json'),
            '{"firstName": "John", "lastName": "Doe", "emailAddress": "something@somewhere.com", …
Run Code Online (Sandbox Code Playgroud)

forms api symfony fosrestbundle

4
推荐指数
1
解决办法
4542
查看次数

Symfony2 FOSRESTBundle REST API返回PDF

我在里面制作了一个Bundle和一个REST控制器."index"方法以JSON格式返回数组,没关系:

MyBundle /控制器/原料药/休息/ BaconController.php

class BaconController extends Controller implements ClassResourceInterface
{
    /**
     * @var Request $request
     * @return array
     * @Rest\View
     */
    public function cgetAction(Request $request)
    {
        $mediaType = $request->attributes->get('media_type');
        $format = $request->getFormat($mediaType);
        my_dump($format);

        return array(
             array("id" => 1, "title" => "hello",),
             array("id" => 2, "title" => "there",),
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

MyBundle /资源/配置/ API/routing_rest.yml

my_api_rest_bacon:
    type: rest
    resource: "MyBundle:Api/Rest/Bacon"
    name_prefix: api_rest_bacon_
    prefix: /my/bacon
Run Code Online (Sandbox Code Playgroud)

所以,此时JSON结果完全返回:

mysite.com/app_dev.php/api/my/bacon/bacons.json

返回我的数组.

但现在我需要让我的控制器生成带有数据的PDF.所以我希望它在我打电话时返回PDF文件:

mysite.com/app_dev.php/api/my/bacon/bacons.pdf

我发现了一些半手册:RSS视图处理程序,RSS config.ynal,带有答案的CSV问题.并尝试做类似的事情:

我添加了这些行

Symfony的/应用/配置/ config.yml

framework: …
Run Code Online (Sandbox Code Playgroud)

php symfony fosrestbundle

4
推荐指数
1
解决办法
4800
查看次数

FOSRestBundle序列化程序错误

我在使用FOSRestBundle时遇到错误.

致命错误:在第209行的/home/a15net/public_html/kavuklar/vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/View/ViewHandler.php中找不到类'JMS\Serializer\SerializationContext'

它在composer.phar更新之前工作.

你有没有想过为什么我会收到这个错误?

php serialization symfony fosrestbundle

3
推荐指数
1
解决办法
1913
查看次数

FOSRestBundle 捕获所有路由

我正在尝试将 FOSRestBundle 集成到我的应用程序中。

我只想在路线匹配时使用它,例如^/api.

我真的不知道如何使用这个包,而且我认为文档非常糟糕。(没有冒犯的意思)。

fos_rest:
    format_listener:
        enabled: true
        rules:
            - { path: '^/api', priorities: ['json', 'xml'], fallback_format: 'html' }
Run Code Online (Sandbox Code Playgroud)

当我从浏览器请求任何路线时,我收到此错误:

无法确定匹配的已接受响应格式

我只想匹配以 ^/api 开头的路由。

有任何想法吗?

php rest symfony fosrestbundle

3
推荐指数
1
解决办法
1387
查看次数

组注释不起作用

Symfony 3.1.7 + FOSRestBundle 最新版本

<?php
namespace PM\ApiBundle\Controller;

...
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\View\View;

class ArticlesController extends FOSRestController
{
    /**
     * @ApiDoc(
     *  section="articles",
     *  resource=true,
     *  description="Get articles published"
     * )
     * @Rest\View(serializerGroups={"article"})
     * @Rest\Get("/articles")
     */
    public function getArticlesAction(Request $request)
    {
        $articles = $this->getDoctrine()
            ->getManager()
            ->getRepository('PMPlatformBundle:Article')
            ->findAllDateDesc();
        /* @var $articles Article[] */
        return $articles;
    }
Run Code Online (Sandbox Code Playgroud)

然后在我的文章实体中,我使用正确的使用语句添加了这个注释 @Groups({"article"})。

我得到的默认序列化程序:

[
    [],
    []
]
Run Code Online (Sandbox Code Playgroud)

我得到了 Whit JMS 序列化程序(捆绑):

{
    "0": {},
    "1": {}
}
Run Code Online (Sandbox Code Playgroud)

(我在 db 中有两篇文章)似乎无法识别“文章”组。当我使用没有这个注释的默认序列化程序时,我得到一个循环错误。

怎么了 ?

[编辑] …

php rest serialization symfony fosrestbundle

3
推荐指数
1
解决办法
2526
查看次数

如何将选项传递给 Symfony Serializer 组件中的 json_encode 函数

这是情况:我在基于 symfony3 的 rest api 上工作,它使用 FOSRestBundle 和 symfony 序列化器组件,因此方法返回数组,FOSRest 处理编码和响应。问题是序列化程序使用带有默认设置的 json_encode 和某些符号的 api 返回数据,如 '\u00c9S'。所以我需要以某种方式将 'JSON_UNESCAPED_UNICODE' 传递给 json_encode() 。有什么合适的方法可以达到这个目标吗?方法示例:

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use FOS\RestBundle\Controller\Annotations as Rest;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\Request;

/**
 * Class ExampleController
 * @package AppBundle\Controller
 */
class ExampleController extends Controller
{
    /**
     * @Rest\Get("/get-some-data")
     * @param Request $request
     * @return array
     */
    public function getSomeDataAction(Request $request)
    {
        $someData = [
            'prop1' => 'Value',
            'prop2' => 'Value',
            'prop3' => 'Value',
            'prop4' => 'Value',
        ];

        return …
Run Code Online (Sandbox Code Playgroud)

php serialization symfony fosrestbundle

3
推荐指数
2
解决办法
3213
查看次数