1

私は初めてcakephpで働いています。画像変数を持つProductモデルを使い始めることができました。画像をアップロードすることはできますが、その後製品に保存することができません。これは私のadd.ctpです

<div class="products form">
<?php echo $this->Form->create('Product', array('enctype' => 'multipart/form-data')); ?>
    <fieldset>
        <legend><?php echo __('Add Product'); ?></legend>
    <?php
        echo $this->Form->input('name');
        echo $this->Form->input('slug');
        echo $this->Form->input('description');
        echo $this->Form->input('price');
        echo $this->Form->input('weight');

            //upload image    
            echo $this->Form->input('Product.image', array('type'=>'file', 'tmp_name'=>'temp'));



    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
<div class="actions">
    <h3><?php echo __('Actions'); ?></h3>
    <ul>

        <li><?php echo $this->Html->link(__('List Products'), array('action' => 'index')); ?></li>
    </ul>
</div>

そしてこれが私のProductsControlleradd()関数です

 public function add($seller_id = null) {
        if ($this->request->is('post')) {
            $this->Product->create();
            debug($this->request->data);
                            if(isset($this->request->data["Product"]["image"]["name"]))
                            {
                                $file = new File($this->request->data["Product"]["image"]["name"]);
                                debug($this->request->data);
                                $ext = pathinfo(($this->request->data["Product"]["image"]["name"]), PATHINFO_EXTENSION);

                                if ($ext != 'jpg' && $ext != 'jpeg' && $ext != 'gif' && $ext != 'png') 
                                {
                                    $this->Session->setFlash('You may only upload image files.');
                                }else
                                {
                                    if(move_uploaded_file($this->request->data["Product"]["image"]["tmp_name"],WWW_ROOT."/img/uploads/" . $this->data["Product"]["image"]["name"]) == true)
                                    {
                                        $this->data["Product"]["image"] =  $this->data["Image"]["image"]["name"];
                                    }
                                }
                                if ($this->Product->save($this->request->data)) //error here
                                {
                                    $this->Session->setFlash(__('The product has been saved'));
                                    $this->redirect(array('action' => 'index'));
                                    $this->request->data['Product']['seller_id'] = $seller_id;
                                }
                                else {
                                    $this->Session->setFlash(__('The product could not be saved. Please, try again.'));
            }

                        }$this->Session->setFlash(__('The image could not be saved. Please, try again.'));
        }

    }

画像をアップロードして移動するのに製品を保存しない理由を誰かが理解できますか?また、これがdebug($ this-> request-> data);から生成されるものです。

array(
    'Product' => array(
        'name' => '8',
        'slug' => '8',
        'description' => '8',
        'price' => '8',
        'weight' => '8',
        'image' => array(
            'name' => 'celeb16.com-purple-strapless-short-bridesmaid-dress-g129-33(1).jpg',
            'type' => 'image/jpeg',
            'tmp_name' => 'C:\xampp\tmp\phpDD08.tmp',
            'error' => (int) 0,
            'size' => (int) 1404
        )
    )
)

役立つかもしれないもう1つの情報は、このコードを使用するときに次のことです。

<?php echo $this->Form->create('Product', array('enctype' => 'multipart/form-data')); ?>

画像を正しくアップロードすることはできますが、製品を保存することはできません。このコードを使用すると、次のようになります。

 <?php echo $this->Form->create('Product'); ?>

製品は保存されますが、画像はアップロードされません

4

2 に答える 2

1

画像の移動を行う前にデータを保存する必要があります。これを試してください。

 if ($this->Product->save($this->request->data)) //error here
                            {
                                $this->Session->setFlash(__('The product has been saved'));
                                $this->redirect(array('action' => 'index'));
                                $this->request->data['Product']['seller_id'] = $seller_id;
                            }
  if(move_uploaded_file($this->request->data["Product"]["image"]["tmp_name"],WWW_ROOT."/img/uploads/" . $this->data["Product"]["image"]["name"]) == true)
                                {
                                    $this->data["Product"]["image"] =  $this->data["Image"]["image"]["name"];
                                }
                            }

それがあなたのために働くことを願っています

これまでにファイルのアップロードを実現した例を示します。これをガイドラインとして使用してみてください。シンプルに保つことをお勧めします。ファイルの種類を制限したい場合は、モデルでこれを行うことをお勧めします。

public function add() {

 if($this->request->is('post')){

 $file = $this->request->data['Upload']['file'];
 if($this->Upload->save($this->data) && move_uploaded_file($file['tmp_name'],APP.'webroot/files/uploads'.DS.$this->Upload->id.'.mp4')) 
 {
 $this->Session->setFlash('<p class="uploadflash">The upload has been saved</p>', true);
 $this->redirect(array('controller'=>'Uploads', 'action' => 'watch', $this->Upload->id));
 }  else {
 $this->Session->setFlash('<p class="loginerror">The upload could not be saved, mp4 files can be saved only.</p>', true);   
 }
 }
 }
于 2012-08-08T20:28:26.593 に答える
0

この行を変更してみてください:

$this->data["Product"]["image"] =  $this->data["Image"]["image"]["name"];

これに:

$this->request->data["Product"]["image"] =  $this->request->data["Image"]["image"]["name"];

元のコードでは操作しようとして$this->dataおり、保存呼び出しでは参照しています$this->request->data

$this->Product->save($this->request->data)

うまくいけば、それで問題が解決するはずですが、エラー自体がなければわかりません:)

于 2012-08-08T21:57:25.263 に答える