1. Go to this page and download the library: Download shafimsp/laravel-actions library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
shafimsp / laravel-actions example snippets
use ShafiMsp\Actions\Contracts\Action;
/** @implements Action<User> */
final class FindUserById implements Action
{
public function __construct(
public readonly int $id,
) {}
}
final class FindUserByIdHandler
{
public function handle(FindUserById $action): User
{
return User::findOrFail($action->id);
}
}
// Using the global helper
$user = execute(new FindUserById(1));
// Using the facade
use ShafiMsp\Actions\Facades\ActionExecutor;
$user = ActionExecutor::execute(new FindUserById(1));
/** @implements Action<string> */
final class GetGreeting implements Action {}
/** @implements Action<User|null> */
final class FindOptionalUser implements Action {}
/** @implements Action<void> */
final class SendEmail implements Action {}
/** @implements Action<ResultA|ResultB|null> */
final class GetFlexibleResult implements Action {}
use ShafiMsp\Actions\Attributes\HandledBy;
#[HandledBy(CustomHandler::class)]
final class CreateUser implements Action {}
use ShafiMsp\Actions\Contracts\Action;
use ShafiMsp\Actions\Contracts\Middleware;
final class LoggingMiddleware implements Middleware
{
public function handle(Action $action, Closure $next): mixed
{
Log::info('Executing: ' . $action::class);
$result = $next($action);
Log::info('Completed: ' . $action::class);
return $result;
}
}
use ShafiMsp\Actions\Facades\ActionExecutor;
ActionExecutor::pushMiddleware(function (Action $action, Closure $next) {
// before
$result = $next($action);
// after
return $result;
});
use ShafiMsp\Actions\Attributes\Cacheable;
#[Cacheable(ttl: 3600)]
final class GetDashboardStats implements Action {}
#[Cacheable(ttl: 600, key: 'all_users')]
final class ListAllUsers implements Action {}
// config/actions.php
return [
// Global middleware applied to every action execution
'middleware' => [
\ShafiMsp\Actions\Middleware\CacheMiddleware::class,
],
// Bootstrap cache settings
'cache' => [
'enabled' => true,
'directories' => [app_path()],
'path' => null, // defaults to bootstrap/cache/actions.php
],
];
use ShafiMsp\Actions\Facades\ActionExecutor;
// Fake all actions (returns null by default)
ActionExecutor::fake();
// Fake with specific return values
ActionExecutor::fake([
FindUserById::class => User::factory()->create(),
GetGreeting::class => 'Hello!',
]);
// Fake with closures for dynamic values
ActionExecutor::fake([
FindUserById::class => fn (FindUserById $action) => User::find($action->id),
]);
// Assert an action was executed
ActionExecutor::assertExecuted(FindUserById::class);
// Assert with a truth test
ActionExecutor::assertExecuted(
FindUserById::class,
fn (FindUserById $action) => $action->id === 1
);
// Assert executed exactly N times
ActionExecutor::assertExecutedTimes(FindUserById::class, 2);
// Assert an action was NOT executed
ActionExecutor::assertNotExecuted(DeleteUser::class);
// Assert nothing was executed at all
ActionExecutor::assertNothingExecuted();