protected DefaultHtmlRouteProvider::getAddFormRoute(EntityTypeInterface $entity_type)
Gets the add-form route.
Parameters
\Drupal\Core\Entity\EntityTypeInterface $entity_type: The entity type.
Return value
\Symfony\Component\Routing\Route|null The generated route, if available.
File
- core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php, line 138
Class
- DefaultHtmlRouteProvider
- Provides HTML routes for entities.
Namespace
Drupal\Core\Entity\Routing
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | protected function getAddFormRoute(EntityTypeInterface $entity_type ) { if ( $entity_type ->hasLinkTemplate( 'add-form' )) { $entity_type_id = $entity_type ->id(); $route = new Route( $entity_type ->getLinkTemplate( 'add-form' )); // Use the add form handler, if available, otherwise default. $operation = 'default' ; if ( $entity_type ->getFormClass( 'add' )) { $operation = 'add' ; } $route ->setDefaults([ '_entity_form' => "{$entity_type_id}.{$operation}" , 'entity_type_id' => $entity_type_id , ]); // If the entity has bundles, we can provide a bundle-specific title // and access requirements. $expected_parameter = $entity_type ->getBundleEntityType() ? : $entity_type ->getKey( 'bundle' ); // @todo: We have to check if a route contains a bundle in its path as // test entities have inconsistent usage of "add-form" link templates. // Fix it in https://www.drupal.org/node/2699959. if (( $bundle_key = $entity_type ->getKey( 'bundle' )) && strpos ( $route ->getPath(), '{' . $expected_parameter . '}' ) !== FALSE) { $route ->setDefault( '_title_callback' , EntityController:: class . '::addBundleTitle' ); // If the bundles are entities themselves, we can add parameter // information to the route options. if ( $bundle_entity_type_id = $entity_type ->getBundleEntityType()) { $bundle_entity_type = $this ->entityTypeManager->getDefinition( $bundle_entity_type_id ); $route // The title callback uses the value of the bundle parameter to // fetch the respective bundle at runtime. ->setDefault( 'bundle_parameter' , $bundle_entity_type_id ) ->setRequirement( '_entity_create_access' , $entity_type_id . ':{' . $bundle_entity_type_id . '}' ); // Entity types with serial IDs can specify this in their route // requirements, improving the matching process. if ( $this ->getEntityTypeIdKeyType( $bundle_entity_type ) === 'integer' ) { $route ->setRequirement( $entity_type_id , '\d+' ); } $bundle_entity_parameter = [ 'type' => 'entity:' . $bundle_entity_type_id ]; if ( $bundle_entity_type instanceof ConfigEntityTypeInterface) { // The add page might be displayed on an admin path. Even then, we // need to load configuration overrides so that, for example, the // bundle label gets translated correctly. // @see \Drupal\Core\ParamConverter\AdminPathConfigEntityConverter $bundle_entity_parameter [ 'with_config_overrides' ] = TRUE; } $route ->setOption( 'parameters' , [ $bundle_entity_type_id => $bundle_entity_parameter ]); } else { // If the bundles are not entities, the bundle key is used as the // route parameter name directly. $route ->setDefault( 'bundle_parameter' , $bundle_key ) ->setRequirement( '_entity_create_access' , $entity_type_id . ':{' . $bundle_key . '}' ); } } else { $route ->setDefault( '_title_callback' , EntityController:: class . '::addTitle' ) ->setRequirement( '_entity_create_access' , $entity_type_id ); } return $route ; } } |
Please login to continue.