Opening this up for discussion: what do you all think about the idea of introducing class instantiation directly into the context, like $context->get(Foo::class, 'bar')? I think this could be a really cool addition, but I also realize we might be edging toward implementing a service container. Not sure if that's necessarily a bad thing—thoughts?
I have some code below, but feel free to pull my branch here for a demo.
$app = new Dumbo();
class SimpleMessage
{
public function __construct(
public string $messageOne,
public string $messageTwo
) {}
public function getMessage(): string
{
return "{$this->messageOne} {$this->messageTwo}";
}
}
class InjectedMessage
{
public function __construct(public SimpleMessage $message)
{}
public function getInjectedMessage(): string
{
return "{$this->message->getMessage()} This is an injected class.";
}
}
// Context middleware for all routes
$app->use(function ($context, $next) {
$context->set(SimpleMessage::class, "Hello", "Dumbo!");
$context->set(
InjectedMessage::class,
new SimpleMessage('Hello', 'Dumbo!')
);
return $next($context);
});
$app->get("/", function ($context) {
$messageClass = $context->get(SimpleMessage::class);
$message = $messageClass->getMessage();
return $context->json([
"message" => $message,
]);
});
$app->get("/injection", function ($context) {
$injectedClass = $context->get(InjectedMessage::class);
$message = $injectedClass->getInjectedMessage();
return $context->json([
"message" => $message,
]);
});
Opening this up for discussion: what do you all think about the idea of introducing class instantiation directly into the context, like
$context->get(Foo::class, 'bar')
? I think this could be a really cool addition, but I also realize we might be edging toward implementing a service container. Not sure if that's necessarily a bad thing—thoughts?I have some code below, but feel free to pull my branch here for a demo.