laravel blade包含具有相对路径的文件

wa7juj8i  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(128)

在laravel blade系统中,当我们想要包含一个部分blade文件时,我们必须每次为每个文件写入完整的路径。当我们重命名一个文件夹时,我们将不得不检查其中的每个文件的@include。有时候用相对路径来包含它真的很容易。有什么办法吗?
例如,我们在此路径中有一个刀片文件:

resources/views/desktop/modules/home/home.blade.php

我需要在该文件附近包含一个刀片文件:

@include('desktop.modules.home.slide')

对于相对路径,它会是这样的:

@include('.slide')

有什么办法可以做到吗?

j91ykkif

j91ykkif1#

如果有人仍然对当前视图文件相对路径感兴趣,请将此代码放在AppServiceProvider.php或任何您希望的提供程序的 Boot 方法中

Blade::directive('relativeInclude', function ($args) {
        $args = Blade::stripParentheses($args);

        $viewBasePath = Blade::getPath();
        foreach ($this->app['config']['view.paths'] as $path) {
            if (substr($viewBasePath,0,strlen($path)) === $path) {
                $viewBasePath = substr($viewBasePath,strlen($path));
                break;
            }
        }

        $viewBasePath = dirname(trim($viewBasePath,'\/'));
        $args = substr_replace($args, $viewBasePath.'.', 1, 0);
        return "<?php echo \$__env->make({$args}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>";
    });

然后用

@relativeInclude('partials.content', $data)

包含兄弟目录中的content.blade.php,称为partials
祝大家好运

mklgxw1f

mklgxw1f2#

有一个(现在未维护的)软件包同时执行相对和绝对包含(lfukumori/laravel-blade-include-relative),使用@include@includeIf@includeWhen@each@includeFirst指令。我刚把它拉到一个项目中,它工作得很好。

vatpfxk5

vatpfxk53#

一个圆滑的选项,如果你想组织在子文件夹中查看文件:

public function ...(Request $request) {
    $blade_path = "folder.subfolder.subsubfolder.";
    $data = (object)array(
        ".." => "..",
        ".." => $..,
        "blade_path" => $blade_path,
    );
    return view($data->blade_path . 'view_file_name', compact('data'));
}

然后在视图刀片中(或您想要包含的其他任何位置):

@include($blade_path . 'another_view_file_name')
ckx4rj1h

ckx4rj1h4#

你需要创建自定义的刀片指令,原生的include指令不这样工作。
阅读此页以了解如何创建自定义刀片指令:
https://scotch.io/tutorials/all-about-writing-custom-blade-directives

\Blade::directive('include2', function ($path_relative) {
    $view_file_root = ''; // you need to find this path with help of php functions, try some of them.
    $full_path = $view_file_root . path_relative;
    return view::make($full_path)->render();
});

然后在刀片文件中,你可以使用相对路径来包含视图文件:

@include2('.slide')

我试着告诉你这个想法。试着测试你自己

相关问题