1

私は Yii 2 が初めてで、ドキュメントを読んで実験しています。を使用しActiveFormてファイルをアップロードしようとすると、コードをステップ実行するとファイルがアップロードされたように見えても、「ファイルをアップロードしてください」というエラーが表示され続けます。

型式コード

public function upload()
{
    if ($this->validate())
    {
        $destination = Yii::getAlias('@app/uploads');

        $this->brochure->saveAs($destination . '/' . $this->product_id . '.' . $this->brochure->extension);
        return true;
    }
    else
    {
        return false;
    }
}

コントローラーコード

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if (Yii::$app->request->isPost)
    {
        $model->load(Yii::$app->request->post());
        $upload = UploadedFile::getInstance($model, 'brochure');

        if ($upload !== null)
        {
            $model->brochure = $upload;
            $result = $model->upload();
        }

        // If model is saved, update product_to_language db table for language checkboxes
        if ($model->save())
        {
            // First delete all old values in product_to_language db table
            $cmd = Yii::$app->db->createCommand()
                ->delete('product_to_language', "product_id = $model->product_id")
            ;
            $result = $cmd->execute();

            // Next update product_to_language db table
            $form = Yii::$app->request->post('Product');

            if (!empty($languages = $form['languages']))
            {
                // Create array of values for batch insert
                foreach ($languages as $language_id)
                {
                    $insert_array[] = [$model->product_id, $language_id];
                }

                $cmd = Yii::$app->db->createCommand()
                    ->batchInsert('product_to_language',
                        ['product_id', 'language_id'],
                        $insert_array
                    )
                ;
                $result = $cmd->execute();
            }

            return $this->redirect(['view', 'id' => $model->product_id]);
        }
    }

    return $this->render('update', [
        'model' => $model,
    ]);
}

_form コード

<?php
use app\models\Product;
use app\models\Brand;
use app\models\Language;
use app\models\Color;
use app\models\Gender;
use yii\helpers\Html;
use yii\widgets\ActiveForm;

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


<div class="admin-product-form">

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

<?php
    $errors = $form->errorSummary($model);
    echo $errors;
?>

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

<?= $form->field($model, 'brand_id')->label('Brand')->dropDownList(Brand::getOptions(), ['prompt' => 'Select Brand']) ?>

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

<?php $model->isNewRecord ? $model->color_id = 1 : $model->color_id = $model->color_id ; ?>
<?= $form->field($model, 'color_id')->dropDownList(Color::getOptions()) ?>

<?= $form->field($model, 'gender_id')->radioList(Gender::getOptions(), ['prompt' => 'Select Gender']) ?>

<?= $form->field($model, 'languages')->checkboxList(Language::getOptions()) ?>

<?= $form->field($model, 'description')->textarea(['rows' => 6, 'class' => 'tinymce', 'maxlength' => true]) ?>

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

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

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

</div>

スクリーン キャプチャへのリンク https://www.dropbox.com/s/zfa0rj8b4pmqyss/yii%20form%20screen%20capture.png?dl=0

4

2 に答える 2