2012-12-25 2 views
1

처음에는 Yii Framework가 처음입니다. 나는 내 자신에 대한 연구를했지만 내 문제에 대한 정확한 해결책을 찾지 못했습니다.여러 모델 및 파일 업로드

두 개의 관련 모델 - 제품 및 이미지가 있다고 가정합니다. 단일 제품에 여러 개의 이미지가 할당되어있을 수 있습니다. 이러한 종류의 구성표를 관리 할 수있는 작성/업데이트 양식을 작성할 때 가장 좋은 방법은 무엇입니까?

이미지 모델은 이미지 파일의 경로와 함께 다양한 필드로 구성되어 있으므로 경로 자체의 "컨테이너"가 아닙니다. 더 많은 것은 인 무엇 - 나는 업로드 된 심상 및 그것의 경로가 동일한 모형 내의 저장되는 엄지 손톱을 생성 할 필요가있다.

장고에서 알려진 관리 인라인 기능과 거의 비슷합니다. 사용자가 이미지를 추가/수정/삭제할 수있는 제품 작성/업데이트 양식의 섹션이 있어야합니다.

multimodelform 확장을 시도했지만 작동하도록 파일 업로드를 가져올 수 없습니다. 파일 업로드를 가능하게하는 다중 모델 형식의 구조를 수동으로 구축 할 필요가없는 가장 좋은 방법은 무엇입니까?

+0

이 확장. http://www.yiiframework.com/extension/eajaxupload/ 미리보기 이미지를 만들려면 ... http://www.yiiframework.com/extension/simpleimage/ –

답변

0

자세한 솔루션은 CActiveForm 또는 CHtml 양식을 사용하는지 여부에 따라 달라집니다. 2 개의 관련 모델을 가지고 있으므로 CActiveForm을 사용하고 있다고 가정하고 계속 염두에 두어야 할 몇 가지 사항을 지적 할 것입니다. 이 예를 들어

나는 나는 거 몇 가지 정의를 필드 ID로 제품 이름 필드 ID, productId에, 경로

나는 또한이 가정에 ProductImage ProductImage에 '이미지'에 많은 관계로 하나 제품을 가정 거 1 업로드/편집 할 수 있지만, 다중 여기

뷰의 삭제 :

$form = $this->beginWidget(
    'CActiveForm', 
    array(
     'id' => 'upload-form', 
     'enableAjaxValidation' => false, 
     'htmlOptions' => array('enctype' => 'multipart/form-data'), 
    ) 
); 

echo $form->labelEx($product, 'name'); 
echo $form->fileField($product, 'name'); 
echo $form->error($product, 'name'); 

echo $form->checkBoxList($product, 'path', $product->images); 


echo $form->labelEx($productImage, 'path'); 
echo $form->fileField($productImage, 'path'); 
echo $form->error($productImage, 'path'); 


$this->endWidget(); 

그리고 당신의 행동

public function actionUpdate($productId) { 

    $product = Product::model()->findByPk($productId)->with('images'); 
    $productImage = new ProductImage(); 

    if(isset($_POST['Item'])) 
    { 
     $product->attributes=$_POST['Product']; 

     foreach($product->images as $im) { 
      if(in_array($im->path, $_POST['Item']['Image'])) 
       $im->delete(); 
     } 
     $productImage->image=CUploadedFile::getInstance($productImage,'path'); 
     if($productImage->save()) 
     { 
      $productImage->image->saveAs('some/new/path'); 
      // redirect to success page 
     } 
    } 
    $this->render('update', array(
      'product'=>$product, 
      'productImage'=>$productImage, 
     )); 
} 

이제이 솔루션은 버그가 없으므로 테스트되지는 않지만 자신의 폼을 작성하는 방법에 대한 아이디어를 제공해야합니다.

자료 : 여러 이미지 업로드 사용하기 위해 http://www.yiiframework.com/wiki/2/how-to-upload-a-file-using-a-model/

http://www.yiiframework.com/wiki/384/creating-and-updating-model-and-its-related-models-in-one-form-inc-image