2014-04-15 7 views
3
여기

이다 사용하는 형태로 fileinput 함수를 yii2 myyiiapp의 \ 백엔드에있는 코드 I \ 전망 \ product_form.php는 다른 모델

<?php 

use yii\helpers\Html; 
use yii\widgets\ActiveForm; 
use kartik\widgets\FileInput; 

/** 
* @var yii\web\View $this 
* @var backend\models\Product $model 
* @var yii\widgets\ActiveForm $form 
*/ 
?> 

<div class="product-form"> 

    <?php $form = ActiveForm::begin(); ?> 

    <?= $form->field($model, 'category_id')->textInput() ?> 

    <?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> 

    <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?> 

    <?= $form->field($model, 'created')->textInput() ?> 

    <?= $form->field($model, 'last_updated')->textInput() ?> 

    <?= $form->field($model, 'documentation')->textInput(['maxlength' => 255]) ?> 

    <?= $form->field($model, 'layout')->textInput() ?> 

    <?= 
    // Usage with ActiveForm and model 
    $form->field($model, 'someAttributeName')->widget(FileInput::classname(), [ 
     'options' => ['accept' => 'image/*'], 
    ]); 

    ?> 

    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

    <?php ActiveForm::end(); ?> 

</div> 

나는 "제품"테이블 이름을 가지고 제품 이미지 경로와 제품 ID 열을 포함하는 다른 테이블 이름 "product_images"이 있습니다.

는 어떻게하면 ProductImage 모델에 이미지 someAttributeName 말씀이 양식은 제품 모델을 사용하는 경우 속성을 설정할 수 있습니다. 간단히 말해서 여기서 우리는 여러 모델을 사용할 수 있으며 이미지 경로를 저장하기 위해 제품 ID를 생성해야하기 때문에 먼저 mysql에 의해 생성 될 제품 경로를 먼저 생성해야합니다.

나는 Yii2 crud에서 모든 것을 생성했습니다.

답변

2

마지막으로 너무 많은 시행 착오 끝에 나는 내 자신의 질문에 대한 해결책을 찾았습니다.

보기 : _form.php

public function actionCreate() 
    { 
     $model = new Product; 
     $productImages = new ProductImages; 

     if($_POST){ 
      //below line will fetch all image related data and put it into $file as an object. Refer output of var_dump($file) after controller code. 
      $file = UploadedFile::getInstances($productImages, 'image_path'); 
      var_dump($file); 
     } 

     //below code is where you will do your own stuff. This is just a sample code need to do work on saving files 
     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
       'productImages' => $productImages, 
      ]); 
     } 
    } 

위해서 var_dump ($ 파일)

<?php 

use yii\helpers\Html; 
use yii\widgets\ActiveForm; 
use kartik\widgets\FileInput; 

/** 
* @var yii\web\View $this 
* @var backend\models\Product $model 
* @var yii\widgets\ActiveForm $form 
*/ 
?> 

<div class="product-form"> 

    <!--change here: This form option need to be added in order to work with multi file upload ['options' => ['enctype'=>'multipart/form-data']]--> 
    <?php $form = ActiveForm::begin(['options' => ['enctype'=>'multipart/form-data']]); ?> 

    <?= $form->field($model, 'category_id')->dropDownList($model->getCategoryList()) ?> 

    <?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> 

    <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?> 

    <?= $form->field($model, 'created')->textInput() ?> 

    <?= $form->field($model, 'last_updated')->textInput() ?> 

    <?= $form->field($model, 'documentation')->textInput(['maxlength' => 255]) ?> 

    <?= $form->field($model, 'layout')->textInput() ?> 

    <?php 

    // Usage with ActiveForm and model 
    //change here: need to add image_path attribute from another table and add square bracket after image_path[] for multiple file upload. 
    echo $form->field($productImages, 'image_path[]')->widget(FileInput::classname(), [ 
     'options' => ['multiple' => true, 'accept' => 'image/*'], 
     'pluginOptions' => [ 
      'previewFileType' => 'image', 
      //change here: below line is added just to hide upload button. Its up to you to add this code or not. 
      'showUpload' => false 
     ], 
    ]); 
    ?> 

    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

    <?php ActiveForm::end(); ?> 

</div> 

컨트롤러이 업로드 된 이미지 데이터의 출력을 보여줍니다.

array (size=3) 
    0 => 
    object(yii\web\UploadedFile)[45] 
     public 'name' => string '1.jpg' (length=5) 
     public 'tempName' => string 'D:\wamp\tmp\php8E46.tmp' (length=23) 
     public 'type' => string 'image/jpeg' (length=10) 
     public 'size' => int 77593 
     public 'error' => int 0 
    1 => 
    object(yii\web\UploadedFile)[46] 
     public 'name' => string '2.jpg' (length=5) 
     public 'tempName' => string 'D:\wamp\tmp\php8E56.tmp' (length=23) 
     public 'type' => string 'image/jpeg' (length=10) 
     public 'size' => int 74896 
     public 'error' => int 0 
    2 => 
    object(yii\web\UploadedFile)[47] 
     public 'name' => string '3.jpg' (length=5) 
     public 'tempName' => string 'D:\wamp\tmp\php8E57.tmp' (length=23) 
     public 'type' => string 'image/jpeg' (length=10) 
     public 'size' => int 72436 
     public 'error' => int 0