-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Making behaviors work with Document events #164
Comments
Behavior is just implementation of traits on php versions where traits not supported, so uou can just add some methods for all documents where trait added, and then through
And then you must call this method directly:
If you just want to add some functionality to
|
Thank you. I will rework my solution to make use of traits instead. This was my solution, a bit hacky and requires more thought but got the job done: namespace AXM\Slim\Core\Model\Document\Behavior;
use Sokil\Mongo\Behavior;
use Sokil\Mongo\Document;
use Sokil\Mongo\Event;
/**
* Class BehaviorBase
* @package AXM\Slim\Core\Model\Document\Behavior
*
* @method void afterConstruct(Event $event)
* @method void beforeValidate(Event $event)
* @method void afterValidate(Event $event)
* @method void validateError(Event $event)
* @method void beforeInsert(Event $event)
* @method void afterInsert(Event $event)
* @method void beforeUpdate(Event $event)
* @method void afterUpdate(Event $event)
* @method void beforeSave(Event $event)
* @method void afterSave(Event $event)
* @method void beforeDelete(Event $event)
* @method void afterDelete(Event $event)
*/
abstract class BehaviorBase extends Behavior
{
/**
* @var array
*/
protected $event_names = [
'afterConstruct',
'beforeValidate',
'afterValidate',
'validateError',
'beforeInsert',
'afterInsert',
'beforeUpdate',
'afterUpdate',
'beforeSave',
'afterSave',
'beforeDelete',
'afterDelete',
];
/**
* @param $owner
* @return $this
*/
public function setOwner($owner)
{
parent::setOwner($owner);
$this->attachEvents();
return $this;
}
protected function attachEvents()
{
/** @var Document $doc */
$doc = $this->getOwner();
foreach ($this->event_names as $event_name) {
if (method_exists($this, $event_name)) {
$doc->attachEvent($event_name, [$this, $event_name], 100);
}
}
}
} |
Looking at the docs and the code it is not apparently obvious how i can create a behavior that listens to the events on the document it is attached to. For example, I would like to create a behavior that sets date fields on a beforeSave event of the document.
How do I accomplish this?
The text was updated successfully, but these errors were encountered: