web-dev-qa-db-fra.com

Point de terminaison personnalisé API Rest avec espace

J'essaie d'ajouter un point de terminaison avec les éléments suivants:

register_rest_route('namespace/v1','custom-search/(?P<search>[a-zA-Z\s]+)',
        array(
            'methods' => 'GET',
            'callback' => 'gm_custom_search_callback'
        )
    );

Il enregistre la route, mais ne reconnaît pas lorsque j'ajoute un caractère d'espacement, c'est-à-dire% 20, ou ne passe pas une chaîne avec un "", je ne vois nulle part qui suggère comment cela devrait être réalisé. Quelque chose me manque-t-il?

2
timothystringer

Vous pouvez faire ceci comme ceci:

function get_custom_search_callback($request) {
    //$parameters = $request->get_params();
    $response = urldecode($request->get_param('search'));

    return rest_ensure_response($response);
}

add_action('rest_api_init', 'add_custom_users_api');
function add_custom_users_api(){
    register_rest_route('namespace/v1',
                        'custom-search/(?P<search>([a-zA-Z]|%20)+)',
                        array(
                            'methods' => 'GET',
                            'callback' => 'get_custom_search_callback'
                        )
                    );
}

Notez deux choses:

  • vous devez ajouter %20 au jeu de caractères correspondant
  • vous devez urldecode() la valeur de la variable search pour vous débarrasser du %20 et éventuellement d'autres caractères codés en url (si vous le mettez dans la regex)
1
Picard