Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e77022b

Browse files
issei-mwebmozart
authored andcommitted
[Form] allowed CallbackTransformer to use callable
1 parent 678f772 commit e77022b

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

src/Symfony/Component/Form/CallbackTransformer.php

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,33 @@ class CallbackTransformer implements DataTransformerInterface
1818
{
1919
/**
2020
* The callback used for forward transform
21-
* @var \Closure
21+
* @var callable
2222
*/
2323
private $transform;
2424

2525
/**
2626
* The callback used for reverse transform
27-
* @var \Closure
27+
* @var callable
2828
*/
2929
private $reverseTransform;
3030

3131
/**
3232
* Constructor.
3333
*
34-
* @param \Closure $transform The forward transform callback
35-
* @param \Closure $reverseTransform The reverse transform callback
34+
* @param callable $transform The forward transform callback
35+
* @param callable $reverseTransform The reverse transform callback
36+
*
37+
* @throws \InvalidArgumentException when the given callbacks is invalid
3638
*/
37-
public function __construct(\Closure $transform, \Closure $reverseTransform)
39+
public function __construct($transform, $reverseTransform)
3840
{
41+
if (!is_callable($transform)) {
42+
throw new \InvalidArgumentException('Argument 1 should be a callable');
43+
}
44+
if (!is_callable($reverseTransform)) {
45+
throw new \InvalidArgumentException('Argument 2 should be a callable');
46+
}
47+
3948
$this->transform = $transform;
4049
$this->reverseTransform = $reverseTransform;
4150
}
@@ -47,7 +56,7 @@ public function __construct(\Closure $transform, \Closure $reverseTransform)
4756
*
4857
* @return mixed The value in the transformed representation
4958
*
50-
* @throws UnexpectedTypeException when the argument is not a string
59+
* @throws UnexpectedTypeException when the argument is not of the expected type
5160
* @throws TransformationFailedException when the transformation fails
5261
*/
5362
public function transform($data)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Symfony\Component\Form\Tests;
4+
5+
use Symfony\Component\Form\CallbackTransformer;
6+
7+
class CallbackTransformerTest extends \PHPUnit_Framework_TestCase
8+
{
9+
public function testTransform()
10+
{
11+
$transformer = new CallbackTransformer(
12+
function($value) { return $value.' has been transformed'; },
13+
function($value) { return $value.' has reversely been transformed'; }
14+
);
15+
16+
$this->assertEquals('foo has been transformed', $transformer->transform('foo'));
17+
$this->assertEquals('bar has reversely been transformed', $transformer->reverseTransform('bar'));
18+
}
19+
20+
/**
21+
* @dataProvider invalidCallbacksProvider
22+
*
23+
* @expectedException \InvalidArgumentException
24+
*/
25+
public function testConstructorWithInvalidCallbacks($transformCallback, $reverseTransformCallback)
26+
{
27+
new CallbackTransformer($transformCallback, $reverseTransformCallback);
28+
}
29+
30+
public function invalidCallbacksProvider()
31+
{
32+
return array(
33+
array( null, function(){} ),
34+
array( function(){}, null ),
35+
);
36+
}
37+
}

0 commit comments

Comments
 (0)