Как Записать Имя Загруженного Файла В Базу

Сделал по этой теме загрузку файла загрузка файлов yii, использовал вариант с поведением. Но как сделать запись названия файла в бд, если оно генерируется следующим образом:




       $sourcePath = pathinfo($file->getName());

        $fileName = md5(microtime()) .'.'. $sourcePath['extension']; // имя будущего файла в базе и ФС



Не понятно, а в чем проблема записать это имя в один из столбцов таблицы?

Проблема в том, что я не знаю как получить $fileName в коде ниже в мой контроллер, который наследует это поведение.




    // имейте ввиду, что методы-обработчики событий в поведениях должны иметь

    // public-доступ начиная с 1.1.13RC

    public function beforeSave($event){

        if(in_array($this->owner->scenario,$this->scenarios) &&

            ($file=CUploadedFile::getInstance($this->owner,$this->attributeName))){

            $this->deleteFile(); // старый файл удалим, потому что загружаем новый


            $sourcePath = pathinfo($file->getName());

            $fileName = md5(microtime()) .'.'. $sourcePath['extension']; // имя будущего файла в базе и ФС

            

            $this->owner->setAttribute($this->attributeName,$file->name);

           

            $file->saveAs($this->savePath.$fileName);

        }

        return true;

    }



И вообще что такое getInstance и $owner?

Поведение (behavior) не наследуется, оно подключается. Не путайте пожалуйста ни себя, ни меня.

$this->owner - это собственно объект, к которому прикреплено "поведение". Вы говорите, что это контроллер, но по имени метода beforeSave - есть подозрение, что поведение все же прикрепляется к "модели", или я не понимаю, или вы опять путаете.

CUploadedFile::getInstance - это магия такая, просто используется. Судя по названию там где-то используется паттерн Singleton, но думаю сейчас это не важно.

А вот тут в поле таблицы записывается имя файла.


$this->owner->setAttribute($this->attributeName,$file->name);

Только берется оно из объекта $file, наверное вместо $file->name вам нужно вставить $fileName

Все решил проблему! Спасибо