ideas
ideas copied to clipboard
Set property to a config value via an Attribute
Ability to set a property of an object to some config value when the object is constructed by the Container. API would look something like this:
class FooController extends Controller
{
#[Config('app.url')]
protected $appUrl;
#[Config('foo.bar', 'some default value')]
protected $fooBar;
}
Proof of concept:
- Create a Config attribute:
#[Attribute(Attribute::TARGET_PROPERTY)]
class Config {
public function __construct($key, $default = null)
{
}
}
- Change the last line in
Illuminate\Container\Container::build()
- return $reflector->newInstanceArgs($instances);
+ $object = $reflector->newInstanceArgs($instances);
+
+ foreach($reflector->getProperties() as $property) {
+ foreach($property->getAttributes() as $attribute) {
+ if($attribute->getName() == Config::class) {
+ $property->setAccessible(true);
+ $property->setValue($object, call_user_func_array('config', $attribute->getArguments()));
+ }
+ }
+ }
+
+ return $object;
- Use the Attribute in a controller and see that the property value has been set to a value from app configuration.
What do you think?
@taylorotwell Can I get your opinion about this?