/** * The "booting" method of the model. * * We'll use this method to register event listeners on a Node instance as * suggested in the beta documentation... * * TODO: * * - Find a way to avoid needing to declare the called methods "public" * as registering the event listeners *inside* this methods does not give * us an object context. * * Events: * * 1. "creating": Before creating a new Node we'll assign a default value * for the left and right indexes. * * 2. "saving": Before saving, we'll perform a check to see if we have to * move to another parent. * * 3. "saved": Move to the new parent after saving if needed and re-set * depth. * * 4. "deleting": Before delete we should prune all children and update * the left and right indexes for the remaining nodes. * * 5. (optional) "restoring": Before a soft-delete node restore operation, * shift its siblings. * * 6. (optional) "restore": After having restored a soft-deleted node, * restore all of its descendants. * * @return void */ protected static function boot() { parent::boot(); static::creating(function ($node) { $node->setDefaultLeftAndRight(); }); static::saving(function ($node) { $node->storeNewParent(); }); static::saved(function ($node) { $node->moveToNewParent(); $node->setDepth(); }); static::deleting(function ($node) { $node->destroyDescendants(); }); if (static::softDeletesEnabled()) { static::restoring(function ($node) { $node->shiftSiblingsForRestore(); }); static::restored(function ($node) { $node->restoreDescendants(); }); } }
/** * The "booting" method of the model. * * We'll use this method to register event listeners on a Node instance as * suggested in the beta documentation... * * TODO: * * - Find a way to avoid needing to declare the called methods "public" * as registering the event listeners *inside* this methods does not give * us an object context. * * Events: * * 1. "creating": Before creating a new Node we'll assign a default value * for the left and right indexes. * * 2. "saving": Before saving, we'll perform a check to see if we have to * move to another parent. * * 3. "saved": Move to the new parent after saving if needed and re-set * depth. * * 4. "deleting": Before delete we should prune all children and update * the left and right indexes for the remaining nodes. * * 5. (optional) "restoring": Before a soft-delete node restore operation, * shift its siblings. * * 6. (optional) "restore": After having restored a soft-deleted node, * restore all of its descendants. * * @return void */ protected static function boot() { parent::boot(); static::flushModelEvents(); }