yii2.0ファイルのアップロード
7066 ワード
Yii 2.0は長い間出てきて、ずっと公式サイトを見ていましたが、実践したことがありません.今日は画像のアップロード操作をしました.
1単純なデータテーブルの作成
mysql> desc article;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(60) | NO | MUL | NULL | |
| image | varchar(100) | NO | | NULL | |
| content | text | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
データテーブルの構造は簡単です:自増ID、文章タイトル、文章サムネイル、文章内容.
2 Giiを用いて1つの文章表のModelを生成し、もう1つのCURDを生成する.
giiは確かに使いやすいツールで、簡単で迅速で、具体的なチュートリアルは次のリンクアドレスを参照することができます.
住所:http://www.yiichina.com/guide/2/start-gii
3テンプレートファイルの変更
変更_form.php(テンプレートファイルの追加と変更共通)
<div class="article-form">
<?php
$form = ActiveForm::begin([
'id' => "article-form",
'enableAjaxValidation' => false,
'options' => ['enctype' => 'multipart/form-data'],
]);
?>
<?= $form->field($model, 'title')->textInput(['maxlength' => 60]) ?>
<?= $form->field($model, 'image')->fileInput() ?>
<?= $form->field($model, 'content')->textarea(['rows' => 6]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
上のコードでは、ActiveForm::begin()メソッドで作成されたoptionsオプションに注意してください.
参考書類は、yii 2basicvendoryiisoftyii 2widgetsActiveForm.phpは、開いてみればわかりますが、指定したオプションはクラスの静的プロパティです.
4コントローラの変更方法
$model = new Article();
$rootPath = "uploads/";
if (isset($_POST['Article'])) {
$model->attributes = $_POST['Article'];
$image = UploadedFile::getInstance($model, 'image');
$ext = $image->getExtension();
$randName = time() . rand(1000, 9999) . "." . $ext;
$path = abs(crc32($randName) % 500);
$rootPath = $rootPath . $path . "/";
if (!file_exists($path)) {
mkdir($rootPath,true);
}
$image->saveAs($rootPath . $randName);
$model->image = $rootPath.$randName;
if ($model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
このアクションでは、まずUploadedFile::getInstance()を呼び出し、インスタンス化されたオブジェクトを返します.
getExtension()でファイル接尾辞名を取得し、ランダムに$randNameというファイル名を生成します.
次に、crc 32関数をマルチディレクトリストレージのために使用します.
最後にsaveAs()メソッドを直接呼び出してファイルを保存します.
これで大功を成し遂げた.
参考書類:yii 2basicvendoryiisoftyii 2webUploadedFile.php
ps:最後にYii 2.0はphpの新しいバージョンのネーミングスペースなどを使用しており、コントローラファイルのヘッダはuseの下でokであることを覚えています.