Уже писал рецепт что в Yii есть такая замечательная возможность выносить действия контроллера в отдельные классы, чтоб использовать повторно в разных случаях.
В сочетании с несколькими другими прелестями framework'a (Events, Evaluate Expression), было написано действие загрузки файла.
Не раз использовалось в проектах, но уже не давно не менял его, т.к. не нахожу чтобы еще понадобилось для загрузке файла.
Выслушал бы с удовольствием, что еще может понадобиться в будущих проектах.
смотрим или забираем в репозитарии yiiext
Боевой пример используется вместе с EImperaviRedactorWidget и EUploadifyWidget
Код: Выделить всё
'upload'=>array(
'class'=>'ext.yiiext.actions.fileUpload.EFileUploadAction',
'name'=>'file',
'path'=>Yii::getPathOfAlias('webroot').'/files/'.Yii::app()->getController()->getId().'/'.date('Y-m-d'),
'createDirectory'=>true,
'filenameRule'=>'md5($file->name).".".$file->extensionName',
'onAfterSave'=>function($event)
{
echo $event->sender->path.'/'.$event->sender->filename;
exit;
},
),
'uploadify'=>array(
'class'=>'ext.yiiext.actions.fileUpload.EFileUploadAction',
'model'=>'UserModel',
'attribute'=>'photo',
'path'=>Yii::getPathOfAlias('webroot').'/files/'.Yii::app()->getController()->getId().'/'.date('Y-m-d'),
'createDirectory'=>true,
'filenameRule'=>'md5($file->name).".".$file->extensionName',
'onAfterSave'=>function($event)
{
echo $event->sender->path.'/'.$event->sender->filename;
exit;
},
),
Код: Выделить всё
class UserModel extends CFormModel
{
public $photo;
public function rules()
{
return array(
array(
'photo','file',
//'maxSize'=>1024*1024*1024,
'types'=>'jpg,png,gif',
),
);
}
}