0

私は通常、ZF2 でルートを次のようにフォーマットします: /name/to/route

現在、API ルートで同じことを行っていますが、エンコードされた URL や配列などのデータを含めるのに苦労していることに気付きました。

このようなルートの例を次に示します。

http://example.com/api/register/access/code/c102dea422fa4bb6958d77a29d9873d2/http%3A%2F%2Frouter-local.example.com%2Fapi%2Fdirectory

以下はスラッシュを表しているため、ルートが機能しません: %3A%2F%2

ルートを次のようにエンコードする必要があると考えています。

http://example.com/api/register/access/code/?access_code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%example.com%2Fapi%2Fdirectory

これに対処するには、module.config ファイルをどのように構成しますか?

現在、apigility で次のように設定されています。

'api.rpc.register-access-code' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/api/register/access/code/:access_code/:route',
                    'defaults' => array(
                        'controller' => 'Api\\V1\\Rpc\\RegisterAccessCode\\Controller',
                        'action' => 'registerAccessCode',
                    ),
                ),
            ),

編集

次のようにして、ルートをエンコードして GET パラメータを含めました。

    $url = "http://example.com/api/register/access/code/";
    $params = [
        'access_code' => 'c102dea422fa4bb6958d77a29d9873d2',
        'route' =>  'http://example.com/api/directory'
    ];

    $final = $url . "?" . http_build_query($params);

これにより、次のようになります。

http://example.com/api/register/access/code/?access_code=c102dea422fa4bb6958d77a29d9873d2&route=http%3A%2F%2Fexample.com%2Fapi%2Fディレクトリ

ただし、これは「要求された URL をルーティングで一致させることができませんでした」という理由で機能しなくなります。エラー。

含まれる URL のスラッシュの解釈により、ルートは不明です。

おそらく問題は、URL がどのようにフォーマットされ、パラメーターとして含まれているかに関係しているのでしょうか?

4

2 に答える 2

1

セグメント ルート オプションではクエリ変数を定義しません。パスのみ。

?query=varsルート構成に関係なく、任意の URL に追加できます。ZF2 の URL ヘルパーは、クエリ変数をエンコードする必要があります。URL を作成するときに、クエリ変数の配列を作成し、それをヘルパー関数に渡すだけです。

<?php echo $this->url('api.rpc.register-access-code', array(), array('query' => array(
    'access_code' => 'c102dea422fa4bb6958d77a29d9873d2',
    'route' => 'http://router-local.example.com/api/directory',
))); ?>`
于 2015-04-24T08:44:31.243 に答える
0

この場合、問題は htaccess または apache にあるようです。最も簡単な解決策は、もう一方の端でデコードできる base64_encode($url) を使用して URL をエンコードすることです。

于 2015-04-26T12:55:24.687 に答える