Symfony 4.3.5 FOS \ RestBundle работает только default_version - PullRequest
1 голос
/ 18 октября 2019

У меня проблема с конфигурацией Symfony FosRest для управления версиями URI ... Мой fos_rest.yaml: fos_rest:

    disable_csrf_role: ROLE_API
    param_fetcher_listener: true
    view:
        mime_types:
#            json: ['application/json', 'application/json;version=1.0', 'application/json;version=1.1', 'application/json;version=1.2']
#            xml: ['application/xml', 'application/xml']
        view_response_listener: 'force'
        formats:
            xml:  true
            json: true
        templating_formats:
            html: true
    format_listener:
        rules:
            - { path: '^/api', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: true }
            - { path: ^/, priorities: [ html, json, xml ], fallback_format: ~, prefer_extension: true, stop: true }
    versioning:
        enabled: true
        default_version: v1
        resolvers:
            media_type:
                enabled: true
    exception:
        codes:
            'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404
            'Doctrine\ORM\OptimisticLockException': HTTP_CONFLICT
        messages:
            'Symfony\Component\Routing\Exception\ResourceNotFoundException': true
    allowed_methods_listener: true
    access_denied_listener:
        json: true
    body_listener: true

rout.yaml:

users:
    type:     rest
    resource: App\Controller\Api\UsersRestController
    prefix:   /api/{version}/
    name_prefix:  api_

tests:
    type:     rest
    resource: App\Controller\Api\TestsRestController
    prefix:   /api/{version}/
    name_prefix:  api_

Это работает:

/**
 * @Version("v1")
 */
class TestsRestController extends AbstractFOSRestController {

, но это не:

/**
 * @Version("v2")
 */
class TestsRestController extends AbstractFOSRestController {

, когда я изменяю default_version: v1 на v2 работает только там, где я объявляю v2

Спасибо за помощь

1 Ответ

0 голосов
/ 18 октября 2019

Я нашел решение.

rout.yaml:

controllers:
    resource: '../src/Controller/Api/'
    type:     rest
    prefix:   /api/{version}/
    name_prefix:  api_

App \ Controller \ Api \ UserController:

/**
 * @RouteResource("User")
 */
class UserController extends AbstractFOSRestController {
    public function cgetAction(Request $request) {
        $output = [new User(), new User()];
        $view = $this->view($output, 200);
        return $this->handleView($view);
    }
}

А в User Entity используйте JMS\ Сериализатор \ Аннотации отл. С тех пор или до

вот и все;)

...