예제 #1
0
 /**
  * Resolves proxy class name to a filename based on the following pattern.
  *
  * 1. Remove Proxy namespace from class name.
  * 2. Remove namespace separators from remaining class name.
  * 3. Return PHP filename from proxy-dir with the result from 2.
  *
  * @param string $proxyDir
  * @param string $proxyNamespace
  * @param string $className
  *
  * @return string
  *
  * @throws InvalidArgumentException
  */
 public static function resolveFile($proxyDir, $proxyNamespace, $className)
 {
     if (0 !== strpos($className, $proxyNamespace)) {
         throw InvalidArgumentException::notProxyClass($className, $proxyNamespace);
     }
     $className = str_replace('\\', '', substr($className, strlen($proxyNamespace) + 1));
     return $proxyDir . DIRECTORY_SEPARATOR . $className . '.php';
 }
 /**
  * Registers and returns autoloader callback for the given proxy dir and namespace.
  *
  * @param string        $proxyDir
  * @param string        $proxyNamespace
  * @param callable|null $notFoundCallback Invoked when the proxy file is not found.
  *
  * @return \Closure
  *
  * @throws InvalidArgumentException
  */
 public static function register($proxyDir, $proxyNamespace, $notFoundCallback = null)
 {
     $proxyNamespace = ltrim($proxyNamespace, '\\');
     if (!(null === $notFoundCallback || is_callable($notFoundCallback))) {
         throw InvalidArgumentException::invalidClassNotFoundCallback($notFoundCallback);
     }
     $autoloader = function ($className) use($proxyDir, $proxyNamespace, $notFoundCallback) {
         if (0 === strpos($className, $proxyNamespace)) {
             $file = Autoloader::resolveFile($proxyDir, $proxyNamespace, $className);
             if ($notFoundCallback && !file_exists($file)) {
                 call_user_func($notFoundCallback, $proxyDir, $proxyNamespace, $className);
             }
             require $file;
         }
     };
     spl_autoload_register($autoloader);
     return $autoloader;
 }
 /**
  * Sets a placeholder to be replaced in the template.
  *
  * @param string          $name
  * @param string|callable $placeholder
  *
  * @throws InvalidArgumentException
  */
 public function setPlaceholder($name, $placeholder)
 {
     if (!is_string($placeholder) && !is_callable($placeholder)) {
         throw InvalidArgumentException::invalidPlaceholder($name);
     }
     $this->placeholders[$name] = $placeholder;
 }
예제 #4
0
 /**
  * Reset initialization/cloning logic for an un-initialized proxy
  *
  * @param \Doctrine\Common\Proxy\Proxy $proxy
  *
  * @return \Doctrine\Common\Proxy\Proxy
  *
  * @throws \Doctrine\Common\Proxy\Exception\InvalidArgumentException
  */
 public function resetUninitializedProxy(Proxy $proxy)
 {
     if ($proxy->__isInitialized()) {
         throw InvalidArgumentException::unitializedProxyExpected($proxy);
     }
     $className = ClassUtils::getClass($proxy);
     $definition = isset($this->definitions[$className]) ? $this->definitions[$className] : $this->getProxyDefinition($className);
     $proxy->__setInitializer($definition->initializer);
     $proxy->__setCloner($definition->cloner);
     return $proxy;
 }