• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tempestphp / tempest-framework / 14637692903

24 Apr 2025 09:02AM UTC coverage: 80.212%. First build
14637692903

Pull #1169

github

web-flow
Merge eb88dffd2 into 077cc7d59
Pull Request #1169: feat(view): dynamic view components

26 of 28 new or added lines in 2 files covered. (92.86%)

11780 of 14686 relevant lines covered (80.21%)

105.53 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.0
/src/Tempest/View/src/Components/DynamicViewComponent.php
1
<?php
2

3
namespace Tempest\View\Components;
4

5
use Tempest\Container\Container;
6
use Tempest\Core\AppConfig;
7
use Tempest\View\Elements\ElementFactory;
8
use Tempest\View\Elements\ViewComponentElement;
9
use Tempest\View\GenericView;
10
use Tempest\View\Parser\TempestViewCompiler;
11
use Tempest\View\Parser\Token;
12
use Tempest\View\ViewComponent;
13
use Tempest\View\ViewConfig;
14
use Tempest\View\ViewRenderer;
15

16
final class DynamicViewComponent implements ViewComponent
17
{
18
    private Token $token;
19

20
    public function __construct(
2✔
21
        private AppConfig $appConfig,
22
        private TempestViewCompiler $compiler,
23
        private ElementFactory $elementFactory,
24
        private ViewConfig $viewConfig,
25
    ) {}
2✔
26

27
    public function setToken(Token $token): void
2✔
28
    {
29
        $this->token = $token;
2✔
30
    }
31

NEW
32
    public static function getName(): string
×
33
    {
NEW
34
        return 'x-dynamic-component';
×
35
    }
36

37
    public function compile(ViewComponentElement $element): string
2✔
38
    {
39
        $name = $this->token->getAttribute('is') ?? $this->token->getAttribute(':is');
2✔
40
        $isExpression = $this->token->getAttribute(':is') !== null;
2✔
41

42
        return sprintf(
2✔
43
            '<?php eval(\'?>\' . \Tempest\get(%s::class)->render(%s, %s)); ?>',
2✔
44
            self::class,
2✔
45
            $isExpression ? $name : "'{$name}'",
2✔
46
            var_export($element->getAttributes(), true), // @mago-expect best-practices/no-debug-symbols
2✔
47
        );
2✔
48
    }
49

50
    public function render(string $name, array $attributes): string
2✔
51
    {
52
        $viewComponent = $this->viewConfig->viewComponents[$name] ?? null;
2✔
53

54
        $element = new ViewComponentElement(
2✔
55
            environment: $this->appConfig->environment,
2✔
56
            compiler: $this->compiler,
2✔
57
            elementFactory: $this->elementFactory,
2✔
58
            viewComponent: $viewComponent,
2✔
59
            attributes: $attributes,
2✔
60
        );
2✔
61

62
        return $element->compile();
2✔
63
    }
64
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc