WordPress.org

Make WordPress Core

Changeset 47756


Ignore:
Timestamp:
05/03/2020 10:56:01 PM (6 months ago)
Author:
TimothyBlynJacobs
Message:

REST API: Accept POST requests in the block renderer endpoint.

Rendering a block is idempotent, so a GET is the most natural request method. However, the maximum length of URLs prevented blocks with large attributes from being rendered.

Props ryankienstra.
Fixes #49680.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php

    r47391 r47756  
    5353                    ),
    5454                    array(
    55                         'methods'             => WP_REST_Server::READABLE,
     55                        'methods'             => array( WP_REST_Server::READABLE, WP_REST_Server::CREATABLE ),
    5656                        'callback'            => array( $this, 'get_item' ),
    5757                        'permission_callback' => array( $this, 'get_item_permissions_check' ),
  • trunk/tests/phpunit/tests/rest-api/rest-block-renderer-controller.php

    r47360 r47756  
    457457
    458458    /**
     459     * Test a POST request, with the attributes in the body.
     460     *
     461     * @ticket 49680
     462     */
     463    public function test_get_item_post_request() {
     464        wp_set_current_user( self::$user_id );
     465        $string_attribute = 'Lorem ipsum dolor';
     466        $attributes       = array( 'some_string' => $string_attribute );
     467        $request          = new WP_REST_Request( 'POST', self::$rest_api_route . self::$block_name );
     468        $request->set_param( 'context', 'edit' );
     469        $request->set_header( 'content-type', 'application/json' );
     470        $request->set_body( wp_json_encode( compact( 'attributes' ) ) );
     471        $response = rest_get_server()->dispatch( $request );
     472
     473        $this->assertEquals( 200, $response->get_status() );
     474        $this->assertContains( $string_attribute, $response->get_data()['rendered'] );
     475    }
     476
     477    /**
    459478     * Test getting item with invalid post ID.
    460479     *
     
    504523        $data     = $response->get_data();
    505524
    506         $this->assertEqualSets( array( 'GET' ), $data['endpoints'][0]['methods'] );
     525        $this->assertEqualSets( array( 'GET', 'POST' ), $data['endpoints'][0]['methods'] );
    507526        $this->assertEqualSets(
    508527            array( 'name', 'context', 'attributes', 'post_id' ),
Note: See TracChangeset for help on using the changeset viewer.