1

$ actAs ='Uploader.Attachment'を介した動作として、CakePHP2.1でプラグインを使用したいと思います。これは静的アップロードでは正常に機能しますが、ajaxUploadsでの使用方法がわかりません。

簡単な質問:actAs-Behaviourを介してajax-Uploadを実行する方法はありますか?

説明(必要な場合):添付ファイルの動作には、デフォルトやajaxに関するその他のコード(特に次のコードのajaxFieldではない)がないようです。プラグインを経由して含めると機能しますが

public function beforeFilter() {
    $this->Uploader = new Uploader(array(
        'ajaxField' => 'qqfile'
    ));
}

だから私は次のようなものを使うことができます:

$data = $this->Uploader->upload($this->Uploader->ajaxField, array('overwrite' => true));

しかし、そうではありません:

$this->request->data;

これは、私が求めていたものではありません。1。他のアクションにはactAs-Behaviourが必要です。2.プラグインに2つの異なるインクルードがあり、それらが同じように動作することを確認する必要があります。3.サムを自動的に作成して、モデルの同じエントリにアタッチすることはできません。

4

2 に答える 2

2

関連するいくつかの質問にすでに回答しました - プラグインの構成設定を確認したくありません (特定の質問については開発者自身に連絡してください)。静的ファイルの送信用。

  1. $actAs は動作パラメータを示します。それらはモデルクラスで定義されており、定義上、ビューと直接通信することは決してありません。必要に応じて、モデルをactAsにすることもできますが、モデルを使用してビューの動作を操作することはできません。

  2. これはAJAX 駆動のファイル アップロードですよね?そのため、コントローラー アクションの関連付けられたビューに存在するフォームに対応する単純なクライアント側スクリプトを記述して、フォーム データを Cake コントローラー メソッドに非同期で送信する必要があるでしょう。-- 参照: http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

  3. プラグインを追加すると、プラグインがモデルを処理できるようになりますよね? プラグインを 2 回呼び出す必要がありますか? または、2 つのコントローラー アクション、2 つのコントローラー、2 つのモデル、または両方がプラグインを使用するものですか?

  4. ビューはコントローラー アクションにデータを返します。これはおそらく、処理のためにモデルに送信する場所です。beforeFilter()コントローラーのコールバック メソッドの 1 つです。具体的には、コントローラー内のすべてのメソッドの直前に起動するもの ( http://book.cakephp.org/2.0/en/controllers.htmlおよびhttp://book.cakephp.org/2.0/en/も参照)非同期リクエストを処理するようにコントローラーを設定するための views/json-and-xml-views.html ...)

  5. サムネイルの生成は、フロントエンドまたはバックエンドで課税されることになっていますか? >_> 後者の場合、データからサムネイルを生成するコードをモデルに追加する必要がありますか? Cake の魔法のモデルのコールバックもそれをかなり簡単にするはずです: http://book.cakephp.org/2.0/en/models/callback-methods.html

この方法で試してみると、少なくとも物事が単純化されるはずです。

HTH

于 2012-08-15T02:13:53.197 に答える
0

これは、私の特定のケースに対して私が今やったことです。多分それは誰かを助けるでしょう。美しくはありませんが、機能します:

public function beforeFilter() {
    $this->Uploader = new Uploader(array(
        'ajaxField' => 'qqfile'
    ));
}

public function ajax() {        
    $this->set('title_for_layout', 'Upload: AJAX File Upload');
    $this->render('ajax');
}

public function ajax_upload($album_id = null, $album_title = null) {
    $this->set('album_id', $album_id);
    $this->set('album_title', $album_title);
    $album_id = 2;
    $upload_dir = "uploads/$album_id/";

    $this->autoLayout = $this->autoRender = false;
    $this->Uploader->setup(array('uploadDir' => "$upload_dir"));
    $data = $this->Uploader->upload($this->Uploader->ajaxField, array(
        'overwrite' => true,
        'name' => 'uploaderFilename'
    ));
    //Creating a thumb
    $thumb_name = $data['custom_name']."_thumb.".$data['ext'];
    $this->Uploader->resize(array('width' => 250, 'expand' => true, 'aspect' => true, 'append' => '_thumb'));
    if (!empty($data)) {
        $this->Picture->set($data);   
        if ($this->Picture->validates()) {
            // Upload successful
            $data["album_id"]= $album_id;
            $data['path_thumb'] = $upload_dir.$thumb_name;
            $this->Picture->save($data);
            header('Content-Type: application/json');
            echo json_encode(array('success' => true, 'data' => $data));                                
        }
    }
}
于 2012-08-15T11:32:44.970 に答える