# Object Entrypoint (`run`, `make`, DI) ## Scope Use this reference when the action is invoked as a plain object. ## Recap - Explains object-style invocation with `make`, `run`, `runIf`, `runUnless`. - Clarifies when to use static helpers versus DI/manual invocation. - Includes minimal examples for direct run and service-level injection. - Highlights boundaries: business logic stays in `handle(...)`. ## Recommended pattern - Keep core business logic in `handle(...)`. - Prefer `Action::run(...)` for readability. - Use `Action::make()->handle(...)` or DI only when needed. ## Methods provided ### `make` Resolves the action from the container. ```php PublishArticle::make(); // Equivalent to: app(PublishArticle::class); ``` ### `run` Resolves and executes the action. ```php PublishArticle::run($articleId); // Equivalent to: PublishArticle::make()->handle($articleId); ``` ### `runIf` Resolves and executes the action only if the condition is met. ```php PublishArticle::runIf($shouldPublish, $articleId); // Equivalent mental model: if ($shouldPublish) { PublishArticle::run($articleId); } ``` ### `runUnless` Resolves and executes the action only if the condition is not met. ```php PublishArticle::runUnless($alreadyPublished, $articleId); // Equivalent mental model: if (! $alreadyPublished) { PublishArticle::run($articleId); } ``` ## Checklist - Input/output types are explicit. - `handle(...)` has no transport concerns. - Business behavior is covered by direct `handle(...)` tests. ## Common pitfalls - Putting HTTP/CLI/queue concerns in `handle(...)`. - Calling adapters from `handle(...)` instead of the reverse. ## References - https://www.laravelactions.com/2.x/as-object.html ## Examples ### Minimal object-style invocation ```php final class PublishArticle { use AsAction; public function handle(int $articleId): bool { // Domain logic... return true; } } $published = PublishArticle::run(42); ``` ### Dependency injection invocation ```php final class ArticleService { public function __construct( private PublishArticle $publishArticle ) {} public function publish(int $articleId): bool { return $this->publishArticle->handle($articleId); } } ```