Comment accéder au corps d'une demande d'API WP dans un itinéraire personnalisé?

11

J'ai créé un itinéraire personnalisé dans WP API (v2 beta 4) pour définir une option de site. J'utilise AngularJS pour effectuer l'appel API, et pour une raison quelconque, je ne suis pas en mesure d'accéder aux données envoyées dans la demande. Voici ce que j'ai jusqu'à présent:

gvl.service('gvlOptionService', ['$http', function($http) {

    this.updateOption = function(option, value) {

        return $http({
          method  : 'POST',
          url     : wpAPIdata.gvlapi_base + 'options',
          data    : { "option" : option,
                      "value" : value
                    },
          headers : { 'Content-Type': 'application/x-www-form-urlencoded',
                      'X-WP-Nonce' : wpAPIdata.api_nonce
                    }  
         })

    }

}]);

Cela envoie avec succès la demande et les données publiées ressemblent à ceci:

{"option":"siteColor","value":"ff0000"}

La demande parvient avec succès à mon itinéraire personnalisé et au rappel que j'ai spécifié. Voici cette fonction de rappel au sein de la classe:

public function update_option( WP_REST_Request $request ) {

    if(isset($request['option']) && $request['option'] == 'siteColor') {
        $request_prepared = $this->prepare_item_for_database($request);
        $color_updated = update_option('site_color', $request_prepared['value'], false);

        if($color_updated) {
            $response = $this->prepare_item_for_response('site_color');
            $response->set_status( 201 );
            $response->header('Location', rest_url('/gvl/v1/options'));
            return $response;
        } else {
            // ...
        }


    } else {
        return new WP_Error( 'cant_update_option', __( 'Cannot update option.' ), array( 'status' => 400 ) );
    }

}

Le problème est que cela échoue toujours et renvoie la WP_Error car $ request ['option'] est null.

Lorsque je var_dump ($ request), je vois la chaîne JSON dans la partie ['body'] de l'objet, mais cela ne me permet pas d'y accéder lors de l'appel de cette partie du tableau. J'ai également essayé d'utiliser les méthodes de récupération des paramètres notées dans la documentation ( http://v2.wp-api.org/extending/adding/ ), mais aucune ne semble renvoyer les données non plus. Suis-je en train de manquer quelque chose de vraiment basique ici?

Ryan Hale
la source
une chance avec ça?
jgraup

Réponses:

6

Dans une réponse précédente, a pu accéder aux données dans un point de terminaison personnalisé à l' aide

$parameters = $request->get_query_params(); 

Vérifiez les paramètres de requête pour option

$parameters['option']

<?php
function my_awesome_func( WP_REST_Request $request ) {
    // You can access parameters via direct array access on the object:
    $param = $request['some_param'];

    // Or via the helper method:
    $param = $request->get_param( 'some_param' );

    // You can get the combined, merged set of parameters:
    $parameters = $request->get_params();

    // The individual sets of parameters are also available, if needed:
    $parameters = $request->get_url_params();
    $parameters = $request->get_query_params();
    $parameters = $request->get_body_params();
    $parameters = $request->get_default_params();

    // Uploads aren't merged in, but can be accessed separately:
    $parameters = $request->get_file_params();
}
jgraup
la source
5

Vous pouvez utiliser $request->get_body()

Gerardlamo
la source
5

Vous pouvez utiliser $request->get_json_params()qui renverra un tableau de valeurs key =>.

Avec ces conditions (éventuellement quelques autres):

  1. Le client qui envoie la demande a Content-Type: application/jsondans l'en-tête
  2. Il y a un corps brut comme {"option":"siteColor","value":"ff0000"}.

https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/

mkly
la source
Ceci est exactement ce que je cherchais. Merci!
Jason Ellis