+ Initial commit
This commit is contained in:
commit
ea9ef1c67b
8 changed files with 338 additions and 0 deletions
20
DependencyInjection/Configuration.php
Normal file
20
DependencyInjection/Configuration.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace nxp\RutilsBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
||||
|
||||
class Configuration implements ConfigurationInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function getConfigTreeBuilder()
|
||||
{
|
||||
$treeBuilder = new TreeBuilder();
|
||||
$rootNode = $treeBuilder->root('rutils');
|
||||
|
||||
return $treeBuilder;
|
||||
}
|
||||
}
|
28
DependencyInjection/nxpRutilsExtension.php
Normal file
28
DependencyInjection/nxpRutilsExtension.php
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace nxp\RutilsBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use Symfony\Component\DependencyInjection\Loader;
|
||||
|
||||
/**
|
||||
* This is the class that loads and manages your bundle configuration
|
||||
*
|
||||
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
|
||||
*/
|
||||
class nxpRutilsExtension extends Extension
|
||||
{
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$configuration = new Configuration();
|
||||
$config = $this->processConfiguration($configuration, $configs);
|
||||
|
||||
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
$loader->load('services.yml');
|
||||
}
|
||||
}
|
43
README.md
Normal file
43
README.md
Normal file
|
@ -0,0 +1,43 @@
|
|||
Rutils Symfony 2 Bundle
|
||||
=======================
|
||||
|
||||
Простой бандл для Symfony 2 содержащий в себе расширение для Twig, позволяющее использовать функции из библиотеки [RUtils](RUtils: https://github.com/Andre-487/php_rutils/) в шаблонах.
|
||||
|
||||
Допускается как вызов в стиле функций:
|
||||
|
||||
{{ getPlural(10, ['гвоздь', 'гвоздя', 'гвоздей']) }}
|
||||
|
||||
так и в стиле фильтров:
|
||||
|
||||
{{ 10 | getPlural(['гвоздь', 'гвоздя', 'гвоздей']) }}
|
||||
|
||||
поддерживаются все методы библиотеки:
|
||||
|
||||
Числительные:
|
||||
|
||||
getInWords\2 - вывод числа прописью
|
||||
getInWordsInt\2 - вывод числа прописью
|
||||
getInWordsFloat\2 - вывод числа прописью
|
||||
getPlural\3 - выбор формы множественного числа и вывод вместе с числом
|
||||
choosePlural\2 - выбор только формы множественного числа
|
||||
sumString\3 - выбор формы и вывод прописью
|
||||
getRubles\2 - вывод суммы денег в рублях
|
||||
|
||||
Даты:
|
||||
|
||||
ruStrFTime\6 - вывод даты строкой
|
||||
distanceOfTimeInWords\3 - временной период
|
||||
getAge\1 - возраст
|
||||
|
||||
Транслитерация:
|
||||
|
||||
translify\1 - транслитерация
|
||||
detranslify\1 - обратное преобразование
|
||||
slugify\1 - подготовка для использования в URL'ях или путях
|
||||
|
||||
Типографика:
|
||||
typography\2
|
||||
|
||||
TODO:
|
||||
|
||||
* написать нормальную документацию
|
5
Resources/config/services.yml
Normal file
5
Resources/config/services.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
services:
|
||||
nxp.twig.rutils_extension:
|
||||
class: nxp\RutilsBundle\Twig\RutilsExtension
|
||||
tags:
|
||||
- { name: twig.extension }
|
41
Resources/doc/index.rst
Normal file
41
Resources/doc/index.rst
Normal file
|
@ -0,0 +1,41 @@
|
|||
Rutils Symfony 2 Bundle
|
||||
=======================
|
||||
|
||||
Простой бандл для Symfony 2 содержащий в себе расширение для Twig, позволяющее использовать функции из библиотеки RUtils_ в шаблонах.
|
||||
|
||||
Допускается как вызов в стиле функций::
|
||||
|
||||
{{ getPlural(10, ['гвоздь', 'гвоздя', 'гвоздей']) }}
|
||||
|
||||
так и в стиле фильтров::
|
||||
|
||||
{{ 10 | getPlural(['гвоздь', 'гвоздя', 'гвоздей']) }}
|
||||
|
||||
Поддерживаются все методы библиотеки:
|
||||
|
||||
Числительные::
|
||||
getInWords\2 - вывод числа прописью
|
||||
getInWordsInt\2 - вывод числа прописью
|
||||
getInWordsFloat\2 - вывод числа прописью
|
||||
getPlural\3 - выбор формы множественного числа и вывод вместе с числом
|
||||
choosePlural\2 - выбор только формы множественного числа
|
||||
sumString\3 - выбор формы и вывод прописью
|
||||
getRubles\2 - вывод суммы денег в рублях
|
||||
|
||||
Даты::
|
||||
ruStrFTime\6 - вывод даты строкой
|
||||
distanceOfTimeInWords\3 - временной период
|
||||
getAge\1 - возраст
|
||||
|
||||
Транслитерация::
|
||||
translify\1 - транслитерация
|
||||
detranslify\1 - обратное преобразование
|
||||
slugify\1 - подготовка для использования в URL'ях или путях
|
||||
|
||||
Типографика::
|
||||
typography\2
|
||||
|
||||
TODO::
|
||||
написать нормальную документацию
|
||||
|
||||
.. _RUtils: https://github.com/Andre-487/php_rutils/
|
170
Twig/RutilsExtension.php
Normal file
170
Twig/RutilsExtension.php
Normal file
|
@ -0,0 +1,170 @@
|
|||
<?php
|
||||
/**
|
||||
* @author Alexander NeonXP Kiryukhin <frei@neonxp.info>
|
||||
*/
|
||||
|
||||
namespace nxp\RutilsBundle\Twig;
|
||||
|
||||
use php_rutils\RUtils;
|
||||
use php_rutils\struct\TimeParams;
|
||||
|
||||
class RutilsExtension extends \Twig_Extension
|
||||
{
|
||||
public function getFilters()
|
||||
{
|
||||
$numeral = RUtils::numeral();
|
||||
$date = RUtils::dt();
|
||||
$translit = RUtils::translit();
|
||||
$typography = RUtils::typo();
|
||||
return [
|
||||
new \Twig_SimpleFilter('getInWords', function ($amount, $gender = RUtils::MALE) use ($numeral) {
|
||||
return $numeral->getInWords($amount, $gender);
|
||||
}),
|
||||
new \Twig_SimpleFilter('getInWordsInt', function ($amount, $gender = RUtils::MALE) use ($numeral) {
|
||||
return $numeral->getInWordsInt($amount, $gender);
|
||||
}),
|
||||
new \Twig_SimpleFilter('getInWordsFloat', function ($amount, $gender = RUtils::MALE) use ($numeral) {
|
||||
return $numeral->getInWordsFloat($amount, $gender);
|
||||
}),
|
||||
new \Twig_SimpleFilter('getPlural', function ($amount, array $variants, $absence = null) use ($numeral) {
|
||||
return $numeral->getPlural($amount, $variants, $absence);
|
||||
}),
|
||||
new \Twig_SimpleFilter('choosePlural', function ($amount, array $variants) use ($numeral) {
|
||||
return $numeral->choosePlural($amount, $variants);
|
||||
}),
|
||||
new \Twig_SimpleFilter('sumString', function ($amount, $gender, array $variants = null) use ($numeral) {
|
||||
return $numeral->sumString($amount, $gender, $variants);
|
||||
}),
|
||||
new \Twig_SimpleFilter('getRubles', function ($amount, $zeroForKopeck = false) use ($numeral) {
|
||||
return $numeral->getRubles($amount, $zeroForKopeck);
|
||||
}),
|
||||
new \Twig_SimpleFilter('ruStrFTime', function (
|
||||
\DateTime $dateTime,
|
||||
$format = 'd F Y',
|
||||
$monthInflected = false,
|
||||
$dayInflected = false,
|
||||
$preposition = false,
|
||||
$timezone = null
|
||||
) use ($date) {
|
||||
$params = TimeParams::create(
|
||||
[
|
||||
'date' => $dateTime,
|
||||
'format' => $format,
|
||||
'monthInflected' => $monthInflected,
|
||||
'dayInflected' => $dayInflected,
|
||||
'preposition' => $preposition,
|
||||
'timezone' => $timezone
|
||||
]
|
||||
);
|
||||
return $date->ruStrFTime($params);
|
||||
}),
|
||||
new \Twig_SimpleFilter('distanceOfTimeInWords', function (
|
||||
$toTime,
|
||||
$fromTime = null,
|
||||
$accuracy = RUtils::ACCURACY_YEAR
|
||||
) use ($date) {
|
||||
return $date->distanceOfTimeInWords($toTime, $fromTime, $accuracy);
|
||||
}),
|
||||
new \Twig_SimpleFilter('getAge', function ($birthDate) use ($date) {
|
||||
return $date->getAge($birthDate);
|
||||
}),
|
||||
new \Twig_SimpleFilter('translify', function ($inString) use ($translit) {
|
||||
return $translit->translify($inString);
|
||||
}),
|
||||
new \Twig_SimpleFilter('detranslify', function ($inString) use ($translit) {
|
||||
return $translit->detranslify($inString);
|
||||
}),
|
||||
new \Twig_SimpleFilter('slugify', function ($inString) use ($translit) {
|
||||
return $translit->slugify($inString);
|
||||
}),
|
||||
new \Twig_SimpleFilter('typography', function ($text, array $rules = null) use ($typography) {
|
||||
return $typography->typography($text, $rules);
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function getFunctions()
|
||||
{
|
||||
$numeral = RUtils::numeral();
|
||||
$date = RUtils::dt();
|
||||
$translit = RUtils::translit();
|
||||
$typography = RUtils::typo();
|
||||
return [
|
||||
new \Twig_SimpleFunction('getInWords', function ($amount, $gender = RUtils::MALE) use ($numeral) {
|
||||
return $numeral->getInWords($amount, $gender);
|
||||
}),
|
||||
new \Twig_SimpleFunction('getInWordsInt', function ($amount, $gender = RUtils::MALE) use ($numeral) {
|
||||
return $numeral->getInWordsInt($amount, $gender);
|
||||
}),
|
||||
new \Twig_SimpleFunction('getInWordsFloat', function ($amount, $gender = RUtils::MALE) use ($numeral) {
|
||||
return $numeral->getInWordsFloat($amount, $gender);
|
||||
}),
|
||||
new \Twig_SimpleFunction('getPlural', function ($amount, array $variants, $absence = null) use ($numeral) {
|
||||
return $numeral->getPlural($amount, $variants, $absence);
|
||||
}),
|
||||
new \Twig_SimpleFunction('choosePlural', function ($amount, array $variants) use ($numeral) {
|
||||
return $numeral->choosePlural($amount, $variants);
|
||||
}),
|
||||
new \Twig_SimpleFunction('sumString', function ($amount, $gender, array $variants = null) use ($numeral) {
|
||||
return $numeral->sumString($amount, $gender, $variants);
|
||||
}),
|
||||
new \Twig_SimpleFunction('getRubles', function ($amount, $zeroForKopeck = false) use ($numeral) {
|
||||
return $numeral->getRubles($amount, $zeroForKopeck);
|
||||
}),
|
||||
new \Twig_SimpleFunction('ruStrFTime', function (
|
||||
\DateTime $dateTime,
|
||||
$format = 'd F Y',
|
||||
$monthInflected = false,
|
||||
$dayInflected = false,
|
||||
$preposition = false,
|
||||
$timezone = null
|
||||
) use ($date) {
|
||||
$params = TimeParams::create(
|
||||
[
|
||||
'date' => $dateTime,
|
||||
'format' => $format,
|
||||
'monthInflected' => $monthInflected,
|
||||
'dayInflected' => $dayInflected,
|
||||
'preposition' => $preposition,
|
||||
'timezone' => $timezone
|
||||
]
|
||||
);
|
||||
return $date->ruStrFTime($params);
|
||||
}),
|
||||
new \Twig_SimpleFunction('distanceOfTimeInWords', function (
|
||||
$toTime,
|
||||
$fromTime = null,
|
||||
$accuracy = RUtils::ACCURACY_YEAR
|
||||
) use ($date) {
|
||||
return $date->distanceOfTimeInWords($toTime, $fromTime, $accuracy);
|
||||
}),
|
||||
new \Twig_SimpleFunction('getAge', function ($birthDate) use ($date) {
|
||||
return $date->getAge($birthDate);
|
||||
}),
|
||||
new \Twig_SimpleFunction('translify', function ($inString) use ($translit) {
|
||||
return $translit->translify($inString);
|
||||
}),
|
||||
new \Twig_SimpleFunction('detranslify', function ($inString) use ($translit) {
|
||||
return $translit->detranslify($inString);
|
||||
}),
|
||||
new \Twig_SimpleFunction('slugify', function ($inString) use ($translit) {
|
||||
return $translit->slugify($inString);
|
||||
}),
|
||||
new \Twig_SimpleFunction('typography', function ($text, array $rules = null) use ($typography) {
|
||||
return $typography->typography($text, $rules);
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the extension.
|
||||
*
|
||||
* @return string The extension name
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return 'rutils_extension';
|
||||
}
|
||||
|
||||
}
|
22
composer.json
Normal file
22
composer.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"name": "nxp/rutils-bundle",
|
||||
"description": "Rutils Symfony 2 bundle",
|
||||
"minimum-stability": "stable",
|
||||
"keywords": ["russian", "numbers to text"],
|
||||
"homepage": "http://github.com/NeonXP/RutilsBundle",
|
||||
"license": "GPLv3",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Alexander 'NeonXP' Kiryukhin",
|
||||
"email": "frei@neonxp.info"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-0": {"NXP\\RutilsBundle": ""}
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"symfony/framework-bundle": "~2.2",
|
||||
"andre_487/php_rutils": "1.1.1"
|
||||
}
|
||||
}
|
9
nxpRutilsBundle.php
Normal file
9
nxpRutilsBundle.php
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace nxp\RutilsBundle;
|
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||
|
||||
class nxpRutilsBundle extends Bundle
|
||||
{
|
||||
}
|
Loading…
Reference in a new issue