[HttpFoundation] moved File Component into the HttpFoundation one
This commit is contained in:
parent
fc9325a737
commit
a141c98917
@ -162,7 +162,7 @@ class Form extends FieldGroup
|
|||||||
* already merged into the data array.
|
* already merged into the data array.
|
||||||
*
|
*
|
||||||
* @param array $taintedValues The form data of the $_POST array
|
* @param array $taintedValues The form data of the $_POST array
|
||||||
* @param array $taintedFiles The form data of the $_FILES array
|
* @param array $taintedFiles An array of uploaded files
|
||||||
* @return boolean Whether the form is valid
|
* @return boolean Whether the form is valid
|
||||||
*/
|
*/
|
||||||
final public function bind($taintedValues, array $taintedFiles = null)
|
final public function bind($taintedValues, array $taintedFiles = null)
|
||||||
@ -173,8 +173,6 @@ class Form extends FieldGroup
|
|||||||
}
|
}
|
||||||
|
|
||||||
$taintedFiles = array();
|
$taintedFiles = array();
|
||||||
} else {
|
|
||||||
$taintedFiles = self::convertFileInformation(self::fixPhpFilesArray($taintedFiles));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $taintedValues) {
|
if (null === $taintedValues) {
|
||||||
@ -458,69 +456,4 @@ class Form extends FieldGroup
|
|||||||
|
|
||||||
return $array1;
|
return $array1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Fixes a malformed PHP $_FILES array.
|
|
||||||
*
|
|
||||||
* PHP has a bug that the format of the $_FILES array differs, depending on
|
|
||||||
* whether the uploaded file fields had normal field names or array-like
|
|
||||||
* field names ("normal" vs. "parent[child]").
|
|
||||||
*
|
|
||||||
* This method fixes the array to look like the "normal" $_FILES array.
|
|
||||||
*
|
|
||||||
* @param array $data
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
static protected function fixPhpFilesArray(array $data)
|
|
||||||
{
|
|
||||||
$fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
|
|
||||||
$keys = array_keys($data);
|
|
||||||
sort($keys);
|
|
||||||
|
|
||||||
$files = $data;
|
|
||||||
|
|
||||||
if ($fileKeys == $keys && isset($data['name']) && is_array($data['name'])) {
|
|
||||||
foreach ($fileKeys as $k) {
|
|
||||||
unset($files[$k]);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (array_keys($data['name']) as $key) {
|
|
||||||
$files[$key] = self::fixPhpFilesArray(array(
|
|
||||||
'error' => $data['error'][$key],
|
|
||||||
'name' => $data['name'][$key],
|
|
||||||
'type' => $data['type'][$key],
|
|
||||||
'tmp_name' => $data['tmp_name'][$key],
|
|
||||||
'size' => $data['size'][$key],
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $files;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts uploaded files to instances of clsas UploadedFile.
|
|
||||||
*
|
|
||||||
* @param array $files A (multi-dimensional) array of uploaded file information
|
|
||||||
* @return array A (multi-dimensional) array of UploadedFile instances
|
|
||||||
*/
|
|
||||||
static protected function convertFileInformation(array $files)
|
|
||||||
{
|
|
||||||
$fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
|
|
||||||
|
|
||||||
foreach ($files as $key => $data) {
|
|
||||||
if (is_array($data)) {
|
|
||||||
$keys = array_keys($data);
|
|
||||||
sort($keys);
|
|
||||||
|
|
||||||
if ($keys == $fileKeys) {
|
|
||||||
$files[$key] = new UploadedFile($data['tmp_name'], $data['name'], $data['type'], $data['size'], $data['error']);
|
|
||||||
} else {
|
|
||||||
$files[$key] = self::convertFileInformation($data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $files;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\Exception;
|
namespace Symfony\Component\HttpFoundation\File\Exception;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\Exception;
|
namespace Symfony\Component\HttpFoundation\File\Exception;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\Exception;
|
namespace Symfony\Component\HttpFoundation\File\Exception;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File;
|
namespace Symfony\Component\HttpFoundation\File;
|
||||||
|
|
||||||
use Symfony\Component\File\Exception\FileException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileException;
|
||||||
use Symfony\Component\File\Exception\FileNotFoundException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
|
||||||
use Symfony\Component\File\MimeType\MimeTypeGuesser;
|
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\MimeType;
|
namespace Symfony\Component\HttpFoundation\File\MimeType;
|
||||||
|
|
||||||
use Symfony\Component\File\Exception\FileNotFoundException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
|
||||||
use Symfony\Component\File\Exception\AccessDeniedException;
|
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\MimeType;
|
namespace Symfony\Component\HttpFoundation\File\MimeType;
|
||||||
|
|
||||||
use Symfony\Component\File\Exception\FileNotFoundException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
|
||||||
use Symfony\Component\File\Exception\AccessDeniedException;
|
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\MimeType;
|
namespace Symfony\Component\HttpFoundation\File\MimeType;
|
||||||
|
|
||||||
use Symfony\Component\File\Exception\FileNotFoundException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
|
||||||
use Symfony\Component\File\Exception\AccessDeniedException;
|
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\MimeType;
|
namespace Symfony\Component\HttpFoundation\File\MimeType;
|
||||||
|
|
||||||
use Symfony\Component\File\Exception\FileNotFoundException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException;
|
||||||
use Symfony\Component\File\Exception\AccessDeniedException;
|
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File\MimeType;
|
namespace Symfony\Component\HttpFoundation\File\MimeType;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Component\File;
|
namespace Symfony\Component\HttpFoundation\File;
|
||||||
|
|
||||||
use Symfony\Component\File\Exception\FileException;
|
use Symfony\Component\HttpFoundation\File\Exception\FileException;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the symfony package.
|
* This file is part of the symfony package.
|
@ -3,6 +3,7 @@
|
|||||||
namespace Symfony\Component\HttpFoundation;
|
namespace Symfony\Component\HttpFoundation;
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage;
|
use Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage;
|
||||||
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file is part of the Symfony package.
|
* This file is part of the Symfony package.
|
||||||
@ -846,19 +847,74 @@ class Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts uploaded file array to a format following the $_GET and $POST naming convention.
|
* Converts uploaded files to UploadedFile instances.
|
||||||
*
|
*
|
||||||
* It's safe to pass an already converted array, in which case this method just returns the original array unmodified.
|
* @param array $files A (multi-dimensional) array of uploaded file information
|
||||||
*
|
*
|
||||||
* @param array $taintedFiles An array representing uploaded file information
|
* @return array A (multi-dimensional) array of UploadedFile instances
|
||||||
*
|
|
||||||
* @return array An array of re-ordered uploaded file information
|
|
||||||
*/
|
*/
|
||||||
protected function convertFileInformation(array $taintedFiles)
|
protected function convertFileInformation(array $files)
|
||||||
{
|
{
|
||||||
$files = array();
|
$fixedFiles = array();
|
||||||
foreach ($taintedFiles as $key => $data) {
|
|
||||||
$files[$key] = $this->fixPhpFilesArray($data);
|
foreach ($files as $key => $data) {
|
||||||
|
$fixedFiles[$key] = $this->fixPhpFilesArray($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
|
||||||
|
foreach ($fixedFiles as $key => $data) {
|
||||||
|
if (is_array($data)) {
|
||||||
|
$keys = array_keys($data);
|
||||||
|
sort($keys);
|
||||||
|
|
||||||
|
if ($keys == $fileKeys) {
|
||||||
|
$fixedFiles[$key] = new UploadedFile($data['tmp_name'], $data['name'], $data['type'], $data['size'], $data['error']);
|
||||||
|
} else {
|
||||||
|
$fixedFiles[$key] = $this->convertFileInformation($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fixedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fixes a malformed PHP $_FILES array.
|
||||||
|
*
|
||||||
|
* PHP has a bug that the format of the $_FILES array differs, depending on
|
||||||
|
* whether the uploaded file fields had normal field names or array-like
|
||||||
|
* field names ("normal" vs. "parent[child]").
|
||||||
|
*
|
||||||
|
* This method fixes the array to look like the "normal" $_FILES array.
|
||||||
|
*
|
||||||
|
* It's safe to pass an already converted array, in which case this method
|
||||||
|
* just returns the original array unmodified.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function fixPhpFilesArray($data)
|
||||||
|
{
|
||||||
|
$fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
|
||||||
|
$keys = array_keys($data);
|
||||||
|
sort($keys);
|
||||||
|
|
||||||
|
if ($fileKeys != $keys || !isset($data['name']) || !is_array($data['name'])) {
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = $data;
|
||||||
|
foreach ($fileKeys as $k) {
|
||||||
|
unset($files[$k]);
|
||||||
|
}
|
||||||
|
foreach (array_keys($data['name']) as $key) {
|
||||||
|
$files[$key] = $this->fixPhpFilesArray(array(
|
||||||
|
'error' => $data['error'][$key],
|
||||||
|
'name' => $data['name'][$key],
|
||||||
|
'type' => $data['type'][$key],
|
||||||
|
'tmp_name' => $data['tmp_name'][$key],
|
||||||
|
'size' => $data['size'][$key],
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $files;
|
return $files;
|
||||||
@ -888,31 +944,4 @@ class Request
|
|||||||
'atom' => 'application/atom+xml',
|
'atom' => 'application/atom+xml',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static protected function fixPhpFilesArray($data)
|
|
||||||
{
|
|
||||||
$fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
|
|
||||||
$keys = array_keys($data);
|
|
||||||
sort($keys);
|
|
||||||
|
|
||||||
if ($fileKeys != $keys || !isset($data['name']) || !is_array($data['name'])) {
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
$files = $data;
|
|
||||||
foreach ($fileKeys as $k) {
|
|
||||||
unset($files[$k]);
|
|
||||||
}
|
|
||||||
foreach (array_keys($data['name']) as $key) {
|
|
||||||
$files[$key] = self::fixPhpFilesArray(array(
|
|
||||||
'error' => $data['error'][$key],
|
|
||||||
'name' => $data['name'][$key],
|
|
||||||
'type' => $data['type'][$key],
|
|
||||||
'tmp_name' => $data['tmp_name'][$key],
|
|
||||||
'size' => $data['size'][$key],
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $files;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ use Symfony\Component\Validator\Constraint;
|
|||||||
use Symfony\Component\Validator\ConstraintValidator;
|
use Symfony\Component\Validator\ConstraintValidator;
|
||||||
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
|
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
|
||||||
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
|
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
|
||||||
use Symfony\Component\File\File as FileObject;
|
use Symfony\Component\HttpFoundation\File\File as FileObject;
|
||||||
|
|
||||||
class FileValidator extends ConstraintValidator
|
class FileValidator extends ConstraintValidator
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,6 @@ use Symfony\Component\Form\HiddenField;
|
|||||||
use Symfony\Component\Form\FieldGroup;
|
use Symfony\Component\Form\FieldGroup;
|
||||||
use Symfony\Component\Form\HtmlGenerator;
|
use Symfony\Component\Form\HtmlGenerator;
|
||||||
use Symfony\Component\Form\PropertyPath;
|
use Symfony\Component\Form\PropertyPath;
|
||||||
use Symfony\Component\File\UploadedFile;
|
|
||||||
use Symfony\Component\Validator\ConstraintViolation;
|
use Symfony\Component\Validator\ConstraintViolation;
|
||||||
use Symfony\Component\Validator\ConstraintViolationList;
|
use Symfony\Component\Validator\ConstraintViolationList;
|
||||||
use Symfony\Tests\Component\Form\Fixtures\Author;
|
use Symfony\Tests\Component\Form\Fixtures\Author;
|
||||||
@ -220,99 +219,6 @@ class FormTest extends \PHPUnit_Framework_TestCase
|
|||||||
$form->bind(array()); // irrelevant
|
$form->bind(array()); // irrelevant
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testBindConvertsUploadedFiles()
|
|
||||||
{
|
|
||||||
$tmpFile = $this->createTempFile();
|
|
||||||
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
|
|
||||||
|
|
||||||
$field = $this->createMockField('file');
|
|
||||||
$field->expects($this->once())
|
|
||||||
->method('bind')
|
|
||||||
->with($this->equalTo($file));
|
|
||||||
|
|
||||||
$form = new Form('author', new Author(), $this->validator);
|
|
||||||
$form->add($field);
|
|
||||||
|
|
||||||
// test
|
|
||||||
$form->bind(array(), array('file' => array(
|
|
||||||
'name' => basename($tmpFile),
|
|
||||||
'type' => 'text/plain',
|
|
||||||
'tmp_name' => $tmpFile,
|
|
||||||
'error' => 0,
|
|
||||||
'size' => 100
|
|
||||||
)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBindConvertsUploadedFilesWithPhpBug()
|
|
||||||
{
|
|
||||||
$tmpFile = $this->createTempFile();
|
|
||||||
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
|
|
||||||
|
|
||||||
$field = $this->createMockField('file');
|
|
||||||
$field->expects($this->once())
|
|
||||||
->method('bind')
|
|
||||||
->with($this->equalTo($file));
|
|
||||||
|
|
||||||
$form = new Form('author', new Author(), $this->validator);
|
|
||||||
$form->add($field);
|
|
||||||
|
|
||||||
// test
|
|
||||||
$form->bind(array(), array(
|
|
||||||
'name' => array(
|
|
||||||
'file' => basename($tmpFile),
|
|
||||||
),
|
|
||||||
'type' => array(
|
|
||||||
'file' => 'text/plain',
|
|
||||||
),
|
|
||||||
'tmp_name' => array(
|
|
||||||
'file' => $tmpFile,
|
|
||||||
),
|
|
||||||
'error' => array(
|
|
||||||
'file' => 0,
|
|
||||||
),
|
|
||||||
'size' => array(
|
|
||||||
'file' => 100,
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBindConvertsNestedUploadedFilesWithPhpBug()
|
|
||||||
{
|
|
||||||
$tmpFile = $this->createTempFile();
|
|
||||||
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
|
|
||||||
|
|
||||||
$group = $this->getMock(
|
|
||||||
'Symfony\Component\Form\FieldGroup',
|
|
||||||
array('bind'),
|
|
||||||
array('child', array('property_path' => null))
|
|
||||||
);
|
|
||||||
$group->expects($this->once())
|
|
||||||
->method('bind')
|
|
||||||
->with($this->equalTo(array('file' => $file)));
|
|
||||||
|
|
||||||
$form = new Form('author', new Author(), $this->validator);
|
|
||||||
$form->add($group);
|
|
||||||
|
|
||||||
// test
|
|
||||||
$form->bind(array(), array(
|
|
||||||
'name' => array(
|
|
||||||
'child' => array('file' => basename($tmpFile)),
|
|
||||||
),
|
|
||||||
'type' => array(
|
|
||||||
'child' => array('file' => 'text/plain'),
|
|
||||||
),
|
|
||||||
'tmp_name' => array(
|
|
||||||
'child' => array('file' => $tmpFile),
|
|
||||||
),
|
|
||||||
'error' => array(
|
|
||||||
'child' => array('file' => 0),
|
|
||||||
),
|
|
||||||
'size' => array(
|
|
||||||
'child' => array('file' => 100),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMultipartFormsWithoutParentsRequireFiles()
|
public function testMultipartFormsWithoutParentsRequireFiles()
|
||||||
{
|
{
|
||||||
$form = new Form('author', new Author(), $this->validator);
|
$form = new Form('author', new Author(), $this->validator);
|
||||||
@ -405,11 +311,6 @@ class FormTest extends \PHPUnit_Framework_TestCase
|
|||||||
return $field;
|
return $field;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function createTempFile()
|
|
||||||
{
|
|
||||||
return tempnam(sys_get_temp_dir(), 'FormTest');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function createMockValidator()
|
protected function createMockValidator()
|
||||||
{
|
{
|
||||||
return $this->getMock('Symfony\Component\Validator\ValidatorInterface');
|
return $this->getMock('Symfony\Component\Validator\ValidatorInterface');
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Tests\Component\File;
|
namespace Symfony\Tests\Component\HttpFoundation\File;
|
||||||
|
|
||||||
use Symfony\Component\File\File;
|
use Symfony\Component\HttpFoundation\File\File;
|
||||||
use Symfony\Component\File\MimeType\MimeTypeGuesser;
|
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser;
|
||||||
|
|
||||||
|
|
||||||
class FileTest extends \PHPUnit_Framework_TestCase
|
class FileTest extends \PHPUnit_Framework_TestCase
|
||||||
@ -61,7 +61,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
protected function createMockGuesser($path, $mimeType)
|
protected function createMockGuesser($path, $mimeType)
|
||||||
{
|
{
|
||||||
$guesser = $this->getMock('Symfony\Component\File\MimeType\MimeTypeGuesserInterface');
|
$guesser = $this->getMock('Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface');
|
||||||
$guesser->expects($this->once())
|
$guesser->expects($this->once())
|
||||||
->method('guess')
|
->method('guess')
|
||||||
->with($this->equalTo($path))
|
->with($this->equalTo($path))
|
Before Width: | Height: | Size: 35 B After Width: | Height: | Size: 35 B |
Before Width: | Height: | Size: 35 B After Width: | Height: | Size: 35 B |
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Symfony\Tests\Component\File;
|
namespace Symfony\Tests\Component\HttpFoundation\File;
|
||||||
|
|
||||||
use Symfony\Component\File\UploadedFile;
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||||
|
|
||||||
|
|
||||||
class UploadedFileTest extends \PHPUnit_Framework_TestCase
|
class UploadedFileTest extends \PHPUnit_Framework_TestCase
|
||||||
@ -11,7 +11,7 @@ class UploadedFileTest extends \PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
// we can't change this setting without modifying php.ini :(
|
// we can't change this setting without modifying php.ini :(
|
||||||
if (!ini_get('file_uploads')) {
|
if (!ini_get('file_uploads')) {
|
||||||
$this->setExpectedException('Symfony\Component\File\Exception\FileException');
|
$this->setExpectedException('Symfony\Component\HttpFoundation\File\Exception\FileException');
|
||||||
|
|
||||||
new UploadedFile(
|
new UploadedFile(
|
||||||
__DIR__.'/Fixtures/test.gif',
|
__DIR__.'/Fixtures/test.gif',
|
@ -12,6 +12,7 @@
|
|||||||
namespace Symfony\Tests\Component\HttpFoundation;
|
namespace Symfony\Tests\Component\HttpFoundation;
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\File\UploadedFile;
|
||||||
|
|
||||||
class RequestTest extends \PHPUnit_Framework_TestCase
|
class RequestTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
@ -107,4 +108,83 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
|||||||
$request->server->set('QUERY_STRING', 'foo=1&foo=2');
|
$request->server->set('QUERY_STRING', 'foo=1&foo=2');
|
||||||
$this->assertEquals('foo=1&foo=2', $request->getQueryString(), '->getQueryString() allows repeated parameters');
|
$this->assertEquals('foo=1&foo=2', $request->getQueryString(), '->getQueryString() allows repeated parameters');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testInitializeConvertsUploadedFiles()
|
||||||
|
{
|
||||||
|
$tmpFile = $this->createTempFile();
|
||||||
|
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
|
||||||
|
|
||||||
|
$request = Request::create('', 'get', array(), array(), array('file' => array(
|
||||||
|
'name' => basename($tmpFile),
|
||||||
|
'type' => 'text/plain',
|
||||||
|
'tmp_name' => $tmpFile,
|
||||||
|
'error' => 0,
|
||||||
|
'size' => 100
|
||||||
|
)));
|
||||||
|
|
||||||
|
$this->assertEquals($file, $request->files->get('file'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInitializeConvertsUploadedFilesWithPhpBug()
|
||||||
|
{
|
||||||
|
$tmpFile = $this->createTempFile();
|
||||||
|
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
|
||||||
|
|
||||||
|
$request = Request::create('', 'get', array(), array(), array(
|
||||||
|
'child' => array(
|
||||||
|
'name' => array(
|
||||||
|
'file' => basename($tmpFile),
|
||||||
|
),
|
||||||
|
'type' => array(
|
||||||
|
'file' => 'text/plain',
|
||||||
|
),
|
||||||
|
'tmp_name' => array(
|
||||||
|
'file' => $tmpFile,
|
||||||
|
),
|
||||||
|
'error' => array(
|
||||||
|
'file' => 0,
|
||||||
|
),
|
||||||
|
'size' => array(
|
||||||
|
'file' => 100,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
|
$files = $request->files->all();
|
||||||
|
$this->assertEquals($file, $files['child']['file']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInitializeConvertsNestedUploadedFilesWithPhpBug()
|
||||||
|
{
|
||||||
|
$tmpFile = $this->createTempFile();
|
||||||
|
$file = new UploadedFile($tmpFile, basename($tmpFile), 'text/plain', 100, 0);
|
||||||
|
|
||||||
|
$request = Request::create('', 'get', array(), array(), array(
|
||||||
|
'child' => array(
|
||||||
|
'name' => array(
|
||||||
|
'sub' => array('file' => basename($tmpFile))
|
||||||
|
),
|
||||||
|
'type' => array(
|
||||||
|
'sub' => array('file' => 'text/plain')
|
||||||
|
),
|
||||||
|
'tmp_name' => array(
|
||||||
|
'sub' => array('file' => $tmpFile)
|
||||||
|
),
|
||||||
|
'error' => array(
|
||||||
|
'sub' => array('file' => 0)
|
||||||
|
),
|
||||||
|
'size' => array(
|
||||||
|
'sub' => array('file' => 100)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
|
$files = $request->files->all();
|
||||||
|
$this->assertEquals($file, $files['child']['sub']['file']);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function createTempFile()
|
||||||
|
{
|
||||||
|
return tempnam(sys_get_temp_dir(), 'FormTest');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testValidMimeType()
|
public function testValidMimeType()
|
||||||
{
|
{
|
||||||
$file = $this->getMock('Symfony\Component\File\File', array(), array(), '', false);
|
$file = $this->getMock('Symfony\Component\HttpFoundation\File\File', array(), array(), '', false);
|
||||||
$file->expects($this->any())
|
$file->expects($this->any())
|
||||||
->method('getPath')
|
->method('getPath')
|
||||||
->will($this->returnValue($this->path));
|
->will($this->returnValue($this->path));
|
||||||
@ -137,7 +137,7 @@ class FileValidatorTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testInvalidMimeType()
|
public function testInvalidMimeType()
|
||||||
{
|
{
|
||||||
$file = $this->getMock('Symfony\Component\File\File', array(), array(), '', false);
|
$file = $this->getMock('Symfony\Component\HttpFoundation\File\File', array(), array(), '', false);
|
||||||
$file->expects($this->any())
|
$file->expects($this->any())
|
||||||
->method('getPath')
|
->method('getPath')
|
||||||
->will($this->returnValue($this->path));
|
->will($this->returnValue($this->path));
|
||||||
|
Reference in New Issue
Block a user