Merge branch '2.3'
* 2.3: [WebProfilerBundle] fixed toolbar for IE8 (refs #8380) [HttpFoundation] removed double-slashes (closes #8388) [HttpFoundation] tried to keep the original Request URI as much as possible to avoid different behavior between ::createFromGlobals() and ::create() [TwigBridge] fixed form rendering when used in a template with dynamic inheritance
This commit is contained in:
commit
860151ee8e
@ -167,6 +167,8 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
|||||||
// theme is a reference and we don't want to change it.
|
// theme is a reference and we don't want to change it.
|
||||||
$currentTheme = $theme;
|
$currentTheme = $theme;
|
||||||
|
|
||||||
|
$context = $this->environment->mergeGlobals(array());
|
||||||
|
|
||||||
// The do loop takes care of template inheritance.
|
// The do loop takes care of template inheritance.
|
||||||
// Add blocks from all templates in the inheritance tree, but avoid
|
// Add blocks from all templates in the inheritance tree, but avoid
|
||||||
// overriding blocks already set.
|
// overriding blocks already set.
|
||||||
@ -178,6 +180,6 @@ class TwigRendererEngine extends AbstractRendererEngine implements TwigRendererE
|
|||||||
$this->resources[$cacheKey][$block] = $blockData;
|
$this->resources[$cacheKey][$block] = $blockData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (false !== $currentTheme = $currentTheme->getParent(array()));
|
} while (false !== $currentTheme = $currentTheme->getParent($context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,8 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
|||||||
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
|
$environment = new \Twig_Environment($loader, array('strict_variables' => true));
|
||||||
$environment->addExtension(new TranslationExtension(new StubTranslator()));
|
$environment->addExtension(new TranslationExtension(new StubTranslator()));
|
||||||
$environment->addGlobal('global', '');
|
$environment->addGlobal('global', '');
|
||||||
|
// the value can be any template that exists
|
||||||
|
$environment->addGlobal('dynamic_template_name', 'child_label');
|
||||||
$environment->addExtension($this->extension);
|
$environment->addExtension($this->extension);
|
||||||
|
|
||||||
$this->extension->initRuntime($environment);
|
$this->extension->initRuntime($environment);
|
||||||
@ -90,6 +92,18 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testThemeBlockInheritanceUsingDynamicExtend()
|
||||||
|
{
|
||||||
|
$view = $this->factory
|
||||||
|
->createNamed('name', 'email')
|
||||||
|
->createView()
|
||||||
|
;
|
||||||
|
|
||||||
|
$renderer = $this->extension->renderer;
|
||||||
|
$renderer->setTheme($view, array('page_dynamic_extends.html.twig'));
|
||||||
|
$renderer->searchAndRenderBlock($view, 'row');
|
||||||
|
}
|
||||||
|
|
||||||
public function isSelectedChoiceProvider()
|
public function isSelectedChoiceProvider()
|
||||||
{
|
{
|
||||||
// The commented cases should not be necessary anymore, because the
|
// The commented cases should not be necessary anymore, because the
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
{% extends dynamic_template_name ~ '.html.twig' %}
|
@ -1,8 +1,5 @@
|
|||||||
<!-- START of Symfony2 Web Debug Toolbar -->
|
<!-- START of Symfony2 Web Debug Toolbar -->
|
||||||
{% if 'normal' != position %}
|
{% if 'normal' != position %}
|
||||||
<style>
|
|
||||||
{% include '@WebProfiler/Profiler/toolbar.css.twig' with { 'position': position, 'floatable': true } %}
|
|
||||||
</style>
|
|
||||||
<div id="sfMiniToolbar-{{ token }}" class="sf-minitoolbar">
|
<div id="sfMiniToolbar-{{ token }}" class="sf-minitoolbar">
|
||||||
<a href="javascript:void(0);" title="Show Symfony toolbar" onclick="
|
<a href="javascript:void(0);" title="Show Symfony toolbar" onclick="
|
||||||
var elem = this.parentNode;
|
var elem = this.parentNode;
|
||||||
@ -21,6 +18,9 @@
|
|||||||
<img width="26" height="28" alt="Symfony" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAcCAMAAABIzV/hAAACZFBMVEUwLjL///////////////////////////////////////////////////////////////////+Eg4b///+Ni46Xlpj///////////+op6n///////////////////////////////////////////////////////////9ZWFv///////9qaWz///////+mpaf///////////////9ZWFv///////////////9PTVH///91dHb////////////////////g4OD///9NTE+Ih4r///////+Ni47///////92dHeRkJLk5OTLy8xlY2b///////+cm53///////+5ubr////o6Oj////////U1NT///9DQURsa22rq6ysq61hX2L///+LioxTUVVBP0NEQkZpZ2rGxsf///9ram3////s7O2SkZNfXmFxcHKmpae4uLnKysuXlpiop6l3dXiIh4pYVlmrq6ycm52trK7Nzc48Oj5dW158e36dnJ49Oz/Pz9BiYGPAv8BDQUTQz9BVU1aioaNHRUnBwcJXVVk6ODxJR0t3dnmko6U8Oj6lpKY9Oz+0tLXDwsRQTlF7en1QTlHi4eJhX2LFxcZTUVViYGNwb3J+fX83NTlFQ0dUUlW4t7icm524uLk8Oj5YVlmPjpBLSU2enZ9aWVw/PkFBP0NdW153dnk0MjZQTlE1MzdQT1JdXF9ram15eHqGhYdDQkV5eHo2NThEQkZRUFNFQ0dta244NjpGREhTUVU5NztUUlVhX2JubG9HRUlVU1ZiYGM7OTxIRkk7OT1IR0o8Oj4wLjI9Oz8YdG13AAAAynRSTlMAAAEDBAUGCgsMDQ4QEhMUGRobGx0gISIkJiYnKCktLi8wMjM0NTk6Ozw+P0NFSEpLTE5PUFBTWlteXmBiZGVmaWxtcHBxc3R0dnl5fX+BgoOGi46Pj5CRmZqanZ6eoKeoq6ytsLCwsrO0tbe5urq8vL+/wsTFx8jJycvLy8vM0NHR0tLU1NfX2NnZ2trc3N3d3eHh4uLl5ebm5ubn5+fo6urt7e3u7vDx8/Pz9PT19fX19fX29vf39/j4+fn5+vr6+vv7+/z8/f3+yR5EtwAAAbVJREFUeNpl0mVXVFEYhuF3zhkOFqMjYmCi2MUYYKGIYiJ2YCd2t4IBFqgoKjZ2jg3igI2KyO2f8sTMngGvj/te71r7wyMuk4jofZccAihcMzJKXDYnuYcVotyeYKiktV5LA0faaE7S4s7TyMsBupnMcoH/vO6gmanJaiLV1Py+Xwn5zc0fjCbSi2LI2QdkGdLyFBG+rHwMzz4BD7wyGEfFk8pfsD2TkGmyFNvFHfDj55v02VD6DcteOYylatY8oG7boA2QV4vlklzB8tU3/DIwo+dWv58guY5tRcLMtwSGdi1DkTvAn9Jqsgbu4kafRBqlV4sDFCWuIjdhMsp7yQU49rB28/QPLOu2DuWqLMfmfw6M716GskdGVRMSGDKRsEzpvZ+Qs0lFKDd94s2oArh2F7K3oNQt6ChGr5x6+Dx3J7d2E3Ygqam4PCkngRNnngYIO5cWq4lLb5t+vJ6GiifFR1nbMNqP3fSOCN8PZnQynEW5W/nmHy0PXv79eHpRSjsjtEOtWZcRc9YXlNx7VFKwceGYHjG6s0Ob3iK+X3LqlKnjkvt39rjD6w3W6BhvrCdaVw//ADrWicJIvtkmAAAAAElFTkSuQmCC">
|
<img width="26" height="28" alt="Symfony" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAcCAMAAABIzV/hAAACZFBMVEUwLjL///////////////////////////////////////////////////////////////////+Eg4b///+Ni46Xlpj///////////+op6n///////////////////////////////////////////////////////////9ZWFv///////9qaWz///////+mpaf///////////////9ZWFv///////////////9PTVH///91dHb////////////////////g4OD///9NTE+Ih4r///////+Ni47///////92dHeRkJLk5OTLy8xlY2b///////+cm53///////+5ubr////o6Oj////////U1NT///9DQURsa22rq6ysq61hX2L///+LioxTUVVBP0NEQkZpZ2rGxsf///9ram3////s7O2SkZNfXmFxcHKmpae4uLnKysuXlpiop6l3dXiIh4pYVlmrq6ycm52trK7Nzc48Oj5dW158e36dnJ49Oz/Pz9BiYGPAv8BDQUTQz9BVU1aioaNHRUnBwcJXVVk6ODxJR0t3dnmko6U8Oj6lpKY9Oz+0tLXDwsRQTlF7en1QTlHi4eJhX2LFxcZTUVViYGNwb3J+fX83NTlFQ0dUUlW4t7icm524uLk8Oj5YVlmPjpBLSU2enZ9aWVw/PkFBP0NdW153dnk0MjZQTlE1MzdQT1JdXF9ram15eHqGhYdDQkV5eHo2NThEQkZRUFNFQ0dta244NjpGREhTUVU5NztUUlVhX2JubG9HRUlVU1ZiYGM7OTxIRkk7OT1IR0o8Oj4wLjI9Oz8YdG13AAAAynRSTlMAAAEDBAUGCgsMDQ4QEhMUGRobGx0gISIkJiYnKCktLi8wMjM0NTk6Ozw+P0NFSEpLTE5PUFBTWlteXmBiZGVmaWxtcHBxc3R0dnl5fX+BgoOGi46Pj5CRmZqanZ6eoKeoq6ytsLCwsrO0tbe5urq8vL+/wsTFx8jJycvLy8vM0NHR0tLU1NfX2NnZ2trc3N3d3eHh4uLl5ebm5ubn5+fo6urt7e3u7vDx8/Pz9PT19fX19fX29vf39/j4+fn5+vr6+vv7+/z8/f3+yR5EtwAAAbVJREFUeNpl0mVXVFEYhuF3zhkOFqMjYmCi2MUYYKGIYiJ2YCd2t4IBFqgoKjZ2jg3igI2KyO2f8sTMngGvj/te71r7wyMuk4jofZccAihcMzJKXDYnuYcVotyeYKiktV5LA0faaE7S4s7TyMsBupnMcoH/vO6gmanJaiLV1Py+Xwn5zc0fjCbSi2LI2QdkGdLyFBG+rHwMzz4BD7wyGEfFk8pfsD2TkGmyFNvFHfDj55v02VD6DcteOYylatY8oG7boA2QV4vlklzB8tU3/DIwo+dWv58guY5tRcLMtwSGdi1DkTvAn9Jqsgbu4kafRBqlV4sDFCWuIjdhMsp7yQU49rB28/QPLOu2DuWqLMfmfw6M716GskdGVRMSGDKRsEzpvZ+Qs0lFKDd94s2oArh2F7K3oNQt6ChGr5x6+Dx3J7d2E3Ygqam4PCkngRNnngYIO5cWq4lLb5t+vJ6GiifFR1nbMNqP3fSOCN8PZnQynEW5W/nmHy0PXv79eHpRSjsjtEOtWZcRc9YXlNx7VFKwceGYHjG6s0Ob3iK+X3LqlKnjkvt39rjD6w3W6BhvrCdaVw//ADrWicJIvtkmAAAAAElFTkSuQmCC">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<style>
|
||||||
|
{% include '@WebProfiler/Profiler/toolbar.css.twig' with { 'position': position, 'floatable': true } %}
|
||||||
|
</style>
|
||||||
<div id="sfToolbarClearer-{{ token }}" style="clear: both; height: 38px;"></div>
|
<div id="sfToolbarClearer-{{ token }}" style="clear: both; height: 38px;"></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ class File extends \SplFileInfo
|
|||||||
throw new FileException(sprintf('Unable to write in the "%s" directory', $directory));
|
throw new FileException(sprintf('Unable to write in the "%s" directory', $directory));
|
||||||
}
|
}
|
||||||
|
|
||||||
$target = $directory.DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : $this->getName($name));
|
$target = trim($directory, '/\\').DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : $this->getName($name));
|
||||||
|
|
||||||
return new File($target, false);
|
return new File($target, false);
|
||||||
}
|
}
|
||||||
|
@ -352,11 +352,20 @@ class Request
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$queryString = '';
|
||||||
if (isset($components['query'])) {
|
if (isset($components['query'])) {
|
||||||
parse_str(html_entity_decode($components['query']), $qs);
|
parse_str(html_entity_decode($components['query']), $qs);
|
||||||
|
|
||||||
|
if ($query) {
|
||||||
$query = array_replace($qs, $query);
|
$query = array_replace($qs, $query);
|
||||||
}
|
|
||||||
$queryString = http_build_query($query, '', '&');
|
$queryString = http_build_query($query, '', '&');
|
||||||
|
} else {
|
||||||
|
$query = $qs;
|
||||||
|
$queryString = $components['query'];
|
||||||
|
}
|
||||||
|
} elseif ($query) {
|
||||||
|
$queryString = http_build_query($query, '', '&');
|
||||||
|
}
|
||||||
|
|
||||||
$server['REQUEST_URI'] = $components['path'].('' !== $queryString ? '?'.$queryString : '');
|
$server['REQUEST_URI'] = $components['path'].('' !== $queryString ? '?'.$queryString : '');
|
||||||
$server['QUERY_STRING'] = $queryString;
|
$server['QUERY_STRING'] = $queryString;
|
||||||
|
@ -211,6 +211,10 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('testnopass', $request->getUser());
|
$this->assertEquals('testnopass', $request->getUser());
|
||||||
$this->assertNull($request->getPassword());
|
$this->assertNull($request->getPassword());
|
||||||
$this->assertFalse($request->isSecure());
|
$this->assertFalse($request->isSecure());
|
||||||
|
|
||||||
|
$request = Request::create('http://test.com/?foo');
|
||||||
|
$this->assertEquals('/?foo', $request->getRequestUri());
|
||||||
|
$this->assertEquals(array('foo' => ''), $request->query->all());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user