Like most API components, FieldTypes use the Symfony 2 service tag mechanism.
The principle is quite simple: a service can be assigned one or several tags, with specific parameters. When the dependency injection container is compiled into a PHP file, tags are read by
CompilerPass implementations that add extra handling for tagged services. For FieldTypes, each Each service tagged as
ezpublish.fieldType is added to a registry using the alias argument as its unique identifier (
ezxmltext…). Each FieldType must also inherit from the abstract ezpublish.fieldType service. This ensures that the initialization steps shared by all fieldtypes are executed.