5

Jose Gonzalez のアップロード プラグイン ( https://github.com/josegonzalez/upload ) を使用しています (または使用しようとしています) 。画像レコードを別のテーブルに保存したいと考えています。github の readme に従いましたが、追加/編集ビューとコントローラーでこの機能を有効にする方法が指摘されていません。これが私がこれまでにしたことです:

アプリ/モデル/Image.php:

class Image extends AppModel {

    public $actsAs = array(
      'Upload.Upload' => array(
        'image' => array(
          'thumbnailSizes' => array('thumb' => '20x20')
        ),
      ),
    );

    public $belongsTo = array(
      'Profession' => array(
        'className' => 'Profession',
        'foreignKey' => 'foreign_key'
      )
    );

}

アプリ/モデル/Profession.php:

class Profession extends AppModel {

    public $hasMany = array(
      'Image' => array(
        'className' => 'Image',
        'foreignKey' => 'foreign_key',
        'conditions' => array(
          'Image.model' => 'Profession'
        )
      )
    );

}

app/View/Professions/add.php (関連部分):

$this->Form->input('Image.image', array('type' => 'file', 'label' => ''));

アプリ/コントローラー/ProfessionsController.php:

public function add() {
  if ($this->request->is('post')) {
    if ($this->Profession->saveAll($this->request->data)) {
      $this->redirect(array('action' => 'index'));
    } else {
      $this->Session->setFlash(__('Error'));
    }
  }
}

ファイルはアップロードされておらず、imagesテーブルのレコードは次のとおりです。

id | model | foreign_key | name     | image | dir  | type      | size | active
---+-------+-------------+----------+-------+------+-----------+------+--------
 1 |       |           1 | test.png |       | NULL | image/png |  814 |      1

モデル、イメージ、およびディレクトリを空またはヌルにすることはできません。

-functiondebug($this->request->data)からのデバッグ出力は次のとおりです。add()

array(
    'Profession' => array(
        [...]
    ),
    'Image' => array(
        'image' => array(
            'name' => 'test.png',
            'type' => 'image/png',
            'tmp_name' => '/Applications/MAMP/tmp/php/phpTMHMF9',
            'error' => (int) 0,
            'size' => (int) 1473
        )
    )
)

問題は、上で述べたように、アップロードが機能せず、画像記録が不完全であることです。これが理解できることを願っています。モデルと同じテーブルに画像情報を保存したくありません。

4

2 に答える 2

2

回答が遅くなってすみませんが、私は同じ問題を抱えていて、それを理解するのにしばらく(約4時間)かかったので、将来の参考のために私の解決策を示します.

私の場合、アップロード (添付) モデル クラスは次のようになります (app\Model\Upload.php)

class Upload extends AppModel {
    public $actsAs = array(
        'Upload.Upload' => array('upload')
    );

    public $belongsTo = array(
        'Product' => array(
            'className' => 'Product',
            'foreignKey' => 'foreign_key'
        )
    );
}

私の製品は次のようになります (app\Model\Product.php)

class Product extends AppModel {
    public $hasMany = array(
        'Image' => array(
            'className' => 'Upload',
            'foreignKey' => 'foreign_key',
            'conditions' => array(
                'Image.model' => 'Product'
            )
        )
    );

    // rest of the code
}

私のデータベーススキーム:

id | model | foreign_key | name     | upload | dir  | type       | size | active
---+-------+-------------+----------+--------+------+------------+------+--------
 1 |       |           1 | test.jpg |        | NULL | image/jpeg | 5820 |      1

これで、2 つのソリューションが製品の追加ビュー (appView\Products\add.ctp) に表示されます。

echo $this->Form->create('Product', array('type' => 'file'));
echo $this->Form->input('name');
echo $this->Form->input('Image.upload.upload', array('type' => 'file'));
echo $this->Form->input('Image.upload.model', array('type' => 'hidden', 'value' => 'Product'));
echo $this->Form->end('Save Product');

非表示フィールドをフォームに追加してモデルを手動で追加する必要があり、データベース フィールドをファイル フィールドに追加する必要があります。あなたの場合、次のようになります。

this->Form->input('Image.image.image', array('type' => 'file', 'label' => ''));
于 2013-02-13T21:26:32.430 に答える
0

これを試してください:

見る

echo $this->Form>input('Attachment.1.model',array('type'=>'hidden','value'=>'Sludge'));

それは今私のために働きます。

于 2012-09-10T00:17:12.243 に答える