Skip to content

Commit a085231

Browse files
committed
Twig extension should not depend on templating helper
1 parent 918ab21 commit a085231

File tree

7 files changed

+123
-50
lines changed

7 files changed

+123
-50
lines changed

DependencyInjection/MisdPhoneNumberExtension.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
namespace Misd\PhoneNumberBundle\DependencyInjection;
1313

1414
use Symfony\Component\Config\FileLocator;
15-
use Symfony\Component\Console\Helper\HelperInterface;
1615
use Symfony\Component\DependencyInjection\ContainerBuilder;
1716
use Symfony\Component\DependencyInjection\Definition;
1817
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -33,9 +32,9 @@ public function load(array $configs, ContainerBuilder $container)
3332
$loader->load('services.xml');
3433
if (interface_exists('Symfony\Component\Templating\Helper\HelperInterface')) {
3534
$loader->load('templating.xml');
36-
if (class_exists('Symfony\Bundle\TwigBundle\TwigBundle')) {
37-
$loader->load('twig.xml');
38-
}
35+
}
36+
if (class_exists('Symfony\Bundle\TwigBundle\TwigBundle')) {
37+
$loader->load('twig.xml');
3938
}
4039
if (interface_exists('Symfony\Component\Form\FormTypeInterface')) {
4140
$loader->load('form.xml');

Formatter/PhoneNumberFormatter.php

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony2 PhoneNumberBundle.
5+
*
6+
* (c) University of Cambridge
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Misd\PhoneNumberBundle\Formatter;
13+
14+
use libphonenumber\PhoneNumber;
15+
use libphonenumber\PhoneNumberFormat;
16+
use libphonenumber\PhoneNumberType;
17+
use libphonenumber\PhoneNumberUtil;
18+
use Misd\PhoneNumberBundle\Exception\InvalidArgumentException;
19+
20+
/**
21+
* Phone number formatter.
22+
*/
23+
class PhoneNumberFormatter
24+
{
25+
/**
26+
* Phone number utility.
27+
*
28+
* @var PhoneNumberUtil
29+
*/
30+
protected $phoneNumberUtil;
31+
32+
/**
33+
* Constructor.
34+
*
35+
* @param PhoneNumberUtil $phoneNumberUtil Phone number utility.
36+
*/
37+
public function __construct(PhoneNumberUtil $phoneNumberUtil)
38+
{
39+
$this->phoneNumberUtil = $phoneNumberUtil;
40+
}
41+
42+
/**
43+
* Format a phone number.
44+
*
45+
* @param PhoneNumber $phoneNumber Phone number.
46+
* @param int|string $format Format, or format constant name.
47+
*
48+
* @return string Formatted phone number.
49+
*
50+
* @throws InvalidArgumentException If an argument is invalid.
51+
*/
52+
public function format(PhoneNumber $phoneNumber, $format = PhoneNumberFormat::INTERNATIONAL)
53+
{
54+
if (true === is_string($format)) {
55+
$constant = '\libphonenumber\PhoneNumberFormat::' . $format;
56+
57+
if (false === defined($constant)) {
58+
throw new InvalidArgumentException('The format must be either a constant value or name in libphonenumber\PhoneNumberFormat');
59+
}
60+
61+
$format = constant('\libphonenumber\PhoneNumberFormat::' . $format);
62+
}
63+
64+
return $this->phoneNumberUtil->format($phoneNumber, $format);
65+
}
66+
67+
/**
68+
* @param PhoneNumber $phoneNumber Phone number.
69+
* @param int|string $type PhoneNumberType, or PhoneNumberType constant name.
70+
*
71+
* @return bool
72+
*
73+
* @throws InvalidArgumentException If type argument is invalid.
74+
*/
75+
public function isType(PhoneNumber $phoneNumber, $type = PhoneNumberType::UNKNOWN)
76+
{
77+
if (true === is_string($type)) {
78+
$constant = '\libphonenumber\PhoneNumberType::' . $type;
79+
80+
if (false === defined($constant)) {
81+
throw new InvalidArgumentException('The format must be either a constant value or name in libphonenumber\PhoneNumberType');
82+
}
83+
84+
$type = constant('\libphonenumber\PhoneNumberType::' . $type);
85+
}
86+
87+
return $this->phoneNumberUtil->getNumberType($phoneNumber) === $type ? true : false;
88+
}
89+
}

Resources/config/services.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@
3030
<service id="libphonenumber.phone_number_to_time_zones_mapper" class="libphonenumber\PhoneNumberToTimeZonesMapper"/>
3131
<service id="libphonenumber\PhoneNumberToTimeZonesMapper" alias="libphonenumber.phone_number_to_time_zones_mapper"/>
3232

33+
<service id="misd_phone_number.formatter" class="Misd\PhoneNumberBundle\Formatter\PhoneNumberFormatter">
34+
<argument type="service" id="libphonenumber.phone_number_util"/>
35+
</service>
36+
<service id="Misd\PhoneNumberBundle\Formatter\PhoneNumberFormatter" alias="misd_phone_number.formatter"/>
37+
3338
</services>
3439

3540
</container>

Resources/config/templating.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<tag name="templating.helper" alias="phone_number_helper"/>
1717
<!-- phone_number_format is deprecated and will be removed in 2.0 (use phone_number_helper instead) -->
1818
<tag name="templating.helper" alias="phone_number_format"/>
19-
<argument type="service" id="libphonenumber.phone_number_util"/>
19+
<argument type="service" id="misd_phone_number.formatter"/>
2020
</service>
2121
<service id="Misd\PhoneNumberBundle\Templating\Helper\PhoneNumberHelper" alias="misd_phone_number.templating.helper"/>
2222
</services>

Resources/config/twig.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<service id="misd_phone_number.twig.extension.format" class="Misd\PhoneNumberBundle\Twig\Extension\PhoneNumberHelperExtension"
1515
public="false">
1616
<tag name="twig.extension"/>
17-
<argument type="service" id="misd_phone_number.templating.helper"/>
17+
<argument type="service" id="misd_phone_number.formatter"/>
1818
</service>
1919
<service id="Misd\PhoneNumberBundle\Twig\Extension\PhoneNumberHelperExtension" alias="misd_phone_number.twig.extension.format"/>
2020
</services>

Templating/Helper/PhoneNumberHelper.php

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use libphonenumber\PhoneNumberFormat;
1616
use libphonenumber\PhoneNumberType;
1717
use libphonenumber\PhoneNumberUtil;
18-
use Misd\PhoneNumberBundle\Exception\InvalidArgumentException;
18+
use Misd\PhoneNumberBundle\Formatter\PhoneNumberFormatter;
1919
use Symfony\Component\Templating\Helper\HelperInterface;
2020

2121
/**
@@ -24,11 +24,11 @@
2424
class PhoneNumberHelper implements HelperInterface
2525
{
2626
/**
27-
* Phone number utility.
27+
* Phone number formatter.
2828
*
29-
* @var PhoneNumberUtil
29+
* @var PhoneNumberFormatter
3030
*/
31-
protected $phoneNumberUtil;
31+
protected $formatter;
3232

3333
/**
3434
* Charset.
@@ -40,11 +40,15 @@ class PhoneNumberHelper implements HelperInterface
4040
/**
4141
* Constructor.
4242
*
43-
* @param PhoneNumberUtil $phoneNumberUtil Phone number utility.
43+
* @param PhoneNumberFormatter $formatter Phone number formatter.
4444
*/
45-
public function __construct(PhoneNumberUtil $phoneNumberUtil)
45+
public function __construct($formatter)
4646
{
47-
$this->phoneNumberUtil = $phoneNumberUtil;
47+
if ($formatter instanceof PhoneNumberUtil) {
48+
// throw deprecation message
49+
$formatter = new PhoneNumberFormatter($formatter);
50+
}
51+
$this->formatter = $formatter;
4852
}
4953

5054
/**
@@ -78,44 +82,20 @@ public function getName()
7882
* @param int|string $format Format, or format constant name.
7983
*
8084
* @return string Formatted phone number.
81-
*
82-
* @throws InvalidArgumentException If an argument is invalid.
8385
*/
8486
public function format(PhoneNumber $phoneNumber, $format = PhoneNumberFormat::INTERNATIONAL)
8587
{
86-
if (true === is_string($format)) {
87-
$constant = '\libphonenumber\PhoneNumberFormat::' . $format;
88-
89-
if (false === defined($constant)) {
90-
throw new InvalidArgumentException('The format must be either a constant value or name in libphonenumber\PhoneNumberFormat');
91-
}
92-
93-
$format = constant('\libphonenumber\PhoneNumberFormat::' . $format);
94-
}
95-
96-
return $this->phoneNumberUtil->format($phoneNumber, $format);
88+
return $this->formatter->format($phoneNumber, $format);
9789
}
9890

9991
/**
10092
* @param PhoneNumber $phoneNumber Phone number.
10193
* @param int|string $type PhoneNumberType, or PhoneNumberType constant name.
10294
*
10395
* @return bool
104-
*
105-
* @throws InvalidArgumentException If type argument is invalid.
10696
*/
10797
public function isType(PhoneNumber $phoneNumber, $type = PhoneNumberType::UNKNOWN)
10898
{
109-
if (true === is_string($type)) {
110-
$constant = '\libphonenumber\PhoneNumberType::' . $type;
111-
112-
if (false === defined($constant)) {
113-
throw new InvalidArgumentException('The format must be either a constant value or name in libphonenumber\PhoneNumberType');
114-
}
115-
116-
$type = constant('\libphonenumber\PhoneNumberType::' . $type);
117-
}
118-
119-
return $this->phoneNumberUtil->getNumberType($phoneNumber) === $type ? true : false;
99+
return $this->formatter->getNumberType($phoneNumber) === $type ? true : false;
120100
}
121101
}

