This package is not installable via Composer 1.x, please make sure you upgrade to Composer 2+. Read more about our Composer 1.x deprecation policy.

Laminas Project Romans Integration

v1.1.1 2021-04-01 00:44 UTC

This package is auto-updated.

Last update: 2021-12-01 00:14:21 UTC


Laminas Project Romans Integration

Build Status Latest Stable Version License


This package provides a Laminas Project integration for Romans library, providing tools to filter a string with a Roman number to int and vice-versa, validate a string that contains this type of number and, finally, hydrate the content to int.


This package uses Composer as default repository. You can install it adding the name of package in require attribute of composer.json, pointing to the last stable version.

    "require": {
        "wandersonwhcr/laminas-romans": "^1.0"


This package provide filters, validators and hydrators to use with Laminas projects. Also, this package is provided as a Laminas module, automatically configuring services inside application, but this action is not required.


Laminas Romans provides a couple of filters to convert a string with Roman number to int and a Integer to a string that represents the input as Roman number.

use Laminas\Romans\Filter\RomanToInt as RomanToIntFilter;
use Laminas\Romans\Filter\IntToRoman as IntToRomanFilter;

$value = 'MCMXCIX';

$filter = new RomanToIntFilter();
$value  = $filter->filter($value); // 1999

$filter = new IntToRomanFilter();
$value  = $filter->filter($value); // MCMXCIX


Also, this package include a validator to verify if a string contains a valid Roman number.

use Laminas\Romans\Validator\Roman as RomanValidator;

$validator = new RomanValidator();

$result = $validator->isValid('MCMXCIX'); // true

$result   = $validator->isValid('IAI'); // false
$messages = $validator->getMessages();

$messages = [
    'unknownToken' => 'Unknown token "A" at position 1',

$result   = $validator->isValid('XIIIX'); // false
$messages = $validator->getMessages();

$messages = [
    'invalidRoman' => 'Invalid Roman number "XIIX"',


There is a hydrator strategy, responsible to handle Roman numbers. Like any other Laminas strategy, exceptions will be throw for errors.

use InvalidArgumentException;
use Laminas\Romans\Hydrator\Strategy\Roman as RomanHydratorStrategy;

$value    = 'MCMXCIX';
$strategy = new RomanHydratorStrategy();

try {
    $value = $strategy->hydrate($value); // 1999
    $value = $strategy->extract($value); // MCMXCIX
} catch (InvalidArgumentException $e) {
    // unable to convert


Finally, there is a view helper to convert int to Roman numbers directly, using an internal filter for this job.

use Laminas\Romans\View\Helper\Roman as RomanViewHelper;

$helper = new RomanViewHelper();

// Simple Access
echo $helper(1999); // MCMXCIX

// ... or Inside ViewRenderer
echo $this->roman(1999); // MCMXCIX


This package is provided as a Laminas module. To initialize this module, add the package namespace into application loaded modules configuration.

return [
    'modules' => [
        // ...
        // ...

Using this feature you must require Laminas ModuleManager and ServiceManager in your composer.json file.

    "require": {
        "laminas/laminas-modulemanager": "2.10.*",
        "laminas/laminas-servicemanager": "3.6.*"

Services Available

If you configure this package as a Laminas module, there is a lot of services configured. The list below shows all services available with Laminas\Romans module. Items with double-arrow represents services aliases.

  • Romans\Grammar\Grammar
  • Romans\Lexer\Lexer
  • Romans\Parser\Parser
  • Romans\Filter\IntToRoman
  • Romans\Filter\RomanToInt
  • Laminas\Romans\Hydrator\Strategy\Roman
  • FilterManager
    • Laminas\Romans\Filter\IntToRoman
    • Laminas\Romans\Filter\RomanToInt
    • IntToRoman => Laminas\Romans\Filter\IntToRoman
    • intToRoman => Laminas\Romans\Filter\IntToRoman
    • inttoroman => Laminas\Romans\Filter\IntToRoman
    • RomanToInt => Laminas\Romans\Filter\RomanToInt
    • romanToInt => Laminas\Romans\Filter\RomanToInt
    • romantoint => Laminas\Romans\Filter\RomanToInt
  • ValidatorManager
    • Laminas\Romans\Validator\Roman
    • Roman => Laminas\Romans\Validator\Roman
    • roman => Laminas\Romans\Validator\Roman
  • ViewHelperManager
    • Laminas\Romans\View\Helper\Roman
    • Roman => Laminas\Romans\View\Helper\Roman
    • roman => Laminas\Romans\View\Helper\Roman


You can use Docker Compose to build an image and run a container to develop and test this package.

docker-compose build
docker-compose run romans composer install
docker-compose run romans composer test


This package is opensource and available under license MIT described in LICENSE.