如何在laravel View中使用命名空间?我的意思是我在admin
文件夹中有三个不同的文件夹frontend
,client
和app/views
。
如果我要加载部分模板,请在admin
中的views/admin/partials/flush.blade.php
部分views/admin/account/profile.blade.php
说明,我必须将其包括在内:
@include('admin/partials/flush')
相反,我只想使用
@include('partials/flush')
我该怎么做?
答案 0 :(得分:0)
您可以extend blade编写符合您需求的功能。像这样:
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);
});
然后像你所描述的那样使用它,但使用includeNamespaced
@includeNamespaced('partials/flush')
如果您愿意,也可以通过命名@include
createMatcher('include')
注意“您的”@includeNamespaced
/ @include
无法将参数传递给您的视图(第二个参数)
小提示:当您更改Blade::extend
中的代码时,您必须删除storage/views
中的缓存视图,以便在浏览器中显示更改。