By dawehner on
Change record status:
Published (View all published change records)
Project:
Introduced in branch:
8.0.x
Introduced in version:
8.0.0-RC2
Issue links:
Description:
Writing an entity type can be a lot of work, especially when it comes down to deal with routing.
#2578955: Implement auto route generation but DON'T use it for all core entities added a couple of things to make the life easier:
A html route provider
See \Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider
Before
# In the .routing.yml file
entity.aggregator_feed.canonical:
path: '/aggregator/sources/{aggregator_feed}'
defaults:
_entity_view: 'aggregator_feed'
_title_callback: '\Drupal\aggregator\Controller\AggregatorController::feedTitle'
requirements:
_permission: 'access news feeds'
entity.aggregator_feed.edit_form:
path: '/aggregator/sources/{aggregator_feed}/configure'
defaults:
_entity_form: 'aggregator_feed.default'
_title: 'Configure'
requirements:
_permission: 'administer news feeds'
options:
_admin_route: TRUE
entity.aggregator_feed.delete_form:
path: '/aggregator/sources/{aggregator_feed}/delete'
defaults:
_entity_form: 'aggregator_feed.delete'
_title: 'Delete feed'
requirements:
_permission: 'administer news feeds'
options:
_admin_route: TRUE
After
# In the entity annotation
* @ContentEntityType(
* id = "aggregator_feed",
* label = @Translation("Aggregator feed"),
* handlers = {
* "route_provider" = {
* "html" = "Drupal\aggregator\FeedHtmlRouteProvider",
* },
* },
This will automatically generate the routes
Generic title callbacks
Even if you don't use the route providers you can still save a little bit of code:
Before
entity.aggregator_feed.canonical:
path: '/aggregator/sources/{aggregator_feed}'
defaults:
_entity_view: 'aggregator_feed'
_title_callback: '\Drupal\aggregator\Controller\AggregatorController::feedTitle'
entity.aggregator_feed.edit_form:
path: '/aggregator/sources/{aggregator_feed}/configure'
defaults:
_entity_form: 'aggregator_feed.default'
_title: 'Configure'
entity.aggregator_feed.delete_form:
path: '/aggregator/sources/{aggregator_feed}/delete'
defaults:
_title: 'Delete feed'
After
entity.aggregator_feed.canonical:
path: '/aggregator/sources/{aggregator_feed}'
defaults:
_entity_view: 'aggregator_feed'
_title_callback: '\Drupal\Core\Entity\Controller\EntityController::title'
entity.aggregator_feed.edit_form:
path: '/aggregator/sources/{aggregator_feed}/configure'
defaults:
_entity_form: 'aggregator_feed.default'
_title_callback: '\Drupal\Core\Entity\Controller\EntityController::editTitle'
entity.aggregator_feed.delete_form:
path: '/aggregator/sources/{aggregator_feed}/delete'
defaults:
_title_callback: '\Drupal\Core\Entity\Controller\EntityController::deleteTitle'
Impacts:
Module developers
Comments
In case anyone was wondering:
In case anyone was wondering: Currently, FeedHtmlRouteProvider extends AdminHtmlRouteProvider which in turn extends DefaultHtmlRouteProvider. The example above doesn't really mention this, but DefaultHtmlRouteProvider is indeed being used here.