我无法在我的数据库和文件夹中上传照片...如果我使用CModel类来构建表单,这个相同的代码正常工作...但是如果我使用普通的HTML它会给我错误Profilepic cannot be blank
......我的代码在下面给出
我的表单
<form method="post" action="<?php echo Yii::app()->getBaseUrl(true).'/index.php?r=user/create'?>" enctype="multipart/form-data">
<div class="row">
<label>Username</label><input type="text" name="username"/><span><?php if(isset($error['username'])) echo $error['username'][0]; ?></span>
</div>
<div class="row">
<label>Password</label><input type="password" name="password"/><span><?php if(isset($error['password'])) echo $error['password'][0]; ?></span>
</div>
<div class="row">
<label>Email</label><input type="text" name="email"/><span><?php if(isset($error['email'])) echo $error['email'][0]; ?></span>
</div>
<div class="row">
<label>Profile pic</label><input type="file" name="profilepic"/><span><?php if(isset($error['profilepic'])) echo $error['profilepic'][0]; ?></span>
</div>
<input type="hidden" value="No" name="flag"/>
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
我的控制器方法
public function actionCreate()
{
$model=new User;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST))
{
$uploadedFile=CUploadedFile::getInstance($model,'profilepic');
$fileName = "{$uploadedFile}";
$model->profilepic = $fileName;
$model->attributes=$_POST;
if($model->save())
{
$a=$uploadedFile->saveAs(Yii::app()->basePath.'/../images/'.$fileName);
$this->redirect(array('create'));
}
}
$this->render('create',array(
'model'=>$model,
));
}
我的规则方法数组
return array(
array('username, password,email,profilepic', 'required'),
array('email','email'),
array('profilepic','file','types'=>'jpg,jpeg,png'),
array('email','unique'),
array('username,password,email,flag,profilepic', 'safe', 'on'=>'search'),
);
有人能帮帮我......
提前致谢
答案 0 :(得分:2)
您需要更改控制器代码,例如关注...
public function actionCreate()
{
$model=new User;
if(Yii::app()->request->isPostRequest) //change it
{
$model->profilepic=CUploadedFile::getInstanceByName('profilepic');
// $fileName = "{$uploadedFile}"; //this is not required
// $model->profilepic = $fileName; //this is also not required
$model->attributes=$_POST;
if($model->save())
{
$model->profilepic->saveAs(Yii::app()->basePath.'/../images/'.$model->profilepic);
$this->redirect(array('create'));
}
}
$this->render('create',array(
'model'=>$model,
));
}
首先是你需要的所有变化......我改变的一件最重要的事情是 getInstanceByName('profilepic')
希望它可以解决你的问题..
答案 1 :(得分:0)
让我们逐行看一下(某些特定的行):
1)$ uploadedFile = CUploadedFile :: getInstance($ model,'profilepic'); 您正在使用CUploadedFile Yii类中的“getInstance”方法。请记住,Yii的内容很好,http://www.yiiframework.com/doc/api/1.1/CUploadedFile适用于CUploadedFile类。
2)$ fileName =“{$ uploadedFile}”; 这是你试图从上面获取“getInstance”检索的临时文件名。这是第一个问题:http://www.yiiframework.com/doc/api/1.1/CUploadedFile#getInstance-detail public static CUploadedFile getInstance(CModel $ model,string $ attribute) - 这就是“getInstance”所期望的。如您所见,第一个参数是$ model,即从CModel继承的模型实例,由于未知原因,您试图避免使用CModel。 因此,当您调用“getInstance”时,此方法根本不知道您正在调用的内容(尤其是在您的问题中未显示“User”类时)。这就是第三行吐出“Profilepic不能为空”的原因,“getInstance”方法没有返回任何内容,“Profilepic”也无法使用。
3)$ model-&gt; profilepic = $ fileName; 我想现在你很清楚为什么会出现错误。
所以,你可以加载一个模型(回到CModel),或者至少应该深入了解你对“User”类的看法(取自$ model = new User;)并更加关注Yii文档。
希望这会给你至少一些方向而且没有冒犯意味着,我只是Yii文档粉丝之一。