diff --git a/README.md b/README.md index ef15c671..7d1f3d70 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Features - No external dependencies. - PSR-4 compatible. - Compatible with PHP >= 5.3.3 and [HHVM](http://hhvm.com). -- Integrations for [Symfony2](http://symfony.com), [Silex](http://silex.sensiolabs.org), [Laravel](http://laravel.com), [Twig](http://twig.sensiolabs.org) and [Zend Framework 2](http://framework.zend.com/). +- Integrations for [Symfony2](http://symfony.com), [Silex](http://silex.sensiolabs.org), [Laravel](http://laravel.com), [Twig](http://twig.sensiolabs.org), [Zend Framework 2](http://framework.zend.com/), [Nette Framework](http://nette.org/) and [Latte](http://latte.nette.org/). ¹ Some Esperanto transliterations conflict with others. You need to enable the Esperanto ruleset to use these transliterations. @@ -283,6 +283,53 @@ return array( ); ``` +### Nette Framework + +Slugify contains a Nette extension that allows you to use it as a service in your Nette application. You only need to register it in your `config.neon`: + +```yml +# app/config/config.neon + +extensions: + slugify: Cocur\Slugify\Bridge\Nette\SlugifyExtension +``` + +You can now use the `Cocur\Slugify\SlugifyInterface` service everywhere in your application, for example in your presenter: + +```php +class MyPresenter extends \Nette\Application\UI\Presenter +{ + + /** @var \Cocur\Slugify\SlugifyInterface @inject */ + public $slugify; + + public function renderDefault() + { + $this->template->hello = $this->slugify->slugify('Hällo Wörld'); + } + +} +``` + +### Latte + +If you use the Nette Framework with it's native Latte templating engine, you can use the Latte filter `slugify` in your templates after you have setup Nette extension (see above). + +```smarty +{$hello|slugify} +``` + +If you use Latte outside of the Nette Framework you first need to add the filter to your engine: + +```php +use Cocur\Slugify\Bridge\Latte\SlugifyHelper; +use Cocur\Slugify\Slugify; +use Latte; + +$latte = new Latte\Engine(); +$latte->addFilter('slugify', array(new SlugifyHelper(Slugify::create()), 'slugify')); +``` + Changelog --------- diff --git a/composer.json b/composer.json index b2180fa8..19e68a2e 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,9 @@ "zendframework/zend-view": "~2.2", "zendframework/zend-servicemanager": "~2.2", "codeclimate/php-test-reporter": "dev-master", - "laravel/framework": "~4.1" + "laravel/framework": "~4.1", + "nette/di": "~2.2", + "latte/latte": "~2.2" }, "autoload": { "psr-4": { diff --git a/src/Bridge/Latte/SlugifyHelper.php b/src/Bridge/Latte/SlugifyHelper.php new file mode 100644 index 00000000..0e8dce4e --- /dev/null +++ b/src/Bridge/Latte/SlugifyHelper.php @@ -0,0 +1,36 @@ + + * @license http://www.opensource.org/licenses/MIT The MIT License + */ +class SlugifyHelper +{ + + /** @var SlugifyInterface */ + private $slugify; + + public function __construct(SlugifyInterface $slugify) + { + $this->slugify = $slugify; + } + + /** + * @param string + * @param string + * @return string + */ + public function slugify($string, $separator = '-') + { + return $this->slugify->slugify($string, $separator); + } + +} diff --git a/src/Bridge/Nette/SlugifyExtension.php b/src/Bridge/Nette/SlugifyExtension.php new file mode 100644 index 00000000..c642a44c --- /dev/null +++ b/src/Bridge/Nette/SlugifyExtension.php @@ -0,0 +1,51 @@ + + * @license http://www.opensource.org/licenses/MIT The MIT License + */ +class SlugifyExtension extends CompilerExtension +{ + + public function loadConfiguration() + { + $builder = $this->getContainerBuilder(); + + $builder->addDefinition($this->prefix('slugify')) + ->setClass('Cocur\Slugify\SlugifyInterface') + ->setFactory('Cocur\Slugify\Slugify'); + + $builder->addDefinition($this->prefix('helpers')) + ->setClass('Cocur\Slugify\Bridge\Latte\SlugifyHelper') + ->setInject(false); + } + + public function beforeCompile() + { + $builder = $this->getContainerBuilder(); + + $self = $this; + $registerToLatte = function(ServiceDefinition $def) use ($self) { + $def->addSetup('addFilter', array('slugify', array($self->prefix('@helpers'), 'slugify'))); + }; + + $latteFactory = $builder->getByType('Nette\Bridges\ApplicationLatte\ILatteFactory') ?: 'nette.latteFactory'; + if ($builder->hasDefinition($latteFactory)) { + $registerToLatte($builder->getDefinition($latteFactory)); + } + + if ($builder->hasDefinition('nette.latte')) { + $registerToLatte($builder->getDefinition('nette.latte')); + } + } + +}