【问题标题】:symfony 3 and FOSRest Bundle Routingsymfony 3 和 FOSRest 捆绑路由
【发布时间】:2017-11-09 09:49:49
【问题描述】:

我正在尝试使用 FOS REST Bundle 设置 symfony3 代码库,但最终没有找到路由错误

AppBundle\Resources\config\api-routing.yml

check:
    type: rest
    resource: "@AppBundle/Controller/CheckController.php"

app\config\routing.yml

app:
    type: rest
    prefix: /
    resource: '@AppBundle/Resources/config/api-routing.yml'

控制器

namespace AppBundle\Controller;

use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations\Version;
use FOS\RestBundle\Controller\Annotations\RouteResource;
use Symfony\Component\HttpFoundation\Request;

/**
 * @RouteResource("Check")
 * @Version("v1")
 */

class CheckController extends FOSRestController
{

    public function getAction(Request $request)
    {
        $data = "Ok";
        return new JsonResponse($data);
    }
}

http://127.0.0.1:8000/v1/app/check/ return no route

我想集成rest api route的版本控制。你能分享一下错误是什么,我该如何纠正这个错误?

fos_rest:
    body_listener: true
    versioning:
        enabled: true
        resolvers:
            query: 
                enabled: true
                parameter_name: version
    format_listener:
        rules:
            - { path: '^/', priorities: ['json'], fallback_format: json, prefer_extension: false }
    param_fetcher_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true

【问题讨论】:

    标签: symfony fosrestbundle symfony-routing


    【解决方案1】:

    这是工作示例。

    app\config\routng.yml

    app:
        type: rest
        resource: "@AppBundle/Resources/config/routing.yml"
        prefix: /api
    

    AppBundle\Resources\config\routing.yml

    rest_my:
        type: rest
        prefix: /v1
        resource: "@AppBundle/Controller/MyRestController.php"
        name_prefix:  api_1_
    

    活动路线将是:

    http://127.0.0.1:8000/api/v1/<MyRestControllerAction>
    

    或用于第二个控制器

    AppBundle\Resources\config\routing.yml

    rest_user:
        type: rest
        prefix: /v1/user
        resource: "@AppBundle/Controller/UserRestController.php"
        name_prefix:  api_1_
    

    活动路线将是:

    http://127.0.0.1:8000/api/v1/user/<UserRestControllerAction>
    

    希望我能帮到你……谢谢。

    更新 #1: 这是我将 json 格式转换为 config.yml 文件的完整 fos_rest 配置:

    fos_rest:
        routing_loader:
            default_format: json
            include_format: false
        body_converter:
            enabled: true
        body_listener:
            decoders:
                json: fos_rest.decoder.json
        format_listener:
            enabled: true
            rules:
                - { path: '^/api/v1/', priorities: ['json'], fallback_format: json, prefer_extension: true}
                - { path: '^/', priorities: ['json', 'html'], fallback_format: 'html' }
        serializer:
            serialize_null: true
        view:
            view_response_listener: 'force'
            templating_formats:
                html: false
        param_fetcher_listener: 'force'
    

    如果您需要更多,那么您拥有 fos_rest 的完整文档 http://symfony.com/doc/current/bundles/FOSRestBundle/configuration-reference.html

    【讨论】:

    • 你能分享你的 fos 配置设置吗?我用我的更新了。
    • 我也在尝试利用 FOSRest bundle 提供的版本控制
    • 当我调试路由时,我确实看到 /v1/app/check 但是当我尝试在网页上加载时 127.0.0.1:8000/v1/app/check 它说找不到路由.....我已经定义了 getAction() Checkcontroller...你认为我的方法映射正确吗?
    • 在示例中需要跟踪前缀路由在控制器中创建 getExampleAction 并尝试继续 127.0.0.1:8000/v1/app/example 路由
    • 问题在于 FOSRestBundle 的 @Version 没有它我认为添加 /v1 作为前缀确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2016-06-29
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多