1

多くの添付ファイルがあるモデル(質問)でsaveAssociatedメソッドを使用しようとしています。

class Attachment extends AppModel {
    public $belongsTo = array(
        'Question' => array(
            'className' => 'Question',
            'foreignKey' => 'question_id',
        ),
    );

class Question extends AppModel {
public $hasMany = array(
    'Attachment' => array(
        'className' => 'Attachment',
        'foreignKey' => 'foreign_key',
        'dependent' => false,
        'conditions' => array('Attachment.model' => 'Question'),
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
        )
    );

モデルAttachments$actsAs AttachmentBehavior(Cake-uploader Pluginから)

class Attachment extends AppModel {
...
    public $actsAs = array(
        'Uploader.FileValidation' => array(
            'file' => array(
                'extension' => array(
                    'value' => array('gif', 'jpg', 'jpeg'),
                    'error' => 'Only gif, jpg and jpeg images are allowed!'
                ),
                'required' => true
            ),
            'import' => array('required' => true),
            'file' => array('required' => true),
        ),
        'Uploader.Attachment' => array(
            'file' => array(
                'name' => 'uploaderFilename',
                'baseDir' => '/******',
                'uploadDir' => '/****/',
                'dbColumn' => 'real_name',
                'maxNameLength' => 30,
                'overwrite' => true,
                'stopSave' => false,
                'transforms' => ''
            )
        )
    );

添付ファイル付きの質問を追加しようとすると、情報はデータベースに保存されますが、ファイルは予期されたフォルダーにアップロードされません。

    public function add() {
        if (!empty($this->request->data) && $this->request->is('post')) {

            App::import('Vendor', 'Uploader.Uploader');

            $this->Mensagen->create();
            $this->request->data['Anexo'][0]['model'] = $this->modelClass;

            debug($this->request->data);

            if ($this->Mensagen->saveAll($this->request->data)) {
                $this->Session->setFlash(__('Success'));
            } else {
                $this->Session->setFlash(__('Try again.'));
            }
    }

私は:

  1. saveAssociatedで試してみましたが、結果は同じです。
  2. 添付ファイルモデルの動作テスト(プラグインに付属)を使用してファイルを正常にアップロードしました。
  3. 質問に属する別のモデルであるメモが正常に保存されました

saveAssociatedとsaveAllは、プラグインによって実装された動作を考慮に入れる必要がありますか?

これに関連する他の問題は、テーブルの添付ファイルに2つのレジストリが挿入されていることです。1つはフィールド名が入力され、もう1つはフィールドモデルが入力されています。

この最後の問題は、動作が考慮されていないために発生しています。動作テストを使用すると、1つのレジストリのみが保存されます。

array(
    'Question' => array(
        'state_id' => '1',
        'from_id' => '2',
        'grup_id' => '1',
        'action' => 'add',
        'question' => 'test file 2'
    ),
    'Attachment' => array(
        'file' => array(
            'name' => 'foto0001.jpg',
            'type' => 'image/jpeg',
            'tmp_name' => '/tmp/phpPuVx3P',
            'error' => (int) 0,
            'size' => (int) 140773
        ),
        'model' => 'Question'
    )
)
4

1 に答える 1

1

以下を確認しましたか?

  1. 予想される場所にbasedirとattachmentディレクトリが存在することを確認しますか?
  2. ディレクトリの権限をチェックして、アプリにそこに書き込む権限があることを確認しますか?

それらは両方とも過去に私との「落とし穴」でした。

于 2013-01-16T17:29:01.777 に答える