2014-09-05 59 views
0

我不知道如何描述我的问题。首先我在CCGridview添加一个按钮:如何从以前的Yii视图中获取价值

array(
    'class'=>'CButtonColumn', 
    'template' => '{view}{update}{delete}{upload_image}', 
    'buttons' => array(
     'upload_image' => array(
     'label' => 'upload foto', 
     'url' => 'Yii::app()->createUrl("/image/create", 
     array("product_id" => $data->product_id))', 
     ), 
    ), 
), 

当我点击它会带我到/图像/创建视图具有PRODUCT_ID值。例如对gridview的我点击记录编号7,所以链接将是:

(web应用)/index.php/image/create?product_id=7

由于呈现的局部_form所以表单具有根据具有以下属性的图像表的属性:id,title,filename,product_id。

所以认为会是这样的:

<div class="row"> 
    <?php echo $form->labelEx($model,'title'); ?> 
    <?php echo $form->textField($model,'title',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($model,'title'); ?> 
</div> 

<div class="row"> 
    <?php echo $form->labelEx($model,'filename'); ?> 
    <?php echo $form->fileField($model,'filename',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($model,'filename'); ?> 
</div> 

<div class="row"> 
    <?php echo $form->labelEx($model,'product_id'); ?> 
    <?php echo $form->textField($model,'product_id'); ?> 
    <?php echo $form->error($model,'product_id'); ?> 
</div> 

<div class="row buttons"> 
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> 
</div> 

我的问题是,我们如何使用从我之前提到的是7(../create?product_id=7)到URL中的价值product_id属性,而不必在提供的textField上键入它?

在其他的话,我会从视图中删除此:

<div class="row"> 
    <?php echo $form->labelEx($model,'product_id'); ?> 
    <?php echo $form->textField($model,'product_id'); ?> 
    <?php echo $form->error($model,'product_id'); ?> 
</div> 

但是,当我提交表单(7)应该已经过去了/保存在的product_id字段的值。

补充: 我控制器actionCreate是

//... 
public function actionCreate() 
{ 
      $dir = Yii::app()->basePath . '/../productimages/'; 
      $uploaded = false; 
      $model=new Image(); 

      if(isset($_POST['Image'])) 
      { 
       $model->attributes=$_POST['Image']; 
       $tempSave=CUploadedFile::getInstance($model,'filename'); 
       if($model->validate()) 
       { 
        $uploaded = $tempSave->saveAs($dir.'/'.$tempSave->getName()); 
        $this->redirect(array('/products/index')); 
       } 
      } 
      $this->render('index', array(
       'model' => $model, 
       'uploaded' => $uploaded, 
       'dir' => $dir, 
      )); 
} 

就是这样。非常感谢..

+0

显示我们的控制器动作,因为这是你需要initalize变量。 – Pentium10 2014-09-05 17:11:03

+0

@ Pentium10在那里我添加了我的控制器 – JoenMarz 2014-09-05 18:38:12

回答

1

修改您的控制器是这样的:

if(isset($_POST['Image'])) 
{ 
     $model->attributes=$_POST['Image']; 
     $tempSave=CUploadedFile::getInstance($model,'filename'); 
     if($model->validate()) 
     { 
      $uploaded = $tempSave->saveAs($dir.'/'.$tempSave->getName()); 
      $this->redirect(array('/products/index')); 
     } 
} else { 
    //initialize defaults 
    $model->product_id=intval($_GET['product_id']); 
} 
+0

完美的作品!非常感谢Pentium10! – JoenMarz 2014-09-06 07:59:25