我是yii和php的新手。
我想上传文件并将其路径保存到数据库,但是这样做时出现错误。

我的 Controller 类是:

public function actionCreate()
    {
        $model = new Quiz();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $fileName = $model->name;
            $model->file =UploadedFile::getInstance($model,'file');
            $model->file->saveAs('uploadQuiz/'.$fileName.'.'.$model->file->extension );
            $model->filePath = 'uploadQuiz/'.$fileName.'.'.$model->file->extension ;
            $model->save();
            return $this->redirect(['view', 'id' => $model->idQuiz]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);

        }
    }

我保存文件路径的数据库列名称是“filePath”。
我的查看文件是:
<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model app\models\Quiz */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="quiz-form">

    <?php $form = ActiveForm::begin(['option' => ['enctype' => 'multipart/form-data']]); ?>

    <?= $form->field($model, 'Course_idCourse')->textInput(['maxlength' => 100]) ?>

    <?= $form->field($model, 'name')->textInput(['maxlength' => 100]) ?>

    <?= $form->field($model, 'description')->textInput(['maxlength' => 255]) ?>

    <?= $form->field($model, 'duration')->textInput(['maxlength' => 100]) ?>

    <?= $form->field($model, 'time')->textInput() ?>

    <?= $form->field($model, 'file')->fileInput();  ?>

    <?= $form->field($model, 'totalMarks')->textInput(['maxlength' => 100]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

我的规则和属性是:
public function rules()
    {
        return [
            [['Course_idCourse', 'duration', 'time'], 'required'],
            [['Course_idCourse', 'duration', 'totalMarks'], 'integer'],
            [['time'], 'safe'],
            [['file'],'file'],
            [['name', 'filePath'], 'string', 'max' => 200],
            [['description'], 'string', 'max' => 255]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'idQuiz' => 'Id Quiz',
            'Course_idCourse' => 'Course Id Course',
            'name' => 'Name',
            'description' => 'Description',
            'duration' => 'Duration',
            'time' => 'Time',
            'file' => 'Quiz ',
            'totalMarks' => 'Total Marks',
        ];
    }

现在,我已经将此问题转至该站点,但是我发现它不是用于create而是用于更新。请帮助我。
当我运行尝试创建时出现错误
在非对象上调用成员函数saveAs()
我不知道我要去哪里错了。

最佳答案

没有文件正在上传。 option初始化中的ActiveForm参数应为 options

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

关于php - 在非对象[Yii 2]上调用成员函数saveAs(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32153367/

10-12 12:52