rcrowe / TwigBridge

Give the power of Twig to Laravel
MIT License
894 stars 168 forks source link

Relative include paths don't work when using namespaces #433

Open uandco opened 1 year ago

uandco commented 1 year ago

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 1 year ago

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.

n3storm commented 1 year ago

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

uandco commented 1 year ago

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

n3storm commented 1 year ago

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

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