我正在尝试上传图片和数据库表。
在数据库表basic_info字段名称'照片'我想存储文件名。
这是模型
public function rules()
{
return [
[['photo'], 'string', 'max' => 255],
[['image'], 'safe'],
[['image'], 'file', 'extensions'=>'jpg, gif, png'],
];
}
这是控制器
public function actionCreate()
{
$model = new BasicInfo();
if ($model->load(Yii::$app->request->post()))
{
$model->image = UploadedFile::getInstance($model, 'image');
$filename = pathinfo($model->image , PATHINFO_FILENAME);
$ext = pathinfo($model->image , PATHINFO_EXTENSION);
$newFname = $filename.'.'.$ext;
$path=Yii::getAlias('@membersImgPath');
if(!empty($newFname)){
$model->image->saveAs($path.$newFname);
$model->image = $newFname;
if($model->save()){
return $this->redirect(['view', 'id' => $model->id]);
}
}
}
return $this->render('create', [
'model' => $model,
]);
}
这是视图
echo FileInput::widget([
'name' => 'photo',
'options' => ['accept' => 'image/*'],
]);
答案 0 :(得分:1)
来自你的评论,
$ form = ActiveForm :: begin([' type' => ActiveForm :: TYPE_VERTICAL],[' opti ons' => [' enctype&# 39; =>'米ultipart /格式数据']]);
ActiveForm::begin
没有第二个参数。您需要使用单个选项数组。
$form = ActiveForm::begin([
'type' => ActiveForm::TYPE_VERTICAL,
'options' => [
'enctype' => 'multipart/form-data'
]
]);
答案 1 :(得分:0)
首先,你必须检查是否有文件。为此,请尝试:
if(UploadedFile::getInstance($model, 'image')) {
// here should go your code with $model->image
}
您使用pathinfo
获取文件名和扩展名。请记住,您使用的是强大的框架,您只需初始化类UploadedFile
,它可以为您完成所有事情:
if(UploadedFile::getInstance($model, 'image')) {
$model->image = UploadedFile::getInstance($model, 'image');
$newFname = $model->image->name; // UploadedFile have properties like `name`, `tempName`, even `size`!
}
对代码执行此小修复后(您应该始终检查是否设置了某些内容) - 我们可以解决主要问题。
您的输入字段名称为photo
,但您尝试获取名为image
的图片。
改变这个:
UploadedFile::getInstance($model, 'image');
对此:
UploadedFile::getInstance($model, 'photo'); // remeber to change it in `if` statement aswell!!
Theres还可以尝试上传大于post_max_size
和upload_max_filesize
允许的文件。在php.ini
中更改此属性,重新启动服务器,然后重试。如果仍然不对,请尝试调试此事,首先在控制器中执行var_dump($_FILES);die;
。