Laravel 5 在Laravel 5刀片模板中包含SVG内容

Laravel 5 在Laravel 5刀片模板中包含SVG内容,laravel-5,blade,Laravel 5,Blade,在Laravel 5刀片模板中包含SVG文件(位于资产文件夹中)内容的最佳方式是什么 我不想使用image/object/embed标记,出于速度原因,这应该是一个内联SVG 我知道我可以使用,但有没有更好的方法专门针对Laravel/Blade 编辑:为了澄清,该方法应该适用于所有SVG文件,包括下面的文件 View Composer方法 我最终在服务提供商中使用了视图生成器 在服务提供商的boot()方法中: //通配符视图生成器 view()->composer('*',函数($view

在Laravel 5刀片模板中包含SVG文件(位于资产文件夹中)内容的最佳方式是什么

我不想使用image/object/embed标记,出于速度原因,这应该是一个内联SVG

我知道我可以使用
,但有没有更好的方法专门针对Laravel/Blade

编辑:为了澄清,该方法应该适用于所有SVG文件,包括下面的文件


View Composer方法 我最终在服务提供商中使用了视图生成器

在服务提供商的
boot()
方法中:

//通配符视图生成器
view()->composer('*',函数($view){
//实例化新的DOMDocument对象
$svg=newdomdocument();
//从公用文件夹加载SVG文件
$svg->load(公共路径('images/logo.svg');
//添加CSS类(可以省略此行)
$svg->documentElement->setAttribute(“类”、“徽标”);
//获取没有版本元素的XML
$logo=$svg->saveXML($svg->documentElement);
//将数据附加到视图
$view->with('logo',$logo);
});
在我看来:


{!!$logo!!}
我正在使用
DOMDocument
,因为它允许我删除不应该在HTML中的XML版本元素

CSS类不是必需的,但可以节省我用另一个HTML元素包装徽标的时间

如果你只需要在一个特定的刀片部分,如标题,你可以写的标志

view()->composer('header',function($view){};

叶片局部法 这种方法不是最佳实践,因为这种代码实际上不应该出现在视图中。但是,它非常简单,并且比在每个视图中添加PHP代码要好得多

使用以下代码创建一个新的分部(比如logo.blade.php):

saveXML($svg->documentElement);
?>
现在,您可以在刀片模板中使用SVG图像,方法如下:

@include('logo'))

这很有效,这是我能想到的最简单的方法:

{!! file_get_contents('images/icon.svg') !!}

为什么不将svg放入刀片模板中

resources/views/icons/dashboard.blade.php
然后使用blade语法添加视图

@include('icons.dashboard')

与公认的答案类似,但有点干净(imo)

使用laravel指令扩展刀片服务器,如下所示(在您的应用程序服务提供商中,如上所述):

然后在刀片中使用它,如下所示:

        <div class="Login__image Login__cloud">
            @svg('cloud.svg', 'Cloud')
        </div>

@svg('cloud.svg','cloud')

那是什么样子的.svg?它是一个具有不同图标的精灵图像吗?当您执行
时会发生什么?您是否看到任何渲染内容?SVG是一个徽标。应该是file_get_contents()not include(),但它确实有效(当SVG没有XML版本元素时)。我只是想找到一种更好的方法。这种方法的问题是XML版本元素(如果SVG中存在)被包含在HTML中。很高兴看到如何扩展blade。如果是更好的是一个不同的问题,虽然所有的处理和整个仪式?下一位读者的所有问号?我只想使用
tbhI我不知道你的意思是什么?对于Sage(Roots WP主题),我是这样使用的:
Sage('blade')->compiler()->directive('svg',function($arguments){list($path,$class)=array(pad(explode(','),trim($arguments,“()”),2');$path=trim($path,“”);$class=trim($path,“)($class,“”);$svg=new\DOMDocument();$svg->load(asset_path($path));$svg->documentElement->setAttribute(“class”,$class);$output=$svg->saveXML($svg->documentElement);返回$output;)
@Toskan处理的要点是删除XML版本元素,如果包含该元素,将使HTML无效。
        <div class="Login__image Login__cloud">
            @svg('cloud.svg', 'Cloud')
        </div>