Как правильно использовать behavior?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Как правильно использовать behavior?

Сообщение frmaxm »

Всем привет,
скачал себе бихевер для загрузки файлов.
yiidreamteam.com/yii2/upload-behavior

"yii-dream-team/yii2-upload-behavior": "*"
Вроде проще не куда, но вот проблема с выводом загруженного изображения. Может не туда засунул сам бихевер или еще что. Вообщем прикладываю код.

Код: Выделить всё

class MyModel extends BaseModel {

    public $image;
    
    public function behaviors() {
        return [
            [
                'class' => '\yiidreamteam\upload\ImageUploadBehavior',
                'attribute' => 'image',
                'thumbs' => [
                    'thumb' => ['width' => 400, 'height' => 300],
                ],
                'filePath' => '@app/folder/user_[[pk]].[[extension]]',
                'fileUrl' => '/private/user_[[pk]].[[extension]]',
                'thumbPath' => '@webroot/uploads/[[profile]]_[[pk]].[[extension]]',
                'thumbUrl' => '/uploads/[[profile]]_[[pk]].[[extension]]',
            ],
        ];
    } 

Код: Выделить всё

public function rules() {
        return [
            ['image', 'file', 'extensions' => 'jpeg, gif, png'],
        ];
    } 

Картинки при загрузке попадают в свои папки. Все как бы хорошо но вот делаю вывод во views
echo $model->getThumbFileUrl('image', 'thumb');

И приходит пустота
Аватара пользователя
ksetrin
Сообщения: 81
Зарегистрирован: 2015.03.06, 10:00
Контактная информация:

Re: Как правильно использовать behavior?

Сообщение ksetrin »

1. Если картинки при загрузке попадают в свои папки, значит upload-behavior уже сделал свою работу на отлично. Следовательно он тут не причем
2. Вызывая $model->getThumbFileUrl('image', 'thumb'); вы вызываете метод из объекта $model. Следовательно дело в нем
Отлаживайте метод getThumbFileUrl и выводите, что хотите получить и будет вам счастьое :)
phpshko
Сообщения: 260
Зарегистрирован: 2015.03.21, 02:49

Re: Как правильно использовать behavior?

Сообщение phpshko »

А что в БД? Уверены что нужно "public $image;", а не поле в бд?
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

phpshko писал(а):А что в БД? Уверены что нужно "public $image;", а не поле в бд?
Да, поле из БД удалил.
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

ksetrin писал(а):1. Если картинки при загрузке попадают в свои папки, значит upload-behavior уже сделал свою работу на отлично. Следовательно он тут не причем
2. Вызывая $model->getThumbFileUrl('image', 'thumb'); вы вызываете метод из объекта $model. Следовательно дело в нем
Отлаживайте метод getThumbFileUrl и выводите, что хотите получить и будет вам счастьое :)

Код: Выделить всё

