1

Q1 : フォームの送信がうまくいきません。

Q2 : アップロード ファイルを制限する方法 (例: 1 ~ 5 ファイルのみ)

status : ajax アップロードxuploadでフォームを作成します

私のモデル (fadepreciation.php)

public function afterSave( ) {
        $this->addImages( );
        parent::afterSave( );
    }

    public function addImages( ) {
        //If we have pending images
        if( Yii::app( )->user->hasState( 'images' ) ) {
            $userImages = Yii::app( )->user->getState( 'images' );
            //Resolve the final path for our images
            $path = Yii::app( )->getBasePath( )."/../images/uploads/{$this->id}/";
            //Create the folder and give permissions if it doesnt exists
            if( !is_dir( $path ) ) {
                mkdir( $path );
                chmod( $path, 0777 );
            }

            //Now lets create the corresponding models and move the files
            foreach( $userImages as $image ) {
                if( is_file( $image["path"] ) ) {
                    if( rename( $image["path"], $path.$image["filename"] ) ) {
                        chmod( $path.$image["filename"], 0777 );
                        $img = new Image( );
                        $img->size = $image["size"];
                        $img->mime = $image["mime"];
                        $img->name = $image["name"];
                        $img->source = "/images/uploads/{$this->id}/".$image["filename"];
                        $img->somemodel_id = $this->id;
                        if( !$img->save( ) ) {
                            //Its always good to log something
                            Yii::log( "Could not save Image:\n".CVarDumper::dumpAsString( 
                                $img->getErrors( ) ), CLogger::LEVEL_ERROR );
                            //this exception will rollback the transaction
                            throw new Exception( 'Could not save Image');
                        }
                    }
                } else {
                    //You can also throw an execption here to rollback the transaction
                    Yii::log( $image["path"]." is not a file", CLogger::LEVEL_WARNING );
                }
            }
            //Clear the user's session
            Yii::app( )->user->setState( 'images', null );
        }
    }

私の見解 (_form.php)

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'fa-depreciation-form',
    'enableAjaxValidation'=>false,
    'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>
<!-- Other Fields... -->
        <div class="row">
            <?php echo $form->labelEx($model,'photos'); ?>
            <?php
            $this->widget( 'xupload.XUpload', array(
                'url' => Yii::app( )->createUrl( "/fadepreciation/upload"),
                //our XUploadForm
                'model' => $photos,
                //We set this for the widget to be able to target our own form
                'htmlOptions' => array('id'=>'fa-depreciation-form'),
                'attribute' => 'file',
                'multiple' => true,
                //Note that we are using a custom view for our widget
                //Thats becase the default widget includes the 'form' 
                //which we don't want here
                //'formView' => 'application.views.faDepreciation._form',
                )    
            );
            ?>
        </div>
    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

<?php $this->endWidget(); ?>

</div><!-- form -->

私のコントローラー (fadepreciation.php)

public function actionCreate()
    {
        $model=new FaDepreciation;
        Yii::import( "xupload.models.XUploadForm" );
        $photos = new XUploadForm;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['FaDepreciation']))
        {
            //Assign our safe attributes
            $model->attributes=$_POST['FaDepreciation'];
            //Start a transaction in case something goes wrong
            $transaction = Yii::app( )->db->beginTransaction( );
            try {
                //Save the model to the database
                if($model->save()){
                    $transaction->commit();
                    $this->redirect(array('view','id'=>$model->id));
                }
            } catch(Exception $e) {
                $transaction->rollback( );
                Yii::app( )->handleException( $e );
            }
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

        Yii::import( "xupload.models.XUploadForm" );
        $photos = new XUploadForm;
        $this->render('create',array(
            'model'=>$model,
            'photos'=>$photos,
        ));

    }
public function actionUpload( ) // From xupload nothing change
4

5 に答える 5

1

あなたがする必要があるのは、カスタムフォームを作成することです. xupload _form からコンテンツをコピーし、開始フォームと終了フォームを削除して貼り付けます。カスタム フォームの参照をウィジェット「formView」に追加します。

于 2012-08-27T15:05:37.190 に答える
0

提出フォームに関する問題は何ですか?

はい、ファイル制限を行うことができます。http://www.yiiframework.com/wiki/348/xupload-workflow/に従っていることを確認してください。

于 2012-08-02T08:51:33.980 に答える
0

次のように「showForm」パラメーターを使用するだけです。

<?php
$this->widget( 'xupload.XUpload', array(
  ...
  'showForm' => false,
  ...
));
?>

おそらく、このオプションは xupload の次のバージョンで追加されるでしょう。

于 2013-05-27T17:59:40.717 に答える
0

これが古い投稿であることは知っていますが、この回答が誰かがこの問題を解決するのに役立つかもしれません。

ファイル /xupload/views/form.php (デフォルト設定) の最後の行が原因であることがわかりました。if ステートメントはどういうわけか逆に機能しているように見えます...マイニングでは、false 値の場合はコードをレンダリングしています。例えば:

<?php 
echo $this->showForm; 
if($this->showForm) echo CHtml::endForm(); 
echo $this->showForm; 
?>

戻り値: 重量出力

何かが足りないのかもしれませんが、奇妙に見えます... そうではありませんか?

于 2014-04-14T20:25:31.427 に答える
0

Q1: XUpload ウィジェットが独自のフォーム タグを生成するため、フォームの送信が機能しません。生成された HTML には別のフォームにフォームが埋め込まれているため、 xupload ワークフロー wikiformViewで説明されているように、ウィジェットのオプションを使用して、フォーム タグのないビューを指定する必要があります。

Q2:maxNumberOfFilesウィジェット構成でオプションを使用する必要があります

すべては次のようになります。

 <?php
            $this->widget( 'xupload.XUpload', array(
                'url' => Yii::app( )->createUrl( "/fadepreciation/upload"),
                //our XUploadForm
                'model' => $photos,
                //We set this for the widget to be able to target our own form
                'htmlOptions' => array('id'=>'fa-depreciation-form'),
                'attribute' => 'file',
                'multiple' => true,
                //Note that we are using a custom view for our widget
                //Thats becase the default widget includes the 'form' 
                //which we don't want here
                'formView' => 'application.views.faDepreciation._form',
                'options' => array('maxNumberOfFiles' => 5)
                )    
            );
            ?>
于 2012-09-27T14:31:35.797 に答える