1

既存のWebアプリをLithiumフレームワークに移行しようとしています。

JSONでエンコードされたデータをURLにPOSTapplication/jsonし、リクエストでContent-Typeヘッダーをに設定すると、POSTされたデータは自動的に解析され、コントローラーで利用可能になります(として$this->request->data)。やったー。

ただし、Content-Typeヘッダーを適切に設定しないクライアントアプリをサポートする必要があります。この場合、フレームワークはそれがURLエンコードされたフォームデータであると想定し、そのように解析しようとします。

正しく解析されるのに間に合うように、特定のURLのリクエストのContent-Typeをオーバーライドする方法はありますか?

4

1 に答える 1

1

bootstrap.phpスクリプトで次のことを試してください。リクエストデータ配列にアイテムが1つしかなく、そのアイテムをデコードできる場合、リクエストデータはデコードされたjsonデータに置き換えられます。

use \lithium\action\Dispatcher;

Dispatcher::applyFilter('run', function($self, $params, $chain) {

    // Only check for JSON data for a certain URL
    if($params['request']->url == 'your/url/here') {

        // If the data array only has one element and the key can be decoded as
        // JSON data, replace the request data with the decoded JSON array
        if(count($params['request']->data) == 1) {
            $keys = array_keys($params['request']->data);
            $data = $keys[0];
            if(($data = json_decode($data, true)) != null) {
                $params['request']->data = $data;
            }
        }
    }

    return $chain->next($self, $params, $chain);

});
于 2011-12-22T18:40:02.223 に答える