class DiactorosFactory in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/symfony/psr-http-message-bridge/Factory/DiactorosFactory.php \Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory
 
Builds Psr\HttpMessage instances using the Zend Diactoros implementation.
@author Kévin Dunglas <dunglas@gmail.com>
Hierarchy
- class \Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory implements HttpMessageFactoryInterface
 
Expanded class hierarchy of DiactorosFactory
2 files declare their use of DiactorosFactory
- ControllerResolverTest.php in core/
tests/ Drupal/ Tests/ Core/ Controller/ ControllerResolverTest.php  - Contains \Drupal\Tests\Core\Controller\ControllerResolverTest.
 - DiactorosFactoryTest.php in vendor/
symfony/ psr-http-message-bridge/ Tests/ Factory/ DiactorosFactoryTest.php  
1 string reference to 'DiactorosFactory'
- core.services.yml in core/
core.services.yml  - core/core.services.yml
 
1 service uses DiactorosFactory
File
- vendor/
symfony/ psr-http-message-bridge/ Factory/ DiactorosFactory.php, line 31  
Namespace
Symfony\Bridge\PsrHttpMessage\FactoryView source
class DiactorosFactory implements HttpMessageFactoryInterface {
  public function __construct() {
    if (!class_exists('Zend\\Diactoros\\ServerRequestFactory')) {
      throw new \RuntimeException('Zend Diactoros must be installed to use the DiactorosFactory.');
    }
  }
  /**
   * {@inheritdoc}
   */
  public function createRequest(Request $symfonyRequest) {
    $server = DiactorosRequestFactory::normalizeServer($symfonyRequest->server
      ->all());
    $headers = $symfonyRequest->headers
      ->all();
    try {
      $body = new DiactorosStream($symfonyRequest
        ->getContent(true));
    } catch (\LogicException $e) {
      $body = new DiactorosStream('php://temp', 'wb+');
      $body
        ->write($symfonyRequest
        ->getContent());
    }
    $request = new ServerRequest($server, DiactorosRequestFactory::normalizeFiles($this
      ->getFiles($symfonyRequest->files
      ->all())), $symfonyRequest
      ->getUri(), $symfonyRequest
      ->getMethod(), $body, $headers);
    $request = $request
      ->withCookieParams($symfonyRequest->cookies
      ->all())
      ->withQueryParams($symfonyRequest->query
      ->all())
      ->withParsedBody($symfonyRequest->request
      ->all());
    foreach ($symfonyRequest->attributes
      ->all() as $key => $value) {
      $request = $request
        ->withAttribute($key, $value);
    }
    return $request;
  }
  /**
   * Converts Symfony uploaded files array to the PSR one.
   *
   * @param array $uploadedFiles
   *
   * @return array
   */
  private function getFiles(array $uploadedFiles) {
    $files = array();
    foreach ($uploadedFiles as $key => $value) {
      if ($value instanceof UploadedFile) {
        $files[$key] = $this
          ->createUploadedFile($value);
      }
      else {
        $files[$key] = $this
          ->getFiles($value);
      }
    }
    return $files;
  }
  /**
   * Creates a PSR-7 UploadedFile instance from a Symfony one.
   *
   * @param UploadedFile $symfonyUploadedFile
   *
   * @return UploadedFileInterface
   */
  private function createUploadedFile(UploadedFile $symfonyUploadedFile) {
    return new DiactorosUploadedFile($symfonyUploadedFile
      ->getRealPath(), $symfonyUploadedFile
      ->getSize(), $symfonyUploadedFile
      ->getError(), $symfonyUploadedFile
      ->getClientOriginalName(), $symfonyUploadedFile
      ->getClientMimeType());
  }
  /**
   * {@inheritdoc}
   */
  public function createResponse(Response $symfonyResponse) {
    if ($symfonyResponse instanceof BinaryFileResponse) {
      $stream = new DiactorosStream($symfonyResponse
        ->getFile()
        ->getPathname(), 'r');
    }
    else {
      $stream = new DiactorosStream('php://temp', 'wb+');
      if ($symfonyResponse instanceof StreamedResponse) {
        ob_start(function ($buffer) use ($stream) {
          $stream
            ->write($buffer);
          return false;
        });
        $symfonyResponse
          ->sendContent();
        ob_end_clean();
      }
      else {
        $stream
          ->write($symfonyResponse
          ->getContent());
      }
    }
    $headers = $symfonyResponse->headers
      ->all();
    $cookies = $symfonyResponse->headers
      ->getCookies();
    if (!empty($cookies)) {
      $headers['Set-Cookie'] = array();
      foreach ($cookies as $cookie) {
        $headers['Set-Cookie'][] = $cookie
          ->__toString();
      }
    }
    $response = new DiactorosResponse($stream, $symfonyResponse
      ->getStatusCode(), $headers);
    $protocolVersion = $symfonyResponse
      ->getProtocolVersion();
    if ('1.1' !== $protocolVersion) {
      $response = $response
        ->withProtocolVersion($protocolVersion);
    }
    return $response;
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            DiactorosFactory:: | 
                  public | function | 
            Creates a PSR-7 Request instance from a Symfony one. Overrides HttpMessageFactoryInterface:: | 
                  |
| 
            DiactorosFactory:: | 
                  public | function | 
            Creates a PSR-7 Response instance from a Symfony one. Overrides HttpMessageFactoryInterface:: | 
                  |
| 
            DiactorosFactory:: | 
                  private | function | Creates a PSR-7 UploadedFile instance from a Symfony one. | |
| 
            DiactorosFactory:: | 
                  private | function | Converts Symfony uploaded files array to the PSR one. | |
| 
            DiactorosFactory:: | 
                  public | function |