• Blaine Schmeisser's avatar
    Pass the response by reference so it can be overwritten in filters · 81a2f5b9
    Blaine Schmeisser authored
    You can edit the response but you can't overwrite it:
    ~~~ php
    <?php
    // https://gist.github.com/3896743
    $response = new stdClass();
    
    echo '1): ' . spl_object_hash($response) . PHP_EOL; // 0000000021e89fcd00000000e93b17ba
    
    call_user_func_array(function($response) {
    	$response = new stdClass();
    	echo '2): ' . spl_object_hash($response) . PHP_EOL; // 0000000021e89fcf00000000e93b17ba
    }, array($response));
    
    echo '3): ' . spl_object_hash($response) . PHP_EOL; // 0000000021e89fcd00000000e93b17ba
    
    call_user_func_array(function($response) {
    	$response = new stdClass();
    	echo '4): ' . spl_object_hash($response) . PHP_EOL; // 0000000021e89fcf00000000e93b17ba // hash descoped and reused
    }, array(&$response));
    
    echo '5): ' . spl_object_hash($response) . PHP_EOL; // 0000000021e89fcf00000000e93b17ba
    ~~~
    
    Otherwise you'd make the new response object and overwrite the values one at a time:
    ~~~ php
    <?php
    // https://gist.github.com/3897032
    Route::filter('after', function($response)
    {
    	$params = \Laravel\Request::$route->parameters;
    	// The 'type' is the last param
    	// example: /product/(:num).(:any)
    	$type = array_pop($params);
    	if($type == 'json') {
    		$res = Response::json($response->content->data);
    		foreach($response as $key => &$value) {
    			$response->$key = $res->$key;
    		}
    	}
    });
    ~~~
    Signed-off-by: 's avatarBlaine Schmeisser <blaine.schmeisser@vitals.com>
    81a2f5b9
route.php 9.12 KB