tempest-framework
tempest-framework copied to clipboard
Defining view components via separate (overlapping) composer namespace
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
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
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
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.