Endpoint personalizat Wordpress Rest API cu parametru opțional

26 ian. 2017, 15:52:26
Vizualizări: 25.4K
Voturi: 24

Este posibil să folosești register_rest_route() cu parametri opționali în url?

Să zicem că ruta este înregistrată în acest fel:

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

În prezent este posibil să efectuezi un apel API pe un URL de tipul /wp-json/api/animals/15, dar există o modalitate de a declara parametrul ca fiind opțional pentru a gestiona și rute de tipul /wp-json/api/animals/?

Am încercat să declar ruta și în modul următor, dar fără succes:

/animals/(?P<id>\d+)?

Poți declara o altă rută fără parametru sau utiliza parametri GET, dar există o modalitate de a face acest lucru direct în register_rest_route()?

Mulțumesc pentru sugestii.

0
Toate răspunsurile la întrebare 2
0
37

Ar trebui să plasați parametrii numiți ai regex-ului rutei într-un grup de captură opțional:

register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Al doilea parametru este pur și simplu un regex, astfel puteți folosi logica normală a regex pentru a-l face mai complex

20 mar. 2018 23:26:30
0

Poate exista o modalitate de a face acest lucru cu un singur apel al funcției register_rest_route, nu știu cum să fac asta și ar fi ideal. Cu toate acestea, duplicarea apelului funcției register_rest_route în metoda conectată va face ceea ce doriți.

register_rest_route( 'api', '/animals/', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals'
] );

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

În metoda get_animals, veți dori să aveți condiții care să gestioneze fiecare caz. Una pentru cazul în care argumentul id este setat, iar verificarea implicită pentru variabilele $_GET.

25 iun. 2017 22:59:17