Пример #1
0
 /**
  * Create classes from array
  *
  * @param  array $builderData
  * @return void
  */
 public function createClassesFromArray(array $builderData)
 {
     foreach ($builderData as $className => $classInfo) {
         $class = new Builder\PhpClass();
         $class->setName($className);
         foreach ($classInfo as $type => $typeData) {
             switch (strtolower($type)) {
                 case 'supertypes':
                     foreach ($typeData as $superType) {
                         $class->addSuperType($superType);
                     }
                     break;
                 case 'instantiator':
                     $class->setInstantiator($typeData);
                     break;
                 case 'methods':
                 case 'method':
                     foreach ($typeData as $injectionMethodName => $injectionMethodData) {
                         $injectionMethod = new Builder\InjectionMethod();
                         $injectionMethod->setName($injectionMethodName);
                         foreach ($injectionMethodData as $parameterName => $parameterType) {
                             $parameterType = $parameterType ?: null;
                             // force empty string to null
                             $injectionMethod->addParameter($parameterName, $parameterType);
                         }
                         $class->addInjectionMethod($injectionMethod);
                     }
                     break;
             }
         }
         $this->addClass($class);
     }
 }
Пример #2
0
 public function testBuilderCanBuildClassWithMethods()
 {
     $class = new Builder\PhpClass();
     $class->setName('Foo');
     $class->addSuperType('Parent');
     $injectionMethod = new Builder\InjectionMethod();
     $injectionMethod->setName('injectBar');
     $injectionMethod->addParameter('bar', 'Bar');
     $class->addInjectionMethod($injectionMethod);
     $definition = new BuilderDefinition();
     $definition->addClass($class);
     $this->assertTrue($definition->hasClass('Foo'));
     $this->assertEquals('__construct', $definition->getInstantiator('Foo'));
     $this->assertContains('Parent', $definition->getClassSupertypes('Foo'));
     $this->assertTrue($definition->hasMethods('Foo'));
     $this->assertTrue($definition->hasMethod('Foo', 'injectBar'));
     $this->assertContains('injectBar', $definition->getMethods('Foo'));
     $this->assertEquals(array('Foo::injectBar:0' => array('bar', 'Bar', true, null)), $definition->getMethodParameters('Foo', 'injectBar'));
 }
Пример #3
0
 /**
  * @param  string    $method
  * @param  mixed|bool|null $isRequired
  * @return self
  */
 public function addMethod($method, $isRequired = null)
 {
     if ($isRequired === null) {
         if ($method === '__construct') {
             $methodRequirementType = Di::METHOD_IS_CONSTRUCTOR;
         }
         $methodRequirementType = Di::METHOD_IS_OPTIONAL;
     } else {
         $methodRequirementType = InjectionMethod::detectMethodRequirement($isRequired);
     }
     $this->methods[$method] = $methodRequirementType;
     return $this;
 }
Пример #4
0
 /**
  * @param array $dataArray
  */
 public function __construct(array $dataArray)
 {
     foreach ($dataArray as $class => $value) {
         // force lower names
         $dataArray[$class] = array_change_key_case($dataArray[$class], CASE_LOWER);
     }
     foreach ($dataArray as $class => $definition) {
         if (isset($definition['methods']) && is_array($definition['methods'])) {
             foreach ($definition['methods'] as $type => $requirement) {
                 if (!is_int($requirement)) {
                     $dataArray[$class]['methods'][$type] = InjectionMethod::detectMethodRequirement($requirement);
                 }
             }
         }
     }
     $this->dataArray = $dataArray;
 }
Пример #5
0
    /**
     * @group nullargs
     */
    public function testNullArgumentsResultInEmptyMethodParameterList()
    {
        $this->markTestIncomplete('Null arguments are currently unsupported');
        $opt = new Builder\PhpClass();
        $opt->setName('ZendTest\Di\TestAsset\OptionalArg');
        $optCtor = new Builder\InjectionMethod();
        $optCtor->setName('__construct')
                ->addParameter('param', null);
        $optInject = new Builder\InjectionMethod();
        $optInject->setName('inject')
                  ->addParameter('param1', null)
                  ->addParameter('param2', null);
        $opt->addInjectionMethod($optCtor)
            ->addInjectionMethod($optInject);

        $def = new Definition();
        $def->addClass($opt);
        $this->di->setDefinition($def);

        $cfg = new Configuration(array(
            'instance' => array(
                'alias' => array('optional' => 'ZendTest\Di\TestAsset\OptionalArg'),
            ),
            'properties' => array(
                'ZendTest\Di\TestAsset\OptionalArg' => array(
                    'param'  => null,
                    'param1' => null,
                    'param2' => null,
                ),
            ),
        ));
        $cfg->configure($this->di);

        $builder = new ContainerGenerator($this->di);
        $builder->setContainerClass('Container');
        $codeGen = $builder->getCodeGenerator();
        $classBody = $codeGen->generate();
        $this->assertNotContains('NULL)', $classBody, $classBody);
    }