123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
-
- namespace JMS\DiExtraBundle\Metadata\Driver;
-
- use JMS\DiExtraBundle\Metadata\ClassMetadata;
-
- use Metadata\Driver\DriverInterface;
-
- class ConfiguredControllerInjectionsDriver implements DriverInterface
- {
- private $delegate;
- private $propertyInjections;
- private $methodInjections;
-
- public function __construct(DriverInterface $driver, array $propertyInjections, array $methodInjections)
- {
- $this->delegate = $driver;
- $this->propertyInjections = $propertyInjections;
- $this->methodInjections = $methodInjections;
- }
-
- public function loadMetadataForClass(\ReflectionClass $class)
- {
- $metadata = $this->delegate->loadMetadataForClass($class);
-
- if (!preg_match('/Controller\\\(.+)Controller$/', $class->name)) {
- return $metadata;
- }
-
- if (null === $metadata) {
- $metadata = new ClassMetadata($class->name);
- }
-
- foreach ($metadata->reflection->getProperties() as $property) {
- // explicit injection configured?
- if (isset($metadata->properties[$property->name])) {
- continue;
- }
-
- // automatic injection configured?
- if (!isset($this->propertyInjections[$property->name])) {
- continue;
- }
-
- if ($property->getDeclaringClass()->name !== $class->name) {
- continue;
- }
-
- $metadata->properties[$property->name] = $this->propertyInjections[$property->name];
- }
-
- foreach ($metadata->reflection->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
- // explicit injection configured?
- foreach ($metadata->methodCalls as $call) {
- if ($call[0] === $method->name) {
- continue 2;
- }
- }
-
- // automatic injection configured?
- if (!isset($this->methodInjections[$method->name])) {
- continue;
- }
-
- if ($method->getDeclaringClass()->name !== $class->name) {
- continue;
- }
-
- $metadata->methodCalls[] = array($method->name, $this->methodInjections[$method->name]);
- }
-
- return $metadata->properties || $metadata->methodCalls || $metadata->lookupMethods ? $metadata : null;
- }
- }
|