私は 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