2013-09-27 1 views
1

우리는이 같은 응답으로 zip 파일 다운로드 보내는 사용하는 경우 파일 이름을 설정하는 방법이 잘 작동

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

을,하지만 파일이 이름은 항상 export.zip입니다. 우리의 name 옵션은 아무런 효과가없는 것 같습니다. 또한 .zip 확장자없이 시도했습니다. 이는 name 옵션이 here으로 표시되기 때문에 혼란 스럽습니다.

무엇이 잘못 되었습니까?

업데이트 : "내보내기"라는 겉보기로 임의의 이름이 컨트롤러 동작의 이름에서 복사되고 있음을 알았습니다. 메소드 이름을 "admin_exportt"로 변경하고 매번 exportt.zip을 얻습니다. 이것은 내가 본 어느 곳에서도 문서화되지 않았습니다.

이름이 소스 코드 (/lib/Cake/Nework/CakeResponse.php:1254)에서 처리되는 곳을 찾았습니다. 원본 파일 이름이나 name 옵션에 지정된 이름이 사용되어야합니다 :

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

답변

1

어! 우리는 무엇이 잘못되었는지 알아 냈습니다 ...

위 코드의 첫 줄에 downlaod이라는 단어가 있음을 알 수 있습니까? 그게 범인이야. 외관상으로는 나쁜 선택권은 전체 배열을 무시하게하는 원인이되고 있었다. 나는 이것이 미래의 누군가에게 도움이 될지 확신 할 수 없지만, CakePHP 옵션이 그런 식으로 (이 컨텍스트에서 리스닝에서) 작동한다는 것을 상기시켜 줄 것이라고 생각합니다.

추신 : 당신이 붙어있을 때마다 산책을하고 돌아와!