Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在laravel视图中使用名称空间_Laravel_View_Namespaces - Fatal编程技术网

在laravel视图中使用名称空间

在laravel视图中使用名称空间,laravel,view,namespaces,Laravel,View,Namespaces,如何在laravel视图中使用名称空间?我的意思是我在app/views文件夹中有三个不同的文件夹admin、frontend和client。 如果我想从view/admin/account/profile.blade.php中的admin部分views/admin/partials/flush.blade.php加载一个部分模板,我必须像这样包括它: @include('admin/partials/flush') 相反,我只想使用 @include('partials/flush') 我

如何在laravel视图中使用名称空间?我的意思是我在
app/views
文件夹中有三个不同的文件夹
admin
frontend
client

如果我想从
view/admin/account/profile.blade.php
中的
admin
部分
views/admin/partials/flush.blade.php
加载一个部分模板,我必须像这样包括它:

@include('admin/partials/flush')
相反,我只想使用

@include('partials/flush')
我怎样才能做到这一点呢?

您可以编写一个适合您需要的函数。像这样:

Blade::extend(function($view, $compiler)
{
    $pattern = $compiler->createMatcher('includeNamespaced');

    $viewPath = realpath($compiler->getPath());
    $parts = explode(DIRECTORY_SEPARATOR, $viewPath);
    $viewsDirectoryIndex = array_search('views', $parts);
    $namespace = $parts[$viewsDirectoryIndex + 1];

    $php = '$1<?php ';
    $php .= 'if($__env->exists(\''.$namespace.'.\'.$2)){';
    $php .= 'echo $__env->make(\''.$namespace.'.\'.$2)->render();';
    $php .= '}';
    $php .= 'else {';
    $php .= 'echo $__env->make($2)->render();';
    $php .= '}';
    $php .= '?>';

    return preg_replace($pattern, $php, $view);
});
如果您愿意,您还可以将其命名为
createMatcher('include')

注意“您的”
@includeNamespaced
/
@include
将无法向视图传递参数(第二个参数)


一个小提示:当您更改
Blade::extend中的代码时,您必须删除
storage/views
中的缓存视图,以便更改显示在浏览器中。

您可以编写自己的Blade标签,在内部调用Blade internal include,但在前端添加一些内容,例如@ITroubs。?谢谢你的回复。看看这里,可能会变得一团糟。。。
@includeNamespaced('partials/flush')