2014-09-25 3 views
5

У меня есть номера телефонов, хранящиеся в базе данных с использованием char (10), и они выглядят, например, как 4155551212.Отформатируйте номер телефона с помощью Twig

Желательный шаблон Twig для их отображения (415) 555-1212.

Как это лучше всего выполнить?

+0

Используйте 'substr()' ...? Это легко. Использовать ваше воображение! –

+1

Создать расширение ветки - http://symfony.com/doc/master/cookbook/templating/twig_extension.html –

+0

@ SverriM.Olsen. Нет 'substr()', но я думаю, что 'slice' будет работать. – user1032531

ответ

9

Было бы неплохо не добавлять этот фильтр каждый раз, но он будет отвечать моим потребностям.

<?php 
require_once '../../../vendor/autoload.php'; 
Twig_Autoloader::register(); 
try { 
    $loader = new Twig_Loader_Filesystem('templates'); 
    $twig = new Twig_Environment($loader, array('debug' => true,)); 
    $twig->addExtension(new Twig_Extension_Debug()); 
    $twig->addFilter(new Twig_SimpleFilter('phone', function ($num) { 
     return ($num)?'('.substr($num,0,3).') '.substr($num,3,3).'-'.substr($num,6,4):'&nbsp;'; 
    })); 
    echo $twig->render('filter.html', array('phone'=>'4155551212')); 
} catch (Exception $e) { 
    die ('ERROR: ' . $e->getMessage()); 
} 
?> 

filter.html

{{ phone|phone }} 
+0

дает вам заслуженную авантюру для этого хорошего сира! – r3wt

1
$numberPhone = '4155551212'; 
$firstChain = substr($numberPhone, 0, 3); 
$secondChain = substr($numberPhone, 3, 3); 
$thirdChain = substr($numberPhone, 6, 4); 
$formatedNumberPhone = '(' . $firstChain . ') ' . $secondChain . '-' . $thirdChain; 

echo $formatedNumberPhone; 

Вот решение для тех, у кого есть схожие вопросы.

Немного объяснения о том, как работают зиЬзЬги():

Он принимает три аргумента в этом случае:

  1. Цепочки вы хотите изменить
  2. Индекс которые представляют место, где функция начнется процесс его
  3. Сколько caracters вы хотите сохранить

Обратите внимание, что вы можете передать отрицательное значение второму и третьему аргументу (зайдите в официальный документ для получения дополнительной информации).

В этом случае я беру первый символ номера телефона, поэтому я скажу, что функция начинается с 0 и удерживать 3 символа, поэтому выглядит так: susbtr($numberPhone, 0, 3).

Надеюсь, это поможет!

+0

Спасибо за ответ. Я знаю, как это сделать с PHP и делать это так же, как вы, но не с Twig. – user1032531

+0

Я никогда не использовал Twig, хотя я мог бы сделать это в php, чтобы избежать сложного reaserch! –

+0

Да, я знаю, но весь смысл Twig - отделить взгляд от логики. – user1032531

1

Номер телефона в формате США: {{phone_number | телефон | default ("-")}}

-2
Eu fiz assim: {{ p.number[:4] }} - {{ p.number[4:]}} 
I did that way: {{ p.number[:4] }} - {{ p.number[4:]}} 
Смежные вопросы