[HttpKernel] added a unit test to demonstrate that passing objects works for inline controllers
This commit is contained in:
parent
70f3399f7e
commit
43ce368dea
@ -64,13 +64,11 @@ abstract class RoutableFragmentRenderer implements FragmentRendererInterface
|
|||||||
|
|
||||||
private function checkNonScalar($values)
|
private function checkNonScalar($values)
|
||||||
{
|
{
|
||||||
foreach ($values as $value) {
|
foreach ($values as $key => $value) {
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
$this->checkNonScalar($value);
|
$this->checkNonScalar($value);
|
||||||
}
|
} elseif (!is_scalar($value)) {
|
||||||
|
throw new \LogicException(sprintf('Controller attributes cannot contain non-scalar values (value for key "%s" is not a scalar).', $key));
|
||||||
if (!is_scalar($value)) {
|
|
||||||
throw new \LogicException('Controller attributes cannot contain non-scalar values.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,24 @@ class InlineFragmentRendererTest extends \PHPUnit_Framework_TestCase
|
|||||||
$strategy->render(new ControllerReference('main_controller', array('object' => $object), array()), Request::create('/'));
|
$strategy->render(new ControllerReference('main_controller', array('object' => $object), array()), Request::create('/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testRenderWithObjectsAsAttributesPassedAsObjectsInTheController()
|
||||||
|
{
|
||||||
|
$resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver', array('getController'));
|
||||||
|
$resolver
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getController')
|
||||||
|
->will($this->returnValue(function (\stdClass $object, Bar $object1) {
|
||||||
|
return new Response($object1->getBar());
|
||||||
|
}))
|
||||||
|
;
|
||||||
|
|
||||||
|
$kernel = new HttpKernel(new EventDispatcher(), $resolver);
|
||||||
|
$renderer = new InlineFragmentRenderer($kernel);
|
||||||
|
|
||||||
|
$response = $renderer->render(new ControllerReference('main_controller', array('object' => new \stdClass(), 'object1' => new Bar()), array()), Request::create('/'));
|
||||||
|
$this->assertEquals('bar', $response->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \RuntimeException
|
* @expectedException \RuntimeException
|
||||||
*/
|
*/
|
||||||
@ -168,3 +186,12 @@ class InlineFragmentRendererTest extends \PHPUnit_Framework_TestCase
|
|||||||
$strategy->render('/', $request);
|
$strategy->render('/', $request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Bar {
|
||||||
|
public $bar = 'bar';
|
||||||
|
|
||||||
|
public function getBar()
|
||||||
|
{
|
||||||
|
return $this->bar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -47,14 +47,21 @@ class RoutableFragmentRendererTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException LogicException
|
* @expectedException LogicException
|
||||||
|
* @dataProvider getGenerateFragmentUriDataWithNonScalar
|
||||||
*/
|
*/
|
||||||
public function testGenerateFragmentUriWithObject()
|
public function testGenerateFragmentUriWithNonScalar($controller)
|
||||||
{
|
{
|
||||||
$controller = new ControllerReference('controller', array('foo' => new Foo(), 'bar' => 'bar'), array());
|
|
||||||
|
|
||||||
$this->callGenerateFragmentUriMethod($controller, Request::create('/'));
|
$this->callGenerateFragmentUriMethod($controller, Request::create('/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getGenerateFragmentUriDataWithNonScalar()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(new ControllerReference('controller', array('foo' => new Foo(), 'bar' => 'bar'), array())),
|
||||||
|
array(new ControllerReference('controller', array('foo' => array('foo' => 'foo'), 'bar' => array('bar' => new Foo())), array())),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private function callGenerateFragmentUriMethod(ControllerReference $reference, Request $request)
|
private function callGenerateFragmentUriMethod(ControllerReference $reference, Request $request)
|
||||||
{
|
{
|
||||||
$renderer = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\Fragment\RoutableFragmentRenderer');
|
$renderer = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\Fragment\RoutableFragmentRenderer');
|
||||||
|
Reference in New Issue
Block a user