des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Yii загрузка картинок в модели?

делаю по этому
belyakov.su/yii-magazin-3_1-dopilivaem-book
но блин какая то лажа получается.
использую это расширение www.yiiframework.com/extension/image-column
в модели

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('name', 'safe'),
                        array('link', 'unsafe'),
                        array('link', 'file',
                            'types'=>'jpg, gif, png, pdf',
                            'maxSize'=>1024 * 1024 * 5, // 5 MB
                            'allowEmpty'=>'true',
                            'tooLarge'=>'Файл весит больше 5 MB. Пожалуйста, загрузите файл меньшего размера.',
                            ),
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('id, name, link', 'safe', 'on'=>'search'),
        );
    }


в форме

<div class="row">
        <?php echo $form->labelEx($model,'link'); ?>
        <?php echo $form->fileField($model, 'link'); 
                if(!$model->isNewRecord) {
                    echo CHtml::image(Yii::app()->baseUrl.'/images/pic/' .$model->link, $model->name, array('height'=>100));
                        }
?>
        <?php echo $form->error($model,'link'); ?>
    </div>


во вьюшке

<?php
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'img-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        array(
            'class' => 'EImageColumn',
            'header' => 'картинка',
            'name' => 'link',
            'pathPrefix' => Yii::app()->baseUrl . "/images/pic/",
            'htmlOptions' => array('style' => 'width: 150px;'),
        ),
        'name',
        array(
            'class' => 'CButtonColumn',
        ),
    ),
));
?>


и страшный контролер

public function actionCreate()
    {
        $model = new Img;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Img']))
        {
            $model->attributes = $_POST['Img'];
            $command = Yii::app()->db->createCommand();
                    $max = Yii::app()->db->createCommand()
                    ->select('max(id) as max')
                    ->from('img')
                    ->queryScalar();
                    
            $file_image = CUploadedFile::getInstance($model, 'link');
            if (is_object($file_image) && get_class($file_image) === 'CUploadedFile')
                $model->link = $file_image;
            if ($model->save())
            {       
                if (is_object($file_image))
                {
                    $model->link->saveAs($_SERVER['DOCUMENT_ROOT'].'/techbase/images/pic/' .($max+1).'.'.$file_image->extensionName);
                   
                }
                  $command->update('img', array(
                            'link' => ($max+1).'.'.$file_image->extensionName,                      
                      ),'id=:id', array(':id'=>$max+1)
                          );
                 $model->link = $max.'.'.$file_image->extensionName;
                $this->redirect(array('view', 'id' => $model->id));
            }
        }
        $this->render('create', array(
            'model' => $model,
        ));
    }


как можно поправить контролер. или пусть так будет?
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
@juniorspecialist
Джуниор
Неужели лень погуглить ))
По загрузке файлов всё есть в руководстве.
Раз
Два
По созданию уникальных имен файлов здесь
Три
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы