123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- Introduction
- ============
- The Doctrine Inflector has methods for inflecting text. The features include pluralization,
- singularization, converting between camelCase and under_score and capitalizing
- words.
- Installation
- ============
- You can install the Inflector with composer:
- .. code-block:: console
- $ composer require doctrine/inflector
- Usage
- =====
- Using the inflector is easy, you can create a new ``Doctrine\Inflector\Inflector`` instance by using
- the ``Doctrine\Inflector\InflectorFactory`` class:
- .. code-block:: php
- use Doctrine\Inflector\InflectorFactory;
- $inflector = InflectorFactory::create()->build();
- By default it will create an English inflector. If you want to use another language, just pass the language
- you want to create an inflector for to the ``createForLanguage()`` method:
- .. code-block:: php
- use Doctrine\Inflector\InflectorFactory;
- use Doctrine\Inflector\Language;
- $inflector = InflectorFactory::createForLanguage(Language::SPANISH)->build();
- The supported languages are as follows:
- - ``Language::ENGLISH``
- - ``Language::FRENCH``
- - ``Language::NORWEGIAN_BOKMAL``
- - ``Language::PORTUGUESE``
- - ``Language::SPANISH``
- - ``Language::TURKISH``
- If you want to manually construct the inflector instead of using a factory, you can do so like this:
- .. code-block:: php
- use Doctrine\Inflector\CachedWordInflector;
- use Doctrine\Inflector\RulesetInflector;
- use Doctrine\Inflector\Rules\English;
- $inflector = new Inflector(
- new CachedWordInflector(new RulesetInflector(
- English\Rules::getSingularRuleset()
- )),
- new CachedWordInflector(new RulesetInflector(
- English\Rules::getPluralRuleset()
- ))
- );
- Adding Languages
- ----------------
- If you are interested in adding support for your language, take a look at the other languages defined in the
- ``Doctrine\Inflector\Rules`` namespace and the tests located in ``Doctrine\Tests\Inflector\Rules``. You can copy
- one of the languages and update the rules for your language.
- Once you have done this, send a pull request to the ``doctrine/inflector`` repository with the additions.
- Custom Setup
- ============
- If you want to setup custom singular and plural rules, you can configure these in the factory:
- .. code-block:: php
- use Doctrine\Inflector\InflectorFactory;
- use Doctrine\Inflector\Rules\Pattern;
- use Doctrine\Inflector\Rules\Patterns;
- use Doctrine\Inflector\Rules\Ruleset;
- use Doctrine\Inflector\Rules\Substitution;
- use Doctrine\Inflector\Rules\Substitutions;
- use Doctrine\Inflector\Rules\Transformation;
- use Doctrine\Inflector\Rules\Transformations;
- use Doctrine\Inflector\Rules\Word;
- $inflector = InflectorFactory::create()
- ->withSingularRules(
- new Ruleset(
- new Transformations(
- new Transformation(new Pattern('/^(bil)er$/i'), '\1'),
- new Transformation(new Pattern('/^(inflec|contribu)tors$/i'), '\1ta')
- ),
- new Patterns(new Pattern('singulars')),
- new Substitutions(new Substitution(new Word('spins'), new Word('spinor')))
- )
- )
- ->withPluralRules(
- new Ruleset(
- new Transformations(
- new Transformation(new Pattern('^(bil)er$'), '\1'),
- new Transformation(new Pattern('^(inflec|contribu)tors$'), '\1ta')
- ),
- new Patterns(new Pattern('noflect'), new Pattern('abtuse')),
- new Substitutions(
- new Substitution(new Word('amaze'), new Word('amazable')),
- new Substitution(new Word('phone'), new Word('phonezes'))
- )
- )
- )
- ->build();
- No operation inflector
- ----------------------
- The ``Doctrine\Inflector\NoopWordInflector`` may be used to configure an inflector that doesn't perform any operation for
- pluralization and/or singularization. If will simply return the input as output.
- This is an implementation of the `Null Object design pattern <https://sourcemaking.com/design_patterns/null_object>`_.
- .. code-block:: php
- use Doctrine\Inflector\Inflector;
- use Doctrine\Inflector\NoopWordInflector;
- $inflector = new Inflector(new NoopWordInflector(), new NoopWordInflector());
- Tableize
- ========
- Converts ``ModelName`` to ``model_name``:
- .. code-block:: php
- echo $inflector->tableize('ModelName'); // model_name
- Classify
- ========
- Converts ``model_name`` to ``ModelName``:
- .. code-block:: php
- echo $inflector->classify('model_name'); // ModelName
- Camelize
- ========
- This method uses `Classify`_ and then converts the first character to lowercase:
- .. code-block:: php
- echo $inflector->camelize('model_name'); // modelName
- Capitalize
- ==========
- Takes a string and capitalizes all of the words, like PHP's built-in
- ``ucwords`` function. This extends that behavior, however, by allowing the
- word delimiters to be configured, rather than only separating on
- whitespace.
- Here is an example:
- .. code-block:: php
- $string = 'top-o-the-morning to all_of_you!';
- echo $inflector->capitalize($string); // Top-O-The-Morning To All_of_you!
- echo $inflector->capitalize($string, '-_ '); // Top-O-The-Morning To All_Of_You!
- Pluralize
- =========
- Returns a word in plural form.
- .. code-block:: php
- echo $inflector->pluralize('browser'); // browsers
- Singularize
- ===========
- Returns a word in singular form.
- .. code-block:: php
- echo $inflector->singularize('browsers'); // browser
- Urlize
- ======
- Generate a URL friendly string from a string of text:
- .. code-block:: php
- echo $inflector->urlize('My first blog post'); // my-first-blog-post
- Unaccent
- ========
- You can unaccent a string of text using the ``unaccent()`` method:
- .. code-block:: php
- echo $inflector->unaccent('año'); // ano
- Legacy API
- ==========
- As of 1.4.0, the API present in Inflector 1.x has been marked as deprecated. In the 2.x release series,
- the legacy API has been dropped completely.
- Support for languages other than English is available in the 2.0 API only.
- Acknowledgements
- ================
- The language rules in this library have been adapted from several different sources, including but not limited to:
- - `Ruby On Rails Inflector <http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html>`_
- - `ICanBoogie Inflector <https://github.com/ICanBoogie/Inflector>`_
- - `CakePHP Inflector <https://book.cakephp.org/3.0/en/core-libraries/inflector.html>`_
|