我是yii的新手,我用数据库上传图片,但图片存储在文件夹中,但没有保存在数据库中这段代码的问题是什么,而不是无意识的
public function actionCreate()
{
$model = new Jobs;
// $site_url=Yii::$app->getUrlManager()->createAbsoluteUrl('');
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$image = UploadedFile::getInstance($model,'image');
$imagepath='upload/jobs/';
$path=$imagepath.rand(10,100).$image->name;
if(!empty($image)){
$image->saveAs($path);
$model->image=$image->name;
$model->save();
}
return $this->redirect(['view', 'id' => $model->id]);
}
else {
// echo "file not ulpoaded";
}
return $this->render('create', [
'model' => $model,
]);
}
模型在这里命名为Jobs.php。
namespace app\models;
use Yii;
use yii\web\UploadedFile;
use yii\base\Model;
/**
* This is the model class for table "jobs".
*
* @property integer $id
* @property integer $users_id
* @property string $title
* @property string $deadline
* @property string $urgency
*/
class Jobs extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*
*
*/
public $image;
public static function tableName()
{
return 'jobs';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['users_id', 'title', 'deadline', 'urgency'], 'required'],
[['users_id'], 'integer'],
[['content'], 'string'],
[['deadline'], 'required'],
[['urgency'], 'string'],
[['urgency'], 'safe'],
[['image'],'file', 'skipOnEmpty'=>true,'extensions' => 'png,gif,jpg'],
[['title'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'ID'),
'users_id' => Yii::t('app', 'Users ID'),
'content'=>Yii::t('app','Content'),
'title' => Yii::t('app', 'Title'),
'deadline' => Yii::t('app', 'Deadline'),
'urgency' => Yii::t('app', 'Urgency'),
'image' => Yii::t('app', 'image'),
];
}
}
视图文件在这里命名为(_form.php)
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\web\UploadedFile;
//use kartik\widgets\FileInput;
/* @var $this yii\web\View */
/* @var $model app\models\Jobs */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="jobs-form">
<?php
$form = ActiveForm::begin([
'options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'users_id')->textInput() ?>
<?= $form->field($model, 'content')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'deadline')->textInput() ?>
<?= $form->field($model, 'urgency')->dropDownList([ 'No', 'yes', ], ['prompt' => '']) ?>
<?= $form->field($model, 'image')->fileInput() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
enter code here
plzz帮我上传数据库中的图像我不知道这段代码有什么问题。
答案 0 :(得分:2)
更改您的上传代码,如下所示:
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$image = UploadedFile::getInstance($model,'image');
$imagepath='upload/jobs/';
$rand_name=rand(10,100);
if ($image)
{
$model->image = "category_{$rand_name}-{$image}";
}
if($model->save()):
if($image):
$image->saveAs($imagepath.$model->image);
endif;
endif;
return $this->redirect(['view', 'id' => $model->id]);
}
答案 1 :(得分:0)
您在代码中混合了图片名称和图片文件。
如果public $image
是db-table中的字段,则不需要image
。而是在模型中添加public $imageFile
,并相应地更新表单和控制器。
请记住,$this->image
或$model->image
是图像的名称作为字符串,您将混合上传对象。而是创建另一个变量,以便您可以将上传的图像存储在其中,并使用图像变量保存实际名称以供日后参考。
看看你能否弄明白,如果你无法解决问题,请更新你的问题。
http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html