Skip to content

Commit c034337

Browse files
authored
Merge pull request #292 from alexpott/fix/render-callback
Fix/render callback
2 parents 82c0c89 + cc66606 commit c034337

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

src/Rules/Drupal/RenderCallbackRule.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use PHPStan\Type\Constant\ConstantIntegerType;
1717
use PHPStan\Type\Constant\ConstantStringType;
1818
use PHPStan\Type\ObjectType;
19+
use PHPStan\Type\UnionType;
1920
use PHPStan\Type\VerbosityLevel;
2021

2122
final class RenderCallbackRule implements Rule
@@ -59,7 +60,10 @@ public function processNode(Node $node, Scope $scope): array
5960
return [];
6061
}
6162

62-
$trustedCallbackType = new ObjectType('Drupal\Core\Security\TrustedCallbackInterface');
63+
$trustedCallbackType = new UnionType([
64+
new ObjectType('Drupal\Core\Security\TrustedCallbackInterface'),
65+
new ObjectType('Drupal\Core\Render\Element\RenderCallbackInterface'),
66+
]);
6367
$errors = [];
6468
foreach ($value->items as $pos => $item) {
6569
if (!$item instanceof Node\Expr\ArrayItem) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Drupal\pre_render_callback_rule;
4+
5+
use Drupal\Core\Render\Element\RenderCallbackInterface;
6+
use Drupal\Core\Url;
7+
8+
final class RenderCallbackInterfaceObject implements RenderCallbackInterface {
9+
10+
public function staticCallback(): array {
11+
return [
12+
'#type' => 'link',
13+
'#url' => Url::fromRoute('<front>'),
14+
'#title' => 'FooBar',
15+
'#pre_render' => [
16+
[$this, 'preRenderCallback'],
17+
]
18+
];
19+
}
20+
21+
public static function preRenderCallback(array $element) {
22+
return $element;
23+
}
24+
25+
}

tests/src/Rules/PreRenderCallbackRuleTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ public function fileData(): \Generator
6565
__DIR__ . '/../../fixtures/drupal/modules/pre_render_callback_rule/src/RenderArrayWithPreRenderCallback.php',
6666
[]
6767
];
68+
yield [
69+
__DIR__ . '/../../fixtures/drupal/modules/pre_render_callback_rule/src/RenderCallbackInterfaceObject.php',
70+
[]
71+
];
6872
yield [
6973
__DIR__ . '/../../fixtures/drupal/modules/pre_render_callback_rule/src/FormWithClosure.php',
7074
[

0 commit comments

Comments
 (0)