rcrowe/TwigBridge

Relative include paths don't work when using namespaces

uandco opened this issue · 4 comments

uandco commented

Hi,

I'm using a components view namespace by adding this to AppServiceProvider.php:

    public function boot(): void
    {
        view()->addNamespace('components', resource_path('droplets/components'));
    }

This works fine to call views like view('components::forms/input); to load /resources/droplets/components/forms/input.twig but when including other twig templates from input.twig, I need to use an absolute path to point to anything inside /resources/droplets/components.

Using something like {% include 'label' with {label: label} %} will try to load /resources/views/label.twig as twig is not aware the parent template is in the components namespace.

I reckon a way to solve that would be to declare twig path namespaces like you can do in Symphony:
https://symfony.com/doc/current/templates.html#template-namespaces

What is the equivalent to that with TwigBridge, if any?

Thanks!

uandco commented

Actually I have a workaround by not using namespaces but adding a secondary view path in config/view.php:

    'paths' => [
        resource_path('views'),
        resource_path('droplets/components'),
    ],

But being able to use namespaces in Twig would be nice too to have a finer control on where we want the includes to be loaded from.

Checkout (if you haven't) Laravel Modules package. The project has managed to load and include templates from different modules.

uandco commented

@n3storm not sure I understand what you mean by "Laravel Modules package".

@n3storm not sure I understand what you mean by "Laravel Modules package".

https://github.com/nWidart/laravel-modules