Add Nightwatch configuration guidance and MCP development skill docs across agent integrations, and refresh existing Laravel skill references.
118 lines
2.2 KiB
Markdown
118 lines
2.2 KiB
Markdown
# 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);
|
|
}
|
|
}
|
|
```
|