在laravel视图中使用名称空间
如何在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') 我
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')