hiscaler
(Hiscaler)
1
利用 CHtml::activeFileField 生成表单时会生成如下语句:
<input id="ytProduct_pic_saved_path" type="hidden" value="" name="Product[pic_saved_path]" /><input class="larges" name="Product[pic_saved_path]" id="Product_pic_saved_path" type="file" />
其中 hidden 应该是为更新操作服务的。
在添加的时候,这个值为空,如果我进行的是更新的动作,且添加的时候已经赋予这个字段值的话,应该在 value 中会有对应的值存在。可是我利用如下语句构造的时候,发现 value 值依旧是空值。
<?php echo CHtml::activeFileField($model, 'pic_saved_path', array('class' => 'larges')); ?>
是我书写有误还是?
hiscaler
(Hiscaler)
2
将 CHtml 的 1162 行代码修改为:
return self::hiddenField($htmlOptions['name'],$model[$attribute],array('id'=>self::ID_PREFIX.$htmlOptions['id']))
. self::activeInputField('file',$model,$attribute,$htmlOptions);
搞定。只是不知道我是否误会了 qiang 这行代码的本意。冏
jerry2801
(Jerry2801)
3
看注解,qiang做这个hidden field的主要意图是做判断 $_POST 时候所使用的,
至于值,好像没有什么左右吧?
要显示值的话,我想,可以另外做个区域说明~
hiscaler
(Hiscaler)
4
Jerry 是不是误会了我的意思?
CHtml::activeXXX 很强大。不过貌似这个 CHtml::activeFileField 处理得不是很好。说一下我的需求吧。
比如我上传一个文件,保存的时候为 a.jpg 这个文件名。保存之后我再点击编辑进行修改,比如这个表有 filename, file_saved_path,渲染这个表单的时候filename有值,但是 file_saved_path 是没有值的。这样的话,如果我的上传代码是在 model 中完成的话,就会在更新的时候清空 file_saved_path 字段的值。当然,如果我是在 controller 中做更新处理动作的话这个问题也不存在了。
dufei22
(Dufei22)
5
本来上传文件这个处理应该在controller中处理比较好,放到model中处理就不太合适了
hiscaler
(Hiscaler)
6
Why?
几乎没有啥区别的两段代码要在 create 和 update 分别搞一下。有点麻烦哦。
qiang
(Qiang Xue)
7
这个hidden field的唯一用途是在当表单只包含file upload时,我们还能根据isset($_POST[ModelClass])来判断模型是否提交了。
qiang
(Qiang Xue)
8
你在更新模型时是需要对文件上传作验证的吧?这样可以避免这个hidden field直接覆盖你现有的文件名。
jerry2801
(Jerry2801)
9
利用 $_POST 和 $_FILES 的特性,来做到这个hidden,确实高招~ 
hiscaler
(Hiscaler)
10
假设我现在是如果没有提供上传文件的话则不更新对应的字段。请问如何处理不更新这个字段呢?谢谢。