8

私はcakephp 2.3.1を使用しています

http://book.cakephp.org/2.0/en/controllers/request-response.html#cake-response-fileごとに mp4 ファイルを強制的にダウンロードしたい

私の「ビュー」には、ファイル名を正しく検索し、ファイル名を見つけて、ダウンロードリンクを表示する次のコードがあります。

<?php $filename = APP . 'webroot/files/' . $dance['Dance']['id'] . '.mp4'; 
if (file_exists($filename)) {
    echo $this->Html->link('DOWNLOAD', array('controller' => 'dances', 'action' => 'sendFile', $dance['Dance']['id'])); 
    } else {
    echo 'Coming soon: available April 16th';
    }
?>

ユーザーがリンクをクリックすると、mp4 ファイルのダウンロードを強制したい。私のコントローラーには、機能しない次のコードがあります。

public function sendFile($id) {
    $file = $this->Attachment->getFile($id); //Note: I do not understand the 'Attachment' and the 'getFile($id)'
    $this->response->file($file['webroot/files/'], array('download' => true, 'name' => 'Dance'));
    //Return reponse object to prevent controller from trying to render a view
    return $this->response;
}   

「Attachment」と「getFile()」がわかりません

次のエラーが表示されます: エラー: 非オブジェクトでメンバー関数 getFile() を呼び出します

これをよりよく理解するために参照できる他のドキュメントはありますか?

4

2 に答える 2

23

理解できない行は、単に例の一部です。アプリケーションには というモデルがAttachmentあり、 というメソッドがあると想定していますgetFile。モデルがないAttachment(または少なくともコントローラーから見えない) ため、「オブジェクト以外のメンバー関数の呼び出し」エラーが発生します。ただし、それは重要ではありません。心配する必要があるのは、 への完全なシステム パスを提供することだけですthis->response->file()。あなたの例では、おそらくその行を次のように変更することでそれを得ることができます:

$this->response->file(WWW_ROOT.'files/'. $id .'.mp4', array('download' => true, 'name' => 'Dance'));

$this->Attachment->getFileあなたの場合は無関係なので、行を取り除くことができます。

それが役に立ったかどうか教えてください!

于 2013-03-04T21:58:55.840 に答える
1
public function downloadfile($id= null) {        
  $this->response->file(APP.'webroot\files\syllabus'.DS.$id,array('download'=> true, 'name'=>'Syllubus'));
  return $this->response;     
}

<?php echo $this->Html->link('Syllabus', 
  array('controller' => 'coursesubjects',
    'action'=>'downloadfile',
    $courseSubject['CourseSubject']['subject_syllabus']));
?>
于 2013-05-07T11:50:08.800 に答える