Skip to content
Snippets Groups Projects
Commit 373c3da2 authored by catch's avatar catch
Browse files

Issue #2897251 by murilohp, Bhanu951, heddn, smustgrave: EntityController...

Issue #2897251 by murilohp, Bhanu951, heddn, smustgrave: EntityController doesn't pass dynamic route parameters
parent 8a993aec
No related branches found
No related tags found
29 merge requests!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
...@@ -67,6 +67,11 @@ class EntityController implements ContainerInjectionInterface { ...@@ -67,6 +67,11 @@ class EntityController implements ContainerInjectionInterface {
*/ */
protected UrlGeneratorInterface $urlGenerator; protected UrlGeneratorInterface $urlGenerator;
/**
* The route match.
*/
protected RouteMatchInterface $routeMatch;
/** /**
* Constructs a new EntityController. * Constructs a new EntityController.
* *
...@@ -82,14 +87,21 @@ class EntityController implements ContainerInjectionInterface { ...@@ -82,14 +87,21 @@ class EntityController implements ContainerInjectionInterface {
* The string translation. * The string translation.
* @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
* The URL generator. * The URL generator.
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
* The route match.
*/ */
public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, EntityRepositoryInterface $entity_repository, RendererInterface $renderer, TranslationInterface $string_translation, UrlGeneratorInterface $url_generator) { public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $entity_type_bundle_info, EntityRepositoryInterface $entity_repository, RendererInterface $renderer, TranslationInterface $string_translation, UrlGeneratorInterface $url_generator, RouteMatchInterface $route_match = NULL) {
$this->entityTypeManager = $entity_type_manager; $this->entityTypeManager = $entity_type_manager;
$this->entityTypeBundleInfo = $entity_type_bundle_info; $this->entityTypeBundleInfo = $entity_type_bundle_info;
$this->entityRepository = $entity_repository; $this->entityRepository = $entity_repository;
$this->renderer = $renderer; $this->renderer = $renderer;
$this->stringTranslation = $string_translation; $this->stringTranslation = $string_translation;
$this->urlGenerator = $url_generator; $this->urlGenerator = $url_generator;
if ($route_match === NULL) {
@trigger_error('Calling ' . __METHOD__ . '() without the $route_match argument is deprecated in drupal:10.1.0 and it will be required in drupal:11.0.0. See https://www.drupal.org/node/3337782', E_USER_DEPRECATED);
$route_match = \Drupal::service('current_route_match');
}
$this->routeMatch = $route_match;
} }
/** /**
...@@ -102,7 +114,8 @@ public static function create(ContainerInterface $container) { ...@@ -102,7 +114,8 @@ public static function create(ContainerInterface $container) {
$container->get('entity.repository'), $container->get('entity.repository'),
$container->get('renderer'), $container->get('renderer'),
$container->get('string_translation'), $container->get('string_translation'),
$container->get('url_generator') $container->get('url_generator'),
$container->get('current_route_match')
); );
} }
...@@ -182,7 +195,9 @@ public function addPage($entity_type_id) { ...@@ -182,7 +195,9 @@ public function addPage($entity_type_id) {
if (count($bundles) == 1) { if (count($bundles) == 1) {
$bundle_names = array_keys($bundles); $bundle_names = array_keys($bundles);
$bundle_name = reset($bundle_names); $bundle_name = reset($bundle_names);
return $this->redirect($form_route_name, [$bundle_argument => $bundle_name]); $parameters = $this->routeMatch->getRawParameters()->all();
$parameters[$bundle_argument] = $bundle_name;
return $this->redirect($form_route_name, $parameters);
} }
// Prepare the #bundles array for the template. // Prepare the #bundles array for the template.
foreach ($bundles as $bundle_name => $bundle_info) { foreach ($bundles as $bundle_name => $bundle_info) {
......
<?php
namespace Drupal\entity_test\Entity;
/**
* Test entity class routes.
*
* @ContentEntityType(
* id = "entity_test_add_page",
* label = @Translation("Entity test route add page"),
* handlers = {
* "form" = {
* "default" = "Drupal\entity_test\EntityTestForm",
* },
* "route_provider" = {
* "html" = "Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider",
* },
* },
* admin_permission = "administer entity_test content",
* base_table = "entity_test_add_page",
* render_cache = FALSE,
* entity_keys = {
* "id" = "id",
* "uuid" = "uuid",
* "bundle" = "type",
* "label" = "name",
* },
* links = {
* "add-page" = "/entity_test_add_page/{user}/add",
* "add-form" = "/entity_test_add_page/add/{user}/form",
* },
* )
*/
class EntityTestAddPage extends EntityTest {
}
...@@ -28,16 +28,23 @@ class EntityFormTest extends BrowserTestBase { ...@@ -28,16 +28,23 @@ class EntityFormTest extends BrowserTestBase {
*/ */
protected $defaultTheme = 'stark'; protected $defaultTheme = 'stark';
/**
* The current user of the test.
*
* @var \Drupal\user\Entity\User|false
*/
protected $webUser;
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
protected function setUp(): void { protected function setUp(): void {
parent::setUp(); parent::setUp();
$web_user = $this->drupalCreateUser([ $this->webUser = $this->drupalCreateUser([
'administer entity_test content', 'administer entity_test content',
'view test entity', 'view test entity',
]); ]);
$this->drupalLogin($web_user); $this->drupalLogin($this->webUser);
// Add a language. // Add a language.
ConfigurableLanguage::createFromLangcode('ro')->save(); ConfigurableLanguage::createFromLangcode('ro')->save();
...@@ -221,4 +228,13 @@ public function testValidationHandlers() { ...@@ -221,4 +228,13 @@ public function testValidationHandlers() {
$this->assertEquals('Drupal\\Core\\Entity\\EntityStorageException: Entity validation was skipped.', $state->get('entity_test.form.save.exception'), 'Button-level validation handlers behave correctly.'); $this->assertEquals('Drupal\\Core\\Entity\\EntityStorageException: Entity validation was skipped.', $state->get('entity_test.form.save.exception'), 'Button-level validation handlers behave correctly.');
} }
/**
* Tests the route add-page with multiple parameters.
*/
public function testAddPageWithMultipleParameters(): void {
$this->drupalGet('entity_test_add_page/' . $this->webUser->id() . '/add');
$this->assertSession()->statusCodeEquals(200);
$this->assertSession()->pageTextContains('Add entity test route add page');
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment