我是Yii的新手,我想在Yii中上传表格,请我帮忙。
一旦表单将数据发布到控制器,除了文件值之外,每个其他发布值都会被发布。
我甚至尝试使用var_dump($model->image);
检查错误,并返回此错误string '' (length=0)
指定一个空字符串,就像图像根本没有发布一样。
这是我的控制器
class TestController extends Controller
{
public function actionIndex()
{
$model=new Test;
if(isset($_POST['Test']))
{
$model->attributes=$_POST['Test'];
if($model->save()){
var_dump($model->getErrors());
if ($model->image){
var_dump($model->image);
$uploadedFile=CUploadedFile::getInstance($model,'image');
$fileName = date("Y_m_d_H_i_s").$uploadedFile;
$model->image = $fileName;
if(!empty($uploadedFile)) // check if uploaded file is set or not
{
$uploadedFile->saveAs(Yii::getPathOfAlias('webroot').'/imagefolder/'.$fileName);
}
}
}
}
}
}
这是我的观点
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'test-form',
'htmlOptions' => array('enctype' => 'multipart/form-data'),
'enableAjaxValidation'=>false,
)); ?>
<?php echo CHtml::activeFileField($model,'image',array('id'=>'primaryupload')); ?>
<?php echo CHtml::submitButton($model->isNewRecord ? 'UPLOAD' : 'UPLOAD',array('id'=>'submit','class'=>'btn')); ?>
<?php $this->endWidget(); ?>
任何帮助将不胜感激。因为我现在真的很沮丧。
答案 0 :(得分:2)
我认为您应该使用$ _FILES ['image']而不是$ model-&gt; image。
答案 1 :(得分:2)
如果您只是Yii的新手,而不是PHP,那么您可能知道上传的文件是通过$_FILES
全局变量而不是$_POST
全局变量。因此,要获取上传文件,请使用
$uploadedFile = CUploadedFile::getInstance($model, 'image');
所以你的最终代码如下:
$post = Yii::app()->request->getPost('Test');
if ($post) {
$model->attributes = $post;
$uploadedFile = CUploadedFile::getInstance($model, 'image');
if ($uploadedFile) {
$imageName = date("Y_m_d_H_i_s").$uploadedFile->name;
$model->image = $imageName;
if ($model->save()) {
$uploadedFile->saveAs(Yii::getPathOfAlias('webroot').'/imagefolder/'.$imageName );
}
}
答案 2 :(得分:0)
作为一种选择,您可以&#34;硬编码&#34;表单中的文件属性。只是:
<input type="file" id="yourid" name="yourname" />
然后在您正在解析POST数据的YourController中,您可以直接访问$ _FILES [&#39; yourname&#39;]。
不是一种优雅的方式,而是简单而快速。
P.S。:如果你在视图中使用$ this-&gt; beginWidget,那么你应该添加参数
$this->beginWidget('CActiveForm', array(
...
'htmlOptions'=>array(
'enctype'=>'multipart/form-data'
),
));