forked from samdark/yiiframework_ru_cookbook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathform.file.upload.txt
87 lines (76 loc) · 3.2 KB
/
form.file.upload.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Как загрузить файл используя модель
===================================
Во-первых, объявим атрибут (свойство) в модели, которое будет содержать имя
файла. Также объявим правила валидации для загружаемого файла, чтобы разрешить
загружать файлы определенного типа.
~~~
[php]
class Item extends CActiveRecord {
public $image;
// другие свойства
public function rules(){
return array(
//устанавливаем правила для файла, позволяющие загружать
// только картинки!
array('image', 'file', 'types'=>'jpg, gif, png'),
);
}
}
~~~
Затем в контроллере определяем метод, который будет выводить форму
и принимать данные из неё:
~~~
[php]
class ItemController extends CController {
public function actionCreate(){
$model=new Item;
if(isset($_POST['Item'])){
$model->attributes=$_POST['Item'];
$model->image=CUploadedFile::getInstance($model,'image');
if($model->save()){
$model->image->saveAs('path/to/localFile');
// перенаправляем на страницу, где выводим сообщение об
// успешной загрузке
}
}
$this->render('create', array('model'=>$model));
}
}
~~~
Если происходит загрузка нескольких файлов, код будет таким:
~~~
[php]
if($model->save()){
foreach($model->image as $file){
$file->saveAs('path/to/localFile');
}
// перенаправляем на страницу, где выводим сообщение об
// успешной загрузке
}
~~~
И, наконец, создаём представление с формой:
~~~
[php]
<?php echo CHtml::form('','post',array('enctype'=>'multipart/form-data')); ?>
…
<?php echo CHtml::activeFileField($model, 'image'); ?>
…
<?php echo CHtml::endForm(); ?>
~~~
> Note|Примечание: При загрузке файла, естественно, можно проверять не только тип файла, но также
размер, и другие параметры. Вот пример правила, которое разрешает загрузку
картинок размером не больше 1 Мб:
>~~~
[php]
public function rules(){
return array(
// Максимальный и минимальный размер указываем в байтах.
array('image', 'file', 'types'=>'jpg, gif, png', 'maxSize' => 1048576),
);
}
~~~
>Подробнее о доступных правилах валидации можно прочитать в API
класса [CFileValidator].
---
- Основан на: [http://www.yiiframework.com/doc/cookbook/2/](http://www.yiiframework.com/doc/cookbook/2/)
- Перевод и примечание: [Pirrat](http://yiiframework.ru/forum/memberlist.php?mode=viewprofile&u=59)