creocoder / yii2-nested-sets

The nested sets behavior for the Yii framework.
Other
446 stars 129 forks source link

Указание действия, вместо сохранения #84

Closed brussens closed 7 years ago

brussens commented 8 years ago

Александр, доброго времени! Собственно предложение такое: вместо сохранения методами makeRoot(), prependTo(), appendTo(), insertBefore(), insertAfter(), использовать их просто для указания действия. Дело в том, что поведение очень круто работает с виджетами, типа JTreeView, но вот если нужно использовать его в Create и Update экшенах получается вроде того:

class CategoryController extends BackendController
{
    public function actionCreate()
    {
        $model = new Category;

        if($model->load(Yii::$app->getRequest()->post()) && $model->validate()) {

            $parent_id = $model->getAttribute('parent_id');

            if($parent_id) {
                $result = $model->appendTo($parent_id, false);
            }
            else {
                $result = $model->makeRoot(false);
            }
            if($result) {
                //...
            }
        }
    }
}

А хочется лаконичного использования. Если использовать подход, описанный выше, то можно получить подобное:

class Category extends ActiveRecord
{
    public function beforeSave()
    {
        parent::beforeSave();

        if($this->getAttribute('parent_id')) {
            $this->appendTo();
        }
        else {
            $this->makeRoot();
        }
    }
}

class CategoryController extends BackendController
{
    public function actionCreate()
    {
        $model = new Category;

        if($model->load(Yii::$app->getRequest()->post()) && $model->save()) {
            Yii::$app->getSession()->setFlash('success', 'Category has been saved!');
            return $this->redirect(['index']);
        }
    }
}

Так получат своё те, кто использует parent_id, что, лично для меня, довольно удобно при манипуляциях. Возможно можно будет просто указать дополнительный параметр в этих методах, который и будет отвечать за то, сохранять ли методом модель, или просто делать пометку для дальнейшего сохранения. Код выше накидал на скорую руку, так что не бросайте помидорами) Заранее спасибо.

brussens commented 8 years ago

Может пулл кинуть? Там впринципе то для сохранения не много надо.

yujin1st commented 8 years ago

https://github.com/creocoder/yii2-nested-sets/issues/97

brussens commented 8 years ago

Not the right decision to override the behavior of the conservation method that entails errors and difficulties, when working with this behavior. Therefore it is necessary to prevent overlap save method.

creocoder commented 7 years ago

Its not BC, sorry. Will consider that approach in next versions.