Issue #2868258 by joegraduate, Lendude, Jons, dawehner, alexpott, larowlan: Missing View not helpfully reported in preRenderViewElement()

merge-requests/663/head
Lee Rowlands 2021-05-12 16:53:45 +10:00
parent 79dd8321b2
commit 1ab0f4844b
No known key found for this signature in database
GPG Key ID: 2B829A3DF9204DC4
3 changed files with 28 additions and 0 deletions

View File

@ -3,6 +3,7 @@
namespace Drupal\views\Element;
use Drupal\Core\Render\Element\RenderElement;
use Drupal\views\Exception\ViewRenderElementException;
use Drupal\views\Views;
/**
@ -41,6 +42,9 @@ class View extends RenderElement {
if (!isset($element['#view'])) {
$view = Views::getView($element['#name']);
if (!$view) {
throw new ViewRenderElementException("Invalid View name ({$element['#name']}) given.");
}
}
else {
$view = $element['#view'];

View File

@ -0,0 +1,8 @@
<?php
namespace Drupal\views\Exception;
/**
* Defines an exception for an invalid View render element.
*/
class ViewRenderElementException extends \Exception {}

View File

@ -2,6 +2,7 @@
namespace Drupal\Tests\views\Kernel;
use Drupal\views\Exception\ViewRenderElementException;
use Drupal\views\Views;
/**
@ -129,4 +130,19 @@ class ViewElementTest extends ViewsKernelTestBase {
$this->assertCount(1, $this->xpath('//form[@class="views-exposed-form"]'));
}
/**
* Tests that an exception is thrown when an invalid View is passed.
*/
public function testInvalidView() {
$renderer = $this->container->get('renderer');
$render_element = [
'#type' => 'view',
'#name' => 'invalid_view_name',
'#embed' => FALSE,
];
$this->expectException(ViewRenderElementException::class);
$this->expectExceptionMessage("Invalid View name ({$render_element['#name']}) given.");
$renderer->renderRoot($render_element);
}
}