Add skip helper function for calling events

This commit is contained in:
crazywhalecc 2026-01-26 00:43:57 +08:00
parent c27ed8b0b4
commit a709221223
No known key found for this signature in database
GPG Key ID: 1F4BDD59391F2680
3 changed files with 28 additions and 1 deletions

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace StaticPHP\DI;
use DI\Container;
use StaticPHP\Exception\SkipException;
use StaticPHP\Exception\SPCInternalException;
/**
@ -92,7 +93,12 @@ readonly class CallbackInvoker
);
}
return $callback(...$args);
try {
return $callback(...$args);
} catch (SkipException $e) {
logger()->debug("Skipped invocation: {$e->getMessage()}");
return null;
}
}
/**

View File

@ -0,0 +1,7 @@
<?php
declare(strict_types=1);
namespace StaticPHP\Exception;
class SkipException extends SPCException {}

View File

@ -331,6 +331,20 @@ function spc_container(): DI\Container
return \StaticPHP\DI\ApplicationContext::getContainer();
}
/**
* Skip the current operation if the condition is true.
* You should ALWAYS use this function inside an attribute callback.
*
* @param bool $condition Condition to evaluate
* @param string $message Optional message for the skip exception
*/
function spc_skip_if(bool $condition, string $message = ''): void
{
if ($condition) {
throw new StaticPHP\Exception\SkipException($message);
}
}
/**
* Parse extension list from string, replace alias and filter internal extensions.
*