Twig/Extension/PhoneNumberHelperExtension.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,28 @@
1111

1212
namespace Misd\PhoneNumberBundle\Twig\Extension;
1313

14-
use Misd\PhoneNumberBundle\Templating\Helper\PhoneNumberHelper;
14+
use Misd\PhoneNumberBundle\Formatter\PhoneNumberFormatter;
1515

1616
/**
1717
* Phone number helper Twig extension.
1818
*/
1919
class PhoneNumberHelperExtension extends \Twig_Extension
2020
{
2121
/**
22-
* Phone number helper.
22+
* Phone number formatter.
2323
*
24-
* @var PhoneNumberHelper
24+
* @var PhoneNumberFormatter
2525
*/
26-
protected $helper;
26+
protected $formatter;
2727

2828
/**
2929
* Constructor.
3030
*
31-
* @param PhoneNumberHelper $helper Phone number helper.
31+
* @param PhoneNumberFormatter $formatter Phone number formatter.
3232
*/
33-
public function __construct(PhoneNumberHelper $helper)
33+
public function __construct($formatter)
3434
{
35-
$this->helper = $helper;
35+
$this->formatter = $formatter;
3636
}
3737

3838
/**
@@ -41,8 +41,8 @@ public function __construct(PhoneNumberHelper $helper)
4141
public function getFunctions()
4242
{
4343
return array(
44-
new \Twig_SimpleFunction('phone_number_format', array($this->helper, 'format'), array('deprecated' => '1.2')),
45-
new \Twig_SimpleFunction('phone_number_is_type', array($this->helper, 'isType'), array('deprecated' => '1.2')),
44+
new \Twig_SimpleFunction('phone_number_format', array($this->formatter, 'format'), array('deprecated' => '1.2')),
45+
new \Twig_SimpleFunction('phone_number_is_type', array($this->formatter, 'isType'), array('deprecated' => '1.2')),
4646
);
4747
}
4848

@@ -52,7 +52,7 @@ public function getFunctions()
5252
public function getFilters()
5353
{
5454
return array(
55-
new \Twig_SimpleFilter('phone_number_format', array($this->helper, 'format')),
55+
new \Twig_SimpleFilter('phone_number_format', array($this->formatter, 'format')),
5656
);
5757
}
5858

@@ -62,7 +62,7 @@ public function getFilters()
6262
public function getTests()
6363
{
6464
return array(
65-
new \Twig_SimpleTest('phone_number_of_type', array($this->helper, 'isType')),
65+
new \Twig_SimpleTest('phone_number_of_type', array($this->formatter, 'isType')),
6666
);
6767
}
6868

0 commit comments

Comments
 (0)