In this code, we created a model ```UploadForm``` with an attribute ```$file``` that will be is ```<input type="file">``` in upload form and pointed out to him validation rule ```file```. This rule is [[yii\validators\FileValidator|FileValidator]]
### Secondly create a view for our model.
In this code, we created a model `UploadForm` with an attribute `$file` that will be is `<input type="file">` in upload
form and pointed out to him validation rule `file`. This rule is [[yii\validators\FileValidator|FileValidator]].
It is different attribute ```'enctype' => 'multipart/form-data'``` from the standard form. This value is required when you are using forms that have a file upload control. ```fileInput()``` represents a form input field.
It is different attribute `'enctype' => 'multipart/form-data'` from the standard form. This value is required when you
are using forms that have a file upload control. `fileInput()` represents a form input field.
Thirdly, that create the controller that will connect our form and model
### Thirdly, that create the controller that will connect our form and model.
```php
```php
namespaceapp\controllers;
namespaceapp\controllers;
...
@@ -74,26 +85,34 @@ class SiteController extends Controller
...
@@ -74,26 +85,34 @@ class SiteController extends Controller
}
}
}
}
```
```
The difference here from the standard crud action, so use ```UploadedFile::getInstance(...)``` instead ```model->load(...)```. [[\yii\web\UploadedFile|UploadedFile]] does not run the model validation, it only provides information about the uploaded file. Therefore, you need to run validation manually ```$model->validate()```. This triggers the [[yii\validators\FileValidator|FileValidator]] that expects a file
The difference here from the standard crud action, so use `UploadedFile::getInstance(...)` instead `model->load(...)`.
[[\yii\web\UploadedFile|UploadedFile]] does not run the model validation, it only provides information about the uploaded
file. Therefore, you need to run validation manually `$model->validate()`. This triggers the
[[yii\validators\FileValidator|FileValidator]] that expects a file
If you use "basic" application then forlder ```uploads``` should be create inside ```web``` folder.
Everything is ready, now run the page and download the file. Check the folder ```basic/web/uploads``` to make sure that you have downloaded.
If you use "basic" application then forlder `uploads` should be create inside `web` folder.
## Additional information.
Everything is ready, now run the page and download the file. Check the folder `basic/web/uploads` to make sure that
you have downloaded.
***
Additional information
----------------------
### Required rule
### Required rule
If you need to check the mandatory download the file, then use ```skipOnEmpty```.
If you need to check the mandatory download the file, then use `skipOnEmpty`.
```php
```php
publicfunctionrules()
publicfunctionrules()
{
{
...
@@ -103,17 +122,15 @@ public function rules()
...
@@ -103,17 +122,15 @@ public function rules()
}
}
```
```
***
### Path upload folder
### Path upload folder
Folder to download the file can be installed using ```Yii::getAlias('@app/uploads')```. This base path of currently running application and folder ```uploads``
Folder to download the file can be installed using `Yii::getAlias('@app/uploads')`. This base path of currently running
As you can see, the name of the expansion may be one and the file type - other, actually.
As you can see, the name of the expansion may be one and the file type - other, actually.
``UploadedFile::getInstance()->type``` also do not take this value for granted.
`UploadedFile::getInstance()->type` also do not take this value for granted. Instead, use
Instead, use [[\yii\helpers\BaseFileHelper|FileHelper]] and his [[FileHelper::getMimeType()]] to determine the exact MIME type.
[[\yii\helpers\BaseFileHelper|FileHelper]] and his [[FileHelper::getMimeType()]] to determine the exact MIME type.
If allowed to **load only the images**, using [[\yii\validators\ImageValidator|ImageValidator]] instead [[yii\validators\FileValidator|FileValidator]].
If allowed to **load only the images**, using [[\yii\validators\ImageValidator|ImageValidator]] instead
[[yii\validators\FileValidator|FileValidator]].
```php
```php
publicfunctionrules()
publicfunctionrules()
...
@@ -141,15 +162,13 @@ public function rules()
...
@@ -141,15 +162,13 @@ public function rules()
];
];
}
}
```
```
```ImageValidator``` use use ```yii\helpers\FileHelper;``` for check mime types.
* ```['multiple' => '']``` - HTML <input> multiple Attribute
*`['multiple' => '']` - HTML <input> multiple Attribute
* ```file[]``` vs ```file`` - need, otherwise UploadedFile sees only one file
*`file[]` vs `file` - need, otherwise UploadedFile sees only one file
We now turn to the controller
We now turn to the controller
```php
```php
namespaceapp\controllers;
namespaceapp\controllers;
...
@@ -230,6 +253,9 @@ class SiteController extends Controller
...
@@ -230,6 +253,9 @@ class SiteController extends Controller
}
}
}
}
```
```
Here the differences in:
Here the differences in:
* ``` UploadedFile::getInstances($model, 'file');``` instead ``` UploadedFile::getInstance($model, 'file');```. First returns **all** uploaded files for the given model attribute, second - one.
*`UploadedFile::getInstances($model, 'file');` instead `UploadedFile::getInstance($model, 'file');`. First returns
**all** uploaded files for the given model attribute, second - one.