public function getThumbFileUrl($attribute, $profile = 'thumb', $emptyUrl = null)
    {
        var_dump($this->owner->{$attribute}); die;
дает сразу null вот я и стопорнулся

в дампе модели тоже profile_image = null
Последний раз редактировалось frmaxm 2015.12.09, 11:28, всего редактировалось 1 раз.
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

Код: Выделить всё

public function getThumbFileUrl($attribute, $profile = 'thumb', $emptyUrl = null)
    {
        if (!$this->owner->{$attribute})
            return $emptyUrl;

        $behavior = static::getInstance($this->owner, $attribute);
        if ($behavior->createThumbsOnRequest)
            $behavior->createThumbs();
        return $behavior->resolveProfilePath($behavior->thumbUrl, $profile);
    } 
Евгений Емельянов
Сообщения: 167
Зарегистрирован: 2015.06.10, 10:43

Re: Как правильно использовать behavior?

Сообщение Евгений Емельянов »

frmaxm писал(а):
phpshko писал(а):А что в БД? Уверены что нужно "public $image;", а не поле в бд?
Да, поле из БД удалил.
А где у Вас тогда url к изображению хранится?
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

frmaxm писал(а):

Код: Выделить всё

class MyModel extends BaseModel {

    public $image;
    
    public function behaviors() {
        return [
            [
                'class' => '\yiidreamteam\upload\ImageUploadBehavior',
                'attribute' => 'image',
                'thumbs' => [
                    'thumb' => ['width' => 400, 'height' => 300],
                ],
                'filePath' => '@app/folder/user_[[pk]].[[extension]]',
                'fileUrl' => '/private/user_[[pk]].[[extension]]',
                'thumbPath' => '@webroot/uploads/[[profile]]_[[pk]].[[extension]]',
                'thumbUrl' => '/uploads/[[profile]]_[[pk]].[[extension]]',
            ],
        ];
    }
'thumbUrl' => '/uploads/[[profile]]_[[pk]].[[extension]]',
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно использовать behavior?

Сообщение zelenin »

ksetrin писал(а):2. Вызывая $model->getThumbFileUrl('image', 'thumb'); вы вызываете метод из объекта $model. Следовательно дело в нем
или в поведении, поскольку из $model мы можем вызвать метод поведения.
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

zelenin писал(а):
ksetrin писал(а):2. Вызывая $model->getThumbFileUrl('image', 'thumb'); вы вызываете метод из объекта $model. Следовательно дело в нем
или в поведении, поскольку из $model мы можем вызвать метод поведения.

Как бы мне узнать, где трабла?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно использовать behavior?

Сообщение zelenin »

frmaxm писал(а):
zelenin писал(а):
ksetrin писал(а):2. Вызывая $model->getThumbFileUrl('image', 'thumb'); вы вызываете метод из объекта $model. Следовательно дело в нем
или в поведении, поскольку из $model мы можем вызвать метод поведения.

Как бы мне узнать, где трабла?
дебажить. всегда дебажь. по другому никак.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как правильно использовать behavior?

Сообщение ElisDN »

Ну так поле в БД верните.
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

ElisDN писал(а):Ну так поле в БД верните.

Представляешь, буквально час назад - исправил забыл отписать) весь код бихевера изчесал))))
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

Кстати, еще одна не понятка с бихевером.

Получается сохраняю многомерный массив.

Код: Выделить всё

foreach ($models as $key => $model) {
                if ($model[$i]->load(Yii::$app->request->post('User')[$key], '') && $model[$i]->validate()) {
                    $model[$i]->save();
                } 
                $i++;
            }
во вьюхе если пишу так то отлично записывается все но только по первой записи

Код: Выделить всё

<?= $form->field($model[$k], 'upload')->fileInput() ?>
А если пишу как и всю информацию, которая сохраняется - то ни в одну запись картика не попадает
<?= $form->field($value[$k], '['.$key.']upload')->fileInput() ?>

вот как быть?
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

Может как-то настраивать надо бихевер по-другому? но как?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как правильно использовать behavior?

Сообщение ElisDN »

Ну раз поле переименовываете, то и UploadedFile::getInstance также сами дописывайте.
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

Что-то не выходит

к примеру мой

Код: Выделить всё

public function behaviors() {
        return [
            [
                'class' => '\yiidreamteam\upload\ImageUploadBehavior',
                'attribute' => 'upload',
                'thumbs' => [
                    'thumb' => ['width' => 180, 'height' => 200],
                ],
....пути
            ],
        ];
    } 
Я делаю так

Код: Выделить всё

public function behaviors() {
        return [
            [
                'class' => '\yiidreamteam\upload\ImageUploadBehavior',
                'attribute' => '[0]upload',
                'thumbs' => [
                    'thumb' => ['width' => 180, 'height' => 200],
                ],
                ..пути
            ],
            [
                'class' => '\yiidreamteam\upload\ImageUploadBehavior',
                'attribute' => '[1]upload',
                'thumbs' => [
                    'thumb' => ['width' => 180, 'height' => 200],
                ],
                ...пути
            ],
        ];
    } 
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

Getting unknown property: app\models\User::[1]upload

ошибку вот такую мне дает, правила и лайбл написал ему
frmaxm
Сообщения: 193
Зарегистрирован: 2015.03.12, 22:16

Re: Как правильно использовать behavior?

Сообщение frmaxm »

Вроде дошло - щас попробую
Последний раз редактировалось frmaxm 2015.12.10, 16:37, всего редактировалось 1 раз.
Ответить