Edit

Introduction

The Doctrine Inflector has static methods for inflecting text. The features include pluralization, singularization, converting between camelCase and under_score and capitalizing words.

All you need to use the Inflector is the Doctrine\Common\Inflector\Inflector class.

Installation

You can install the Inflector with composer:

$ composer require doctrine/inflector

Here are the available methods that you can use:

Tableize

Converts ModelName to model_name:

echo Inflector::tableize('ModelName'); // model_name

Classify

Converts model_name to ModelName:

echo Inflector::classify('model_name'); // ModelName

Camelize

This method uses Classify and then converts the first character to lowercase:

echo Inflector::camelize('model_name'); // modelName

ucwords

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:

$string = 'top-o-the-morning to all_of_you!';

echo Inflector::ucwords($string); // Top-O-The-Morning To All_of_you!

echo Inflector::ucwords($string, '-_ '); // Top-O-The-Morning To All_Of_You!

Pluralize

Returns a word in plural form.

echo Inflector::pluralize('browser'); // browsers

Singularize

echo Inflector::singularize('browsers'); // browser

Rules

Customize the rules for pluralization and singularization:

Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']);
Inflector::rules('plural', [
    'rules' => ['/^(inflect)ors$/i' => '\1ables'],
    'uninflected' => ['dontinflectme'],
    'irregular' => ['red' => 'redlings']
]);

The arguments for the rules method are:

  • $type - The type of inflection, either plural or singular
  • $rules - An array of rules to be added.
  • $reset - If true, will unset default inflections for all new rules that are being defined in $rules.

Reset

Clears Inflectors inflected value caches, and resets the inflection rules to the initial values.

Inflector::reset();

Slugify

You can easily use the Inflector to create a slug from a string of text by using the tableize method and replacing underscores with hyphens:

public static function slugify(string $text) : string
{
    return str_replace('_', '-', Inflector::tableize($text));
}