【问题标题】:Using namespace in laravel view在 laravel 视图中使用命名空间
【发布时间】:2015-03-15 04:43:45
【问题描述】:

如何在 laravel 视图中使用命名空间?我的意思是我在app/views 文件夹中有三个不同的文件夹adminfrontendclient
如果我想加载部分模板,让我们从views/admin/account/profile.blade.php 中的admin 部分views/admin/partials/flush.blade.php 说,我必须像这样包含它:

@include('admin/partials/flush')

我只想使用

@include('partials/flush')

我该怎么做?

【问题讨论】:

  • 您可以编写自己的刀片标签,内部调用刀片内部包含但在前面添加一些内容
  • 任何例子@ITroubs.?感谢您的回复。
  • 看看这里laravel.com/docs/4.2/templates#extending-blade 但它可能会变得一团糟......

标签: laravel view namespaces


【解决方案1】:

您可以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 中的缓存视图,以便更改显示在您的浏览器中。

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 2013-01-20
    • 2020-08-08
    • 1970-01-01
    • 2018-12-19
    • 2012-01-26
    • 2015-08-27
    • 2014-09-19
    相关资源
    最近更新 更多