/** * Creates a fresh instance of the object specified by $objectName. * * This factory method can only create objects of the scope prototype. * Singleton objects must be either injected by some type of Dependency Injection or * if that is not possible, be retrieved by the getObject() method of the * Object Manager * * You must use either Dependency Injection or this factory method for instantiation * of your objects if you need FLOW3's object management capabilities (including * AOP, Security and Persistence). It is absolutely okay and often advisable to * use the "new" operator for instantiation in your automated tests. * * @param string $objectName The name of the object to create * @return object The new object instance * @throws \InvalidArgumentException if the object name starts with a backslash * @throws \F3\FLOW3\Object\Exception\UnknownObjectException if an object with the given name does not exist * @throws \F3\FLOW3\Object\Exception\WrongScopeException if the specified object is not configured as Prototype * @author Robert Lemke <*****@*****.**> * @api */ public function create($objectName) { if ($objectName[0] === '\\') { throw new \InvalidArgumentException('The object name must not start with a backslash, "' . $objectName . '" given.', 1243272770); } if (!$this->objectManager->isObjectRegistered($objectName)) { throw new \F3\FLOW3\Object\Exception\UnknownObjectException('Object "' . $objectName . '" is not registered.', 1166550023); } $objectConfiguration = $this->objectManager->getObjectConfiguration($objectName); if ($objectConfiguration->getScope() != 'prototype') { throw new \F3\FLOW3\Object\Exception\WrongScopeException('Object "' . $objectName . '" is of scope ' . $objectConfiguration->getScope() . ' but only prototype is supported by create()', 1225385285); } $overridingArguments = self::convertArgumentValuesToArgumentObjects(array_slice(func_get_args(), 1)); $object = $this->objectBuilder->createObject($objectName, $objectConfiguration, $overridingArguments); $this->objectManager->registerShutdownObject($object, $objectConfiguration->getLifecycleShutdownMethodName()); return $object; }