| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- namespace Dcat\Admin\Traits;
- trait BuilderEvents
- {
- /**
- * Register a resolving listener.
- *
- * @param callable $callback
- * @param bool $once
- */
- public static function resolving(callable $callback, bool $once = false)
- {
- static::setListeners('builder.resolving', $callback, $once);
- }
- /**
- * @param array ...$params
- */
- protected function callResolving(...$params)
- {
- $this->callBuilderListeners('builder.resolving', ...$params);
- }
- /**
- * Register a composing listener.
- *
- * @param callable $callback
- * @param bool $once
- */
- public static function composing(callable $callback, bool $once = false)
- {
- static::setListeners('builder.composing', $callback, $once);
- }
- /**
- * @param array ...$params
- */
- protected function callComposing(...$params)
- {
- $this->callBuilderListeners('builder.composing', ...$params);
- }
- /**
- * @param $listeners
- * @param array ...$params
- */
- protected function callBuilderListeners($key, ...$params)
- {
- $object = app('admin.object');
- $key = static::formatBuilderEventKey($key);
- $listeners = $object->get($key) ?: [];
- foreach ($listeners as $k => $listener) {
- list($callback, $once) = $listener;
- if ($once) {
- unset($listeners[$k]);
- }
- call_user_func($callback, $this, ...$params);
- }
- $object[$key] = $listeners;
- }
- /**
- * @param string $key
- * @param callable $callback
- * @param bool $once
- */
- protected static function setListeners($key, $callback, $once)
- {
- $object = app('admin.object');
- $key = static::formatBuilderEventKey($key);
- $listeners = $object->get($key) ?: [];
- $listeners[] = [$callback, $once];
- $object[$key] = $listeners;
- }
- protected static function formatBuilderEventKey($key)
- {
- return static::class.'::'.$key;
- }
- }
|