2

次のような応答として、zip ファイルのダウンロードを送信しています。

    $this->response->file( "/export/stuff.zip", array('downlaod'=>true, 'name'=>"stuff.zip") );
    return $this->response;

これは問題なく動作しますが、ファイルの名前は常にexport.zip. 私たちのnameオプションは何の効果もないようです。また、.zip 拡張子なしで試しました。nameオプションはドキュメントのhereに示されているため、これは紛らわしいです。

私たちは何を間違っていますか?

更新: 一見恣意的な名前 "export" が、コントローラー アクションの名前からコピーされていることがわかりました。メソッド名を「admin_exportt」に変更すると、毎回 exportt.zip が取得されます。これは、私が見たどこにも文書化されていません。

ソース コード (/lib/Cake/Nework/CakeResponse.php:1254) で名前が処理されている場所を見つけましたが、元のファイル名を使用するか、nameオプションで指定されたものを使用する必要があるようです。

        if (is_null($options['name'])) {
            $name = $file->name;
        } else {
            $name = $options['name'];
        }
4

1 に答える 1

3

うーん!私たちは何が間違っていたのかを突き止めました...

downlaod上記のコードの最初の行にある単語に注目してください。それが犯人です。どうやら、その悪いオプションが原因で配列全体が無視されていたようです。これが将来誰かに役立つかどうかはわかりませんが、CakePHP オプションがそのように機能することを思い出させるために残しておくと思います (少なくともこのコンテキストでは)。

PS: 行き詰まったら、散歩に行って戻ってきてください!

于 2013-09-27T18:41:09.983 に答える