我可以在Laravel之外使用Blade模板引擎吗?

时间:2016-10-26 23:32:01

标签: php design-patterns frameworks blade

我想创建一个设计模式并使用" Blade模板引擎"。 我可以在Laravel之外使用Blade模板引擎并在我的新模式中使用它吗?

4 个答案:

答案 0 :(得分:16)

记录:

我测试了很多库在Laravel之外运行刀片(我不使用),而且大多数是原始库的糟糕黑客,只是复制并粘贴代码并删除了一些依赖关系,但它保留了很多Laravel的依赖关系。

所以我创建了(对于一个项目)刀片的替代品,它在单个文件中没有单独的外部库依赖项(免费)(MIT许可证,即关闭源/私有代码没问题)。您可以下载该类并开始使用它,或者您可以通过composer安装。

https://github.com/EFTEC/BladeOne

https://packagist.org/packages/eftec/bladeone

它与Laravel自己的功能(扩展名)完全兼容。

工作原理:

<?php
include "lib/BladeOne/BladeOne.php";
use eftec\bladeone;

$views = __DIR__ . '/views'; // folder where is located the templates
$compiledFolder = __DIR__ . '/compiled';
$blade=new bladeone\BladeOne($views,$compiledFolder);
echo $blade->run("Test.hello", ["name" => "hola mundo"]);
?>

另一种选择是使用树枝,但我测试了它,我不喜欢它。我喜欢Laravel的语法,它接近ASP.NET MVC Razor。

编辑:到目前为止(2018年7月),它实际上是唯一支持Blade 5.6没有Laravel的新功能的模板系统。 ; - )

答案 1 :(得分:1)

你当然可以,包装上有很多独立的刀片选项,只要你对作曲家感到满意就应该没有问题,this one看起来非常有趣,因为它的星数比例非常高下载。

请注意,虽然我自己没有尝试过,像我一样为自己的项目寻找一个独立的选项并遇到它,我会在不久的将来给它一个真正好的锻炼,

答案 2 :(得分:1)

Matt Stauffer创建了一个完整的存储库,向您展示了如何在Laravel外部直接使用各种Illuminate组件。我建议遵循他的示例并查看他的源代码。

https://github.com/mattstauffer/Torch

这是在Laravel之外使用Laravel视图的index.php

https://github.com/mattstauffer/Torch/blob/master/components/view/index.php

您可以在其周围编写一个自定义包装,以便像Laravel一样调用它

use Illuminate\Container\Container;
use Illuminate\Events\Dispatcher;
use Illuminate\Filesystem\Filesystem;
use Illuminate\View\Compilers\BladeCompiler;
use Illuminate\View\Engines\CompilerEngine;
use Illuminate\View\Engines\EngineResolver;
use Illuminate\View\Engines\PhpEngine;
use Illuminate\View\Factory;
use Illuminate\View\FileViewFinder;

function view($viewName, $templateData)
{
    // Configuration
    // Note that you can set several directories where your templates are located
    $pathsToTemplates = [__DIR__ . '/templates'];
    $pathToCompiledTemplates = __DIR__ . '/compiled';

    // Dependencies
    $filesystem = new Filesystem;
    $eventDispatcher = new Dispatcher(new Container);

    // Create View Factory capable of rendering PHP and Blade templates
    $viewResolver = new EngineResolver;
    $bladeCompiler = new BladeCompiler($filesystem, $pathToCompiledTemplates);

    $viewResolver->register('blade', function () use ($bladeCompiler) {
        return new CompilerEngine($bladeCompiler);
    });

    $viewResolver->register('php', function () {
        return new PhpEngine;
    });

    $viewFinder = new FileViewFinder($filesystem, $pathsToTemplates);
    $viewFactory = new Factory($viewResolver, $viewFinder, $eventDispatcher);

    // Render template
    return $viewFactory->make($viewName, $templateData)->render();
}

然后您可以使用以下命令调用它

view('view.name', ['title' => 'Title', 'text' => 'This is text']);

答案 3 :(得分:0)

是的,您可以随时随地使用它。只需安装作曲家可用的众多软件包中的一个。

如果您有兴趣将其与codeigniter集成,我在此处有一篇博客文章,其中概述了此过程:http://mstd.eu/index.php/2017/03/02/using-the-laravel-blade-templating-engine-in-codeigniter-3/

遵循上述步骤应该明确如何将其包含在任何框架中。