To complete the implementation, we must register our FieldType Field Type with Symfony , by creating a service for it.
Services are by default declared by bundles in Resources/config/services.yml
.
Note | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
In order to be closer with to the kernel best practices, we could declare our FieldType Field Type services in a custom All we have to do is instruct the bundle to actually load this file in addition to Inside this file, file, find this line:
This is where our bundle tells Symfony that when parameters are loaded,
|
Like most API components, FieldTypes Field Types 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. Each service tagged as ezpublish.fieldType
is is added to a registry using the alias argument as its unique identifier (ezstring
, ezxmltext
…, etc.). Each FieldType Field Type must also inherit from the abstract ezpublish.fieldType service. This ensures that the initialization steps shared by all fieldtypes Field Types are executed.
Here is the service definition for our Tweet type:
Code Block | ||
---|---|---|
| ||
parameters: ezsystems.tweetfieldtypebundle.fieldType.eztweet.class: EzSystems\TweetFieldTypeBundle\eZ\Publish\FieldType\Tweet\Type services: ezsystems.tweetfieldtypebundle.fieldType.eztweet: parent: ezpublish.fieldType class: %ezsystems.tweetfieldtypebundle.fieldType.eztweet.class% tags: - {name: ezpublish.fieldType, alias: eztweet} |
We take care of namespacing our fieldtype Field Type with our vendor and bundle name to limit the risk of naming conflicts.