Problem/Motivation

When the block is loaded on pages that are not the front page, the following error is thrown:

The website encountered an unexpected error. Please try again later.
TypeError: property_exists(): Argument #1 ($object_or_class) must be of type object|string, null given in property_exists() (line 280 of modules/contrib/language_switcher_enhanced/src/Plugin/Block/LanguageSwitcherEnhancedBlock.php).
property_exists(NULL, 'links') (Line: 280)
Drupal\language_switcher_enhanced\PLugin\Block\LanguageSwitcherEnhancedBlock->getLinks() (Line: 241)
Drupal\language_switcher_enhanced\PLugin\Block\LanguageSwitcherEnhancedBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 161)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 149)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 128)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 718)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

Steps to reproduce

Enable module
Place block
Create a page that is not the front page

Proposed resolution

On line 278 of LanguageSwitcherEnhancedBlock.php, the $links variable can be set to NULL. This should be checked before trying to access properties of the variable.
$links = $this->languageManager->getLanguageSwitchLinks($type, Url::fromRoute($route_name));

On line 241, the $links can be set to FALSE, this should be checked before trying manipulate the variable.

Furthermore, the culprit in this case seems to be the tag used on line 275 of LanguageSwitcherEnhancedBlock.php.
Instead of loading the route name, it could build the Url object here. This allows us to use Url::fromRouteMatch($this->routeMatch) alongside the front page tag.

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

Mauro_ created an issue. See original summary.

mauro_’s picture

Status: Active » Needs review
jeroent’s picture

Status: Needs review » Fixed

Merged to 2.0.x Thanks!

jeroent’s picture

  • JeroenT committed aa1f4be3 on 2.x authored by Mauro_
    Issue #3348455 by Mauro_, JeroenT: TypeError: property_exists():...

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.