tempest-framework icon indicating copy to clipboard operation
tempest-framework copied to clipboard

Defining view components via separate (overlapping) composer namespace

Open happytodev opened this issue 8 months ago • 1 comments

Tempest version

1.0.0-beta.1

PHP version

8.4

Operating system

macOS

Description

Currently, it's not possible to move viewComponents to somewhere else than /app (for example /app/Views).

Steps to reproduce

  • your autoload is configured with separate composer namespace for View :
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "App\\Views\\": "app/Views/"
        }
    },
  • Move a viewComponent (like x.base.view.php for example) to another directory
  • Reload your page
  • You will see this kink of error message :
Tempest\View\Exceptions\DuplicateViewComponent thrown with message "Could not register view component `x-base` from `/Users/happytodev/Dev/cyclone/app/Views/x-base.view.php`, because a component with the same name already exists in `/Users/happytodev/Dev/cyclone/app/Views/x-base.view.php`"

Stacktrace:
#13 Tempest\View\Exceptions\DuplicateViewComponent in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/view/src/ViewConfig.php:47
#12 Tempest\View\ViewConfig:addViewComponent in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/view/src/ViewComponentDiscovery.php:114
#11 Tempest\View\ViewComponentDiscovery:apply in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/core/src/Kernel/LoadDiscoveryClasses.php:158
#10 Tempest\Core\Kernel\LoadDiscoveryClasses:applyDiscovery in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/core/src/Kernel/LoadDiscoveryClasses.php:40
#9 Tempest\Core\Kernel\LoadDiscoveryClasses:__invoke in [internal]:0
#8 ReflectionFunction:invokeArgs in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/reflection/src/FunctionReflector.php:24
#7 Tempest\Reflection\FunctionReflector:invokeArgs in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/container/src/GenericContainer.php:199
#6 Tempest\Container\GenericContainer:invokeClosure in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/container/src/GenericContainer.php:179
#5 Tempest\Container\GenericContainer:invoke in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/core/src/FrameworkKernel.php:152
#4 Tempest\Core\FrameworkKernel:loadDiscovery in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/core/src/FrameworkKernel.php:60
#3 Tempest\Core\FrameworkKernel:boot in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/core/src/Tempest.php:19
#2 Tempest\Core\Tempest:boot in /Users/happytodev/Dev/cyclone/vendor/tempest/framework/packages/router/src/HttpApplication.php:34
#1 Tempest\Router\HttpApplication:boot in /Users/happytodev/Dev/cyclone/public/index.php:9
#0 require in /Users/happytodev/.composer/vendor/laravel/valet/server.php:110

happytodev avatar May 09 '25 12:05 happytodev

There are two ways we can approach this problem:

  • Make it so that discovery can handle namespace overlaps
  • Allow for additional configurable view directories from within ViewConfig

Right now, it's not a high-priority issue though, so likely we won't be able to tackle this before 1.0

brendt avatar May 09 '25 12:05 brendt

We'll make improvements to view component discovery in #1429

View components will still need a unique name though, we don't plan on supporting namespaced view components.

brendt avatar Jul 27 '25 07:07 brendt