我可以在 Laravel 之外使用 Blade 模板引擎吗?
Can I use the Blade templating engine outside of Laravel?
我想创建一个设计模式并使用 "Blade templating engine"。
我可以在 Laravel 之外使用 Blade 模板引擎并在我的新模式中使用它吗?
你当然可以,packagist 上有很多独立的 blade 选项,只要你熟悉 composer 就应该没有问题,this one 看起来很有趣,因为有一个与下载相比,星星的比例非常高。
请注意,尽管我自己还没有尝试过,就像你一样,我正在为我自己的项目寻找一个独立的选项并偶然发现了它,尽管在不久的将来的某个时候我会给它一个很好的锻炼,
是的,您可以随时随地使用它。只需安装 composer 上可用的众多软件包之一。
如果您有兴趣将它与 codeigniter 集成,我有一篇博客 post 在这里概述了该过程:http://mstd.eu/index.php/2017/03/02/using-the-laravel-blade-templating-engine-in-codeigniter-3/
按照上述步骤应该可以清楚地了解如何将其包含到任何框架中。
备案:
我测试了很多 运行 blade 在 Laravel 之外的库(我不使用),大多数都是对原始库的拙劣修改,只是简单地复制和粘贴了代码并删除了一些依赖项,但它保留了很多 Laravel.
的依赖项
所以我(为一个项目)创建了 blade 的替代方案,它是免费的(麻省理工学院许可证,即关闭 source/private 代码是可以的)在 单个文件中并且没有外部库的单一依赖项。您可以下载 class 并开始使用它,或者您可以通过 composer 安装。
https://github.com/EFTEC/BladeOne
https://packagist.org/packages/eftec/bladeone
它 100% 兼容,没有 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 的模板系统。 ;-)
Matt Stauffer 创建了一个完整的存储库,向您展示了如何在 Laravel 之外直接使用各种 Illuminate 组件。我会建议按照他的例子并查看他的源代码。
https://github.com/mattstauffer/Torch
这是 index.php 在 Laravel
之外使用 Laravel 视图
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']);
我想创建一个设计模式并使用 "Blade templating engine"。 我可以在 Laravel 之外使用 Blade 模板引擎并在我的新模式中使用它吗?
你当然可以,packagist 上有很多独立的 blade 选项,只要你熟悉 composer 就应该没有问题,this one 看起来很有趣,因为有一个与下载相比,星星的比例非常高。
请注意,尽管我自己还没有尝试过,就像你一样,我正在为我自己的项目寻找一个独立的选项并偶然发现了它,尽管在不久的将来的某个时候我会给它一个很好的锻炼,
是的,您可以随时随地使用它。只需安装 composer 上可用的众多软件包之一。
如果您有兴趣将它与 codeigniter 集成,我有一篇博客 post 在这里概述了该过程:http://mstd.eu/index.php/2017/03/02/using-the-laravel-blade-templating-engine-in-codeigniter-3/
按照上述步骤应该可以清楚地了解如何将其包含到任何框架中。
备案:
我测试了很多 运行 blade 在 Laravel 之外的库(我不使用),大多数都是对原始库的拙劣修改,只是简单地复制和粘贴了代码并删除了一些依赖项,但它保留了很多 Laravel.
的依赖项所以我(为一个项目)创建了 blade 的替代方案,它是免费的(麻省理工学院许可证,即关闭 source/private 代码是可以的)在 单个文件中并且没有外部库的单一依赖项。您可以下载 class 并开始使用它,或者您可以通过 composer 安装。
https://github.com/EFTEC/BladeOne
https://packagist.org/packages/eftec/bladeone
它 100% 兼容,没有 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 的模板系统。 ;-)
Matt Stauffer 创建了一个完整的存储库,向您展示了如何在 Laravel 之外直接使用各种 Illuminate 组件。我会建议按照他的例子并查看他的源代码。
https://github.com/mattstauffer/Torch
这是 index.php 在 Laravel
之外使用 Laravel 视图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']);