BoyLee
- BoyLee 回复了话题 关于缓存的问题。。。
原来是不能设置。。。。好像明白了。
但是我试验了下,验证在一般输入里可以,但是在uploaded里面就失效了。。。
controllerpublic function actionUpdateAll() { for ($i=1;$i<7;$i++) $PMaps[$i]=$this->loadModel($i); if(isset($_POST['PPreviewMap'])) { $valid = true; foreach ($PMaps as $k=>$PMap) { $tmp_img_old = $PMap->img; $PMap->attributes = $_POST['PPreviewMap']["$k"]; if (@!empty($_FILES['PPreviewMap']['name']["$k"]['img'])){ $PMap->img = Map::model()->generateRandomName(0); //validate, oldname, newname, waiting to save and saveAs if ($PMap->validate(array("img"))){ //这一行无效。。。。 $tmp_img = CUploadedFile::getInstance($PMap, "[$k]img"); echo '<pre>'; print_r($tmp_img); echo '</pre>'; $tmp_img->saveAs(Yii::app()->basePath.'/../map_img/'.$PMap->img); } }else { $PMap->img = $tmp_img_old==''? 'default.jpg' : $tmp_img_old; } $valid = $valid && $PMap->validate(); } if ($valid) echo 'All Pass'; } $this->render('updateAll', array('PMaps' =>$PMaps) ); }
view
<?php foreach ($PMaps as $PMap) echo '<p>'.$form->errorSummary($PMap).'</p>'; ?> <?php foreach ($PMaps as $k=>$PMap):?> <div class="row"> <?php echo $form->labelEx($PMap,"[$k]pre_map_title"); ?> <?php echo $form->textField($PMap,"[$k]pre_map_title",array('size'=>32,'maxlength'=>32)); ?> <?php echo $form->error($PMap,$k."[$k]pre_map_title"); ?> </div> <div class="row"> <?php echo $form->labelEx($PMap,"[$k]img"); ?> <?php echo $form->fileField($PMap,"[$k]img",array('size'=>60,'maxlength'=>150)); ?> <?php echo $form->error($PMap,"[$k]img"); ?> </div> <div class="row"> <?php echo $form->labelEx($PMap,"[$k]url"); ?> <?php echo $form->textField($PMap,"[$k]url",array('size'=>60,'maxlength'=>1500)); ?> <?php echo $form->error($PMap,"[$k]url"); ?> </div> <hr/> <?php endforeach;?>
model
array('img', 'file', 'allowEmpty'=>true, 'types'=>'jpg','maxSize'=>1024*1024*1, 'tooLarge'=>'最大只能上传1MB'),
我想认证这一条规则,但是这个规则只能在单model模式下有效,验证方法 $PMap->validate(array("img")), 一旦使用多model就不行了。。。。而且在tabular file uploading的时候
$tmp_img = CUploadedFile::getInstance($PMap, "[$k]img");
这样获得的实例,而不是直接'img'