Bagaimana cara mendefinisikan operasi POST khusus di YAML?

Di proyek api-platform saya, saya ingin membuat operasi POST khusus. Meskipun ini berfungsi dengan baik menggunakan anotasi untuk perutean, saya mengalami kebuntuan saat menggunakan YAML.

Definisi sumber daya API

# src/AppBundle/Resources/config/api_resources/resources.yml
AppBundle\Entity\Foo:
    collectionOperations:
        get:
            method: 'GET'
        special:
            route_name: 'foo_special'

Rute

# app/config/routing.yml
foo_special:
    path: '/foo/special'
    methods:  ['POST']
    defaults:
        _api_resource_class: 'AppBundle\Entity\Foo'
        _api_collection_operation_name: 'special'

Pesan eror:

"hydra:description": "Tidak dapat menemukan pengontrol untuk jalur \"/foo/special\". Rute salah dikonfigurasi."

Adakah yang tahu apa yang salah di sini?


person Gottlieb Notschnabel    schedule 13.06.2017    source sumber
comment
Tidak ada operasi POST khusus di YAML. Sama seperti tidak ada operasi seperti itu di ASCII atau UTF-8. Interpretasi makna karakter ASCII, bahkan digabungkan menjadi skalar YAML dilakukan oleh aplikasi.   -  person Anthon    schedule 14.06.2017
comment
Itu sangat membantu. Terima kasih telah mengklarifikasi!   -  person Gottlieb Notschnabel    schedule 14.06.2017


Jawaban (2)


Mengutip meyerbaptiste di github:

Jika Anda menggunakan pola ADR (metode Action class + __invoke()), Anda harus mendefinisikan pengontrol Anda (atau tindakan Anda di sini) sebagai layanan dan kemudian menggunakan nama layanan sebagai pengontrol. (yaitu _controler: app.special_action atau _controller: AppBundle\Action\Special).

Anda juga dapat menggunakan anotasi, lihat https://api-platform.com/docs/core/operations#creating-custom-operations-and-controllers.

person Gottlieb Notschnabel    schedule 22.06.2017

person    schedule
comment
Terima kasih atas cuplikan kode ini, yang mungkin memberikan bantuan terbatas dan langsung. Penjelasan yang tepat akan sangat meningkatkan nilai jangka panjangnya dengan menunjukkan mengapa ini adalah solusi yang baik untuk masalah ini, dan akan membuatnya lebih berguna bagi pembaca di masa depan jika ada pertanyaan lain yang serupa. Harap edit jawaban Anda untuk menambahkan beberapa penjelasan, termasuk asumsi yang Anda buat. - person iBug; 20.02.2018
comment
sedikit penjelasan akan sangat bagus. - person Rahul Chandrabhan; 20.02.2018