1

私はyiiフレームワークでmongodbスイートを使用しています.CUploadedFileをパブリックプロパティの画像クラスモデルに割り当てると、エラーが発生します:

MongoException

zero-length keys are not allowed, did you use $ with double quotes?

/var/www/html/bablog/protected/extensions/YiiMongoDbSuite/EMongoDocument.php(611)

エラー画像

モデル クラス :

...
public function rules() {

        return array(
           ...
            array('image', 'file',
              'types'=>'jpg,jpeg, png' ,
              'mimeTypes' => 'image/jpeg , image/pjpeg,image/png' ,
              'safe'=>true,
              'maxFiles' => 1 ,
              'maxSize' => 1024 ,
              'minSize' => 100 ,
              ),
        );
}

コードを追加:

echo '<pre>';
print_r(CUploadedFile::getInstance($model,'image'));
die();

出力:

CUploadedFile Object
(
    [_name:CUploadedFile:private] => download.jpg
    [_tempName:CUploadedFile:private] => /tmp/phpC8GRRt
    [_type:CUploadedFile:private] => image/jpeg
    [_size:CUploadedFile:private] => 530
    [_error:CUploadedFile:private] => 0
    [_e:CComponent:private] => 
    [_m:CComponent:private] => 
)

試す :

1- model で画像の動的プロパティを宣言しますが、親で __set 関数を定義すると、同じエラーが発生します。

2- 保護されたプロパティを定義しますが、 CUploadedFile::getInstance($model,'image') 要件 public property , 結果として、エラー :( :D を取得します。

質問 :

1-上記の問題について、どうすればよいですか?

2-クラスで属性パブリックプロパティを取得する代わりに、mongodbsuiteで独自の属性を定義する方法はありますか?

下手な英語でごめんなさい

すべてのtnx

4

1 に答える 1

0

最後に、私は複数のアップロードファイルです:

ファイルを閲覧する :

.....
    <div class="row">
            <?php echo $form->labelEx($model, 'image[0]'); ?>
            <?php echo $form->fileField($model, 'image[0]'); ?>
            <?php echo $form->error($model, 'image[0]'); ?>
        </div>

                        <div class="row">
            <?php echo $form->labelEx($model, 'image[1]'); ?>
            <?php echo $form->fileField($model, 'image[1]'); ?>
            <?php echo $form->error($model, 'image[1]'); ?>
        </div>
.....

コントローラーファイル:

<?php

    public function actionCreate() {
        $model = new Post;
        $images = array();
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);

        if (isset($_POST['Post'])) {
            $countImage = count($_POST['Post']['image']);
            $model->attributes = $_POST['Post'];
            $model->status = $_POST['Status'];

            $j = 0;
            for ($i = 0; $i < $countImage; $i++) {

                $imageTemp = new Post;
                $imageTemp->image = CUploadedFile::getInstance($imageTemp, "image[$i]");

                if (!empty($imageTemp->image)) {
                    $images[$j] = $imageTemp;
                    $j++;
                }
                unset($imageTemp);
            }

            if ($model->save()) {

                foreach ($images as $i => $image) {

                    $namePic[$i] = Yii::app()->params['pathImages'] . Yii::app()->params['domainName'] . '-' . (string) $model->_id . '-' . time() . '-' . rand(1, 1000) . '.' . $image->image->getExtensionName();
                    $image->image->saveAs($namePic[$i]);
                }

                $model->image = $namePic;
                $model->update(array('image'), true);
                unset($images);

//$this->redirect(array('view', 'id' => $model->_id));
            }
        }

        $this->render('create', array(
            'model' => $model,
        ));
    }

モデル :

public function rules() {

        return array(....
            array('image', 'file',
              'types'=>'jpg, png' ,
              'mimeTypes' => 'image/gif, image/jpeg' ,
              'safe'=>true,
              'maxFiles' => 3 ,
              'maxSize' => 10240000 ,
              ),
....
        );
    }

仕上げ:D

良くなってきていることを願っています

于 2013-10-08T18:16:34.290 に答える