Страница 1 из 1

Просто вопрос про afterSave

Добавлено: 2015.01.04, 23:05
Akulenok
Я создаю категории, есть поля name, slug, parent_id, number_post
number_post не обязательное поле, и если юзер его не заполнил должно быть по умолчанию 10.
в первой Yii я сделал бы так

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

public function afterSave
 if(empty($this->number_post)) $this->number_post = 10;
 
а как теперь это сделать? и как лучше правильнее поступить? желательно с примером кода

Re: Просто вопрос про afterSave

Добавлено: 2015.01.05, 00:15
anton44eg
так же

Re: Просто вопрос про afterSave

Добавлено: 2015.01.05, 01:09
zelenin
я бы в валидацию добавил default

Re: Просто вопрос про afterSave

Добавлено: 2015.01.05, 06:24
Insolita
ну если не в валидацию то в beforeSave не в after

Re: Просто вопрос про afterSave

Добавлено: 2015.01.05, 10:09
Akulenok
спасибо разобрался и еще вопрос в догонку
мне надо сгенерировать ссылку из поля name, то есть сделать slug, у меня это поле называется link.
в модели я делаю

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

use yii\behaviors\SluggableBehavior;
public function behaviors()
    {
        return [
            [
                'class'=>SluggableBehavior::className(),
                'slugAttribute'=>'link',
                'attribute'=>'name'
            ]
        ];
    }
но ничего не происходит, link пустая, что я делаю не правильно?
она заполняется если поле name заполняю на английском, а мне надо с русского транслит
и только в том случае если пользователь не заполнял руками поле link

Re: Просто вопрос про afterSave

Добавлено: 2015.01.09, 13:54
wpd
Вопрос похожий. actionSignup у меня в SiteController. Я создал форму signup в views/site.
В форме несколько полей, я создал в сайт контроллере бефореСейв.

SiteController

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


public function actionSignup()
    {
        $model = new User();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->validate()) {
                // form inputs are valid, do something here
                return;
            }
        }

        return $this->render('signup', [
            'model' => $model,
        ]);
    }
    
    
 public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
           $this->status = User::STATUS_NOTACTIVE;
            return true;
        } else {
            return false;
        }
    }
Мне можно как-то указать что этот befoSave юзаеться только для signup экшна?
И что есть $insert? Что мне в нем указывать надо?

Re: Просто вопрос про afterSave

Добавлено: 2015.01.09, 13:56
zelenin
beforeSave - метод для модели, а не для контроллера

Re: Просто вопрос про afterSave

Добавлено: 2015.01.09, 14:03
wpd
ааа, вот я дурень! Актив Рекордс же там. Что то я не подумал. :)
Значит получается сценарий не надо указывать.
Значит я в сайтконтроллере я создал объект класса Юзер. При заполнении полей данными, если я буду сохранять, то бефоресейв сработает в моделе верно?
Я уточняю, чтоб понять правильно ли я понимаю логику.

Что есть $insert? И как "он" поймет что это добавление а не апдейт?

Re: Просто вопрос про afterSave

Добавлено: 2015.01.09, 14:06
zelenin
wpd писал(а):ааа, вот я дурень! Актив Рекордс же там. Что то я не подумал. :)
Значит получается сценарий не надо указывать.
Значит я в сайтконтроллере я создал объект класса Юзер. При заполнении полей данными, если я буду сохранять, то бефоресейв сработает в моделе верно?
Я уточняю, чтоб понять правильно ли я понимаю логику.

Что есть $insert? И как "он" поймет что это добавление а не апдейт?
для новой записи передается $insert = true

Re: Просто вопрос про afterSave

Добавлено: 2015.01.09, 14:07
wpd
Спасибо, пойду тестить :)