merged 2.0
This commit is contained in:
commit
ac5b8a4c37
@ -42,6 +42,12 @@ class FirePHPHandler extends BaseFirePHPHandler
|
||||
return;
|
||||
}
|
||||
|
||||
if (!preg_match('{\bFirePHP/\d+\.\d+\b}', $event->getRequest()->headers->get('User-Agent'))) {
|
||||
$this->sendHeaders = false;
|
||||
$this->headers = array();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->response = $event->getResponse();
|
||||
foreach ($this->headers as $header => $content) {
|
||||
$this->response->headers->set($header, $content);
|
||||
@ -54,10 +60,22 @@ class FirePHPHandler extends BaseFirePHPHandler
|
||||
*/
|
||||
protected function sendHeader($header, $content)
|
||||
{
|
||||
if (!$this->sendHeaders) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->response) {
|
||||
$this->response->headers->set($header, $content);
|
||||
} else {
|
||||
$this->headers[$header] = $content;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Override default behavior since we check the user agent in onKernelResponse
|
||||
*/
|
||||
protected function headersAccepted()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ abstract class FrameworkExtensionTest extends TestCase
|
||||
|
||||
$this->assertTrue($container->hasDefinition('templating.name_parser'), '->registerTemplatingConfiguration() loads templating.xml');
|
||||
|
||||
$this->assertEquals('request', $container->getDefinition('templating.helper.assets')->getScope(), '->registerTemplatingConfiguration() sets request scope on assets helper if one or more packages are request-scopes');
|
||||
$this->assertEquals('request', $container->getDefinition('templating.helper.assets')->getScope(), '->registerTemplatingConfiguration() sets request scope on assets helper if one or more packages are request-scoped');
|
||||
|
||||
// default package should have one http base url and path package ssl url
|
||||
$this->assertTrue($container->hasDefinition('templating.asset.default_package.http'));
|
||||
@ -130,7 +130,7 @@ abstract class FrameworkExtensionTest extends TestCase
|
||||
{
|
||||
$container = $this->createContainerFromFile('templating_url_package');
|
||||
|
||||
$this->assertNotEquals('request', $container->getDefinition('templating.helper.assets')->getScope(), '->registerTemplatingConfiguration() does not set request scope on assets helper if no packages are request-scopes');
|
||||
$this->assertNotEquals('request', $container->getDefinition('templating.helper.assets')->getScope(), '->registerTemplatingConfiguration() does not set request scope on assets helper if no packages are request-scoped');
|
||||
}
|
||||
|
||||
public function testTranslator()
|
||||
|
@ -1021,7 +1021,7 @@ EOF;
|
||||
$code = str_replace('%%', '%', preg_replace_callback('/(?<!%)(%)([^%]+)\1/', $replaceParameters, var_export($value, true)));
|
||||
|
||||
// optimize string
|
||||
$code = preg_replace(array("/^''\./", "/\.''$/", "/'\.'/", "/\.''\./"), array('', '', '', '.'), $code);
|
||||
$code = preg_replace(array("/^''\./", "/\.''$/", "/(\w+)(?:'\.')/", "/(.+)(?:\.''\.)/"), array('', '', '$1', '$1.'), $code);
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
@ -106,7 +106,10 @@ class SimpleXMLElement extends \SimpleXMLElement
|
||||
case 'null' === $lowercaseValue:
|
||||
return null;
|
||||
case ctype_digit($value):
|
||||
return '0' == $value[0] ? octdec($value) : intval($value);
|
||||
$raw = $value;
|
||||
$cast = intval($value);
|
||||
|
||||
return '0' == $value[0] ? octdec($value) : (((string) $raw == (string) $cast) ? $cast : $raw);
|
||||
case 'true' === $lowercaseValue:
|
||||
return true;
|
||||
case 'false' === $lowercaseValue:
|
||||
|
@ -28,15 +28,16 @@ class File extends \SplFileInfo
|
||||
/**
|
||||
* Constructs a new file from the given path.
|
||||
*
|
||||
* @param string $path The path to the file
|
||||
* @param string $path The path to the file
|
||||
* @param Boolean $checkPath Whether to check the path or not
|
||||
*
|
||||
* @throws FileNotFoundException If the given path is not a file
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function __construct($path)
|
||||
public function __construct($path, $checkPath = true)
|
||||
{
|
||||
if (!is_file($path)) {
|
||||
if ($checkPath && !is_file($path)) {
|
||||
throw new FileNotFoundException($path);
|
||||
}
|
||||
|
||||
|
@ -100,9 +100,7 @@ class UploadedFile extends File
|
||||
$this->error = $error ?: UPLOAD_ERR_OK;
|
||||
$this->test = (Boolean) $test;
|
||||
|
||||
if (UPLOAD_ERR_OK === $this->error) {
|
||||
parent::__construct($path);
|
||||
}
|
||||
parent::__construct($path, UPLOAD_ERR_OK === $this->error);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1091,9 +1091,9 @@ class Request
|
||||
$values = array();
|
||||
foreach (array_filter(explode(',', $header)) as $value) {
|
||||
// Cut off any q-value that might come after a semi-colon
|
||||
if ($pos = strpos($value, ';')) {
|
||||
$q = (float) trim(substr($value, strpos($value, '=') + 1));
|
||||
$value = trim(substr($value, 0, $pos));
|
||||
if (preg_match('/;\s*(q=.*$)/', $value, $match)) {
|
||||
$q = (float) substr(trim($match[1]), 2);
|
||||
$value = trim(substr($value, 0, -strlen($match[0])));
|
||||
} else {
|
||||
$q = 1;
|
||||
}
|
||||
|
@ -143,7 +143,6 @@ class PdoSessionStorage extends NativeSessionStorage
|
||||
$sql = "DELETE FROM $dbTable WHERE $dbTimeCol < (:time - $lifetime)";
|
||||
|
||||
try {
|
||||
$this->db->query($sql);
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->bindValue(':time', time(), \PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
@ -182,7 +181,7 @@ class PdoSessionStorage extends NativeSessionStorage
|
||||
$sessionRows = $stmt->fetchAll(\PDO::FETCH_NUM);
|
||||
|
||||
if (count($sessionRows) == 1) {
|
||||
return $sessionRows[0][0];
|
||||
return base64_decode($sessionRows[0][0]);
|
||||
}
|
||||
|
||||
// session does not exist, create it
|
||||
@ -218,9 +217,11 @@ class PdoSessionStorage extends NativeSessionStorage
|
||||
: "UPDATE $dbTable SET $dbDataCol = :data, $dbTimeCol = :time WHERE $dbIdCol = :id";
|
||||
|
||||
try {
|
||||
//session data can contain non binary safe characters so we need to encode it
|
||||
$encoded = base64_encode($data);
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->bindParam(':id', $id, \PDO::PARAM_STR);
|
||||
$stmt->bindParam(':data', $data, \PDO::PARAM_STR);
|
||||
$stmt->bindParam(':data', $encoded, \PDO::PARAM_STR);
|
||||
$stmt->bindValue(':time', time(), \PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
|
||||
@ -252,9 +253,11 @@ class PdoSessionStorage extends NativeSessionStorage
|
||||
|
||||
$sql = "INSERT INTO $dbTable ($dbIdCol, $dbDataCol, $dbTimeCol) VALUES (:id, :data, :time)";
|
||||
|
||||
//session data can contain non binary safe characters so we need to encode it
|
||||
$encoded = base64_encode($data);
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->bindParam(':id', $id, \PDO::PARAM_STR);
|
||||
$stmt->bindParam(':data', $data, \PDO::PARAM_STR);
|
||||
$stmt->bindParam(':data', $encoded, \PDO::PARAM_STR);
|
||||
$stmt->bindValue(':time', time(), \PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
|
||||
|
@ -230,12 +230,12 @@ class Filesystem
|
||||
foreach ($iterator as $file) {
|
||||
$target = $targetDir.'/'.str_replace($originDir.DIRECTORY_SEPARATOR, '', $file->getPathname());
|
||||
|
||||
if (is_dir($file)) {
|
||||
if (is_link($file)) {
|
||||
$this->symlink($file, $target);
|
||||
} else if (is_dir($file)) {
|
||||
$this->mkdir($target);
|
||||
} else if (is_file($file) || ($copyOnWindows && is_link($file))) {
|
||||
$this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
|
||||
} else if (is_link($file)) {
|
||||
$this->symlink($file, $target);
|
||||
} else {
|
||||
throw new \RuntimeException(sprintf('Unable to guess "%s" file type.', $file));
|
||||
}
|
||||
|
@ -44,7 +44,6 @@ class RouteCollection implements \IteratorAggregate
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
$parent = $this;
|
||||
foreach ($this->routes as $name => $route) {
|
||||
$this->routes[$name] = clone $route;
|
||||
if ($route instanceof RouteCollection) {
|
||||
|
@ -15,6 +15,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
|
||||
class PhpDumperTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
@ -33,7 +34,34 @@ class PhpDumperTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services1-1.php', $dumper->dump(array('class' => 'Container', 'base_class' => 'AbstractContainer')), '->dump() takes a class and a base_class options');
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
new PhpDumper($container);
|
||||
}
|
||||
|
||||
public function testDumpOptimizationString()
|
||||
{
|
||||
$definition = new Definition();
|
||||
$definition->setClass('stdClass');
|
||||
$definition->addArgument(array(
|
||||
'only dot' => '.',
|
||||
'concatenation as value' => '.\'\'.',
|
||||
'concatenation from the start value' => '\'\'.',
|
||||
'.' => 'dot as a key',
|
||||
'.\'\'.' => 'concatenation as a key',
|
||||
'\'\'.' =>'concatenation from the start key',
|
||||
'optimize concatenation' => "string1%some_string%string2",
|
||||
'optimize concatenation with empty string' => "string1%empty_value%string2",
|
||||
'optimize concatenation from the start' => '%empty_value%start',
|
||||
'optimize concatenation at the end' => 'end%empty_value%',
|
||||
));
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
$container->setDefinition('test', $definition);
|
||||
$container->setParameter('empty_value', '');
|
||||
$container->setParameter('some_string', '-');
|
||||
$container->compile();
|
||||
|
||||
$dumper = new PhpDumper($container);
|
||||
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services10.php', $dumper->dump(), '->dump() dumps an empty container as an empty PHP class');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,7 +69,7 @@ class PhpDumperTest extends \PHPUnit_Framework_TestCase
|
||||
*/
|
||||
public function testExportParameters()
|
||||
{
|
||||
$dumper = new PhpDumper($container = new ContainerBuilder(new ParameterBag(array('foo' => new Reference('foo')))));
|
||||
$dumper = new PhpDumper(new ContainerBuilder(new ParameterBag(array('foo' => new Reference('foo')))));
|
||||
$dumper->dump();
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\DependencyInjection\Parameter;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
|
||||
|
||||
/**
|
||||
* ProjectServiceContainer
|
||||
*
|
||||
* This class has been auto-generated
|
||||
* by the Symfony Dependency Injection Component.
|
||||
*/
|
||||
class ProjectServiceContainer extends Container
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->parameters = $this->getDefaultParameters();
|
||||
|
||||
$this->services =
|
||||
$this->scopedServices =
|
||||
$this->scopeStacks = array();
|
||||
|
||||
$this->set('service_container', $this);
|
||||
|
||||
$this->scopes = array();
|
||||
$this->scopeChildren = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the 'test' service.
|
||||
*
|
||||
* This service is shared.
|
||||
* This method always returns the same instance of the service.
|
||||
*
|
||||
* @return stdClass A stdClass instance.
|
||||
*/
|
||||
protected function getTestService()
|
||||
{
|
||||
return $this->services['test'] = new \stdClass(array('only dot' => '.', 'concatenation as value' => '.\'\'.', 'concatenation from the start value' => '\'\'.', '.' => 'dot as a key', '.\'\'.' => 'concatenation as a key', '\'\'.' => 'concatenation from the start key', 'optimize concatenation' => 'string1-string2', 'optimize concatenation with empty string' => 'string1string2', 'optimize concatenation from the start' => 'start', 'optimize concatenation at the end' => 'end'));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getParameter($name)
|
||||
{
|
||||
$name = strtolower($name);
|
||||
|
||||
if (!array_key_exists($name, $this->parameters)) {
|
||||
throw new \InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
|
||||
}
|
||||
|
||||
return $this->parameters[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function hasParameter($name)
|
||||
{
|
||||
return array_key_exists(strtolower($name), $this->parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setParameter($name, $value)
|
||||
{
|
||||
throw new \LogicException('Impossible to call set() on a frozen ParameterBag.');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getParameterBag()
|
||||
{
|
||||
if (null === $this->parameterBag) {
|
||||
$this->parameterBag = new FrozenParameterBag($this->parameters);
|
||||
}
|
||||
|
||||
return $this->parameterBag;
|
||||
}
|
||||
/**
|
||||
* Gets the default parameters.
|
||||
*
|
||||
* @return array An array of the default parameters
|
||||
*/
|
||||
protected function getDefaultParameters()
|
||||
{
|
||||
return array(
|
||||
'empty_value' => '',
|
||||
'some_string' => '-',
|
||||
);
|
||||
}
|
||||
}
|
@ -26,6 +26,10 @@ abstract class AbstractLayoutTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
if (!extension_loaded('intl')) {
|
||||
$this->markTestSkipped('The "intl" extension is not available');
|
||||
}
|
||||
|
||||
\Locale::setDefault('en');
|
||||
|
||||
$this->csrfProvider = $this->getMock('Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface');
|
||||
|
@ -857,6 +857,30 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$this->assertContains('Accept-Language: zh, en-us; q=0.8, en; q=0.6', $request->__toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider splitHttpAcceptHeaderData
|
||||
*/
|
||||
public function testSplitHttpAcceptHeader($acceptHeader, $expected)
|
||||
{
|
||||
$request = new Request();
|
||||
|
||||
$this->assertEquals($expected, $request->splitHttpAcceptHeader($acceptHeader));
|
||||
}
|
||||
|
||||
public function splitHttpAcceptHeaderData()
|
||||
{
|
||||
return array(
|
||||
array(null, array()),
|
||||
array('text/html;q=0.8', array('text/html' => 0.8)),
|
||||
array('text/html;foo=bar;q=0.8 ', array('text/html;foo=bar' => 0.8)),
|
||||
array('text/html;charset=utf-8; q=0.8', array('text/html;charset=utf-8' => 0.8)),
|
||||
array('text/html,application/xml;q=0.9,*/*;charset=utf-8; q=0.8', array('text/html' => 1, 'application/xml' => 0.9, '*/*;charset=utf-8' => 0.8)),
|
||||
array('text/html,application/xhtml+xml;q=0.9,*/*;q=0.8; foo=bar', array('text/html' => 1, 'application/xhtml+xml' => 0.9, '*/*' => 0.8)),
|
||||
array('text/html,application/xhtml+xml;charset=utf-8;q=0.9; foo=bar,*/*', array('text/html' => 1, '*/*' => 1, 'application/xhtml+xml;charset=utf-8' => 0.9)),
|
||||
array('text/html,application/xhtml+xml', array('application/xhtml+xml' => 1, 'text/html' => 1)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class RequestContentProxy extends Request
|
||||
|
Reference in New Issue
Block a user