jakewhiteley / bladezero
Requires
- php: ^7.4|^8.0
- illuminate/collections: v9.52.16
- league/commonmark: ^1.3|^2.0.2
- symfony/finder: ^5.4
Requires (Dev)
- doctrine/inflector: ^1.3
- mockery/mockery: ^1.2.3
- php-curl-class/php-curl-class: ^9.19
- phpunit/phpunit: ^8.5.19|^9.5.8
- ramsey/uuid: ^4.2.2
- symfony/console: ^5.0
- symfony/css-selector: ^5.0
- symfony/dom-crawler: ^5.0
- symfony/filesystem: ^5.0
- voku/portable-ascii: ^1.6
Suggests
- ext-mbstring: If you want to use Bladezero\Support\Str in your application.
- doctrine/inflector: If you want to use Bladezero\Support\Str pluralize methods in your application.
- ramsey/uuid: If you want to use Bladezero\Support\Str uuid methods in your application.
This package is auto-updated.
Last update: 2024-09-11 20:37:06 UTC
README
以正确的方式将 Laravel 的 Blade 模板引擎导入到非 Laravel 应用程序中。
错误的方式
所有其他独立的 blade 版本都需要 ~16 个依赖项,并在您的应用程序中运行 Iluminate/Container 和 Illuminate/View 包。这会给您的应用程序添加很多复杂性,并且被认为是一个坏主意。
有几个包从头开始重新编写整个 Blade 引擎的实例,这会产生以下典型问题
- 不再能够依赖Laravel 文档,意味着文档通常是错误的。
- 功能常常缺失或实现不正确。
正确的方式
BladeZero 直接从 laravel/framework 分离出来,只包含编译 Blade 模板所需的文件 - 没有容器,没有视图,没有麻烦。
95% 的代码与 Taylor Otwell 和 Laravel 贡献者编写的代码完全匹配,这意味着每个 Blade 功能都按照应有的方式完全支持。
安装
使用 Composer
composer require jakewhiteley/bladezero
使用方法
拉取包后,您需要提供模板和缓存目录的完整路径
use Bladezero\Factory; $templatesPath = realpath('./files'); $cachePath = realpath('./cache'); $blade = new Factory($templatesPath, $cachePath); // Make and output a view with some data echo $blade->make('example', ['title' => 'It Works!']);
扩展 BladeZero
由于 BladeZero\Factory 类只是一个修改过的 Illuminate\View\Factory,因此您会期望所有这些方法都是可用的
// Add a new templates directory $blade->addLocation(realpath('./shared/components')); // Add a namespace $blade->addNamespace('shared', realpath('./shared/components')); // Register a component $blade->component('components.alert', 'alert'); // Register a custom directive $blade->directive('foo', function($expression) { return "<?php echo 'foo' . $expression; ?>"; }); // Register a custom if directive $blade->if('foo', function($bar) { return $bar === 'foobar'; }); // Register a custom template alias $blade->include('php.raw', 'foo'); // Add shared data $blade->share($key, $value = null);
BladeZero 支持您所知道的全部 Blade 功能,例如 自定义指令、自定义 if 语句、组件。
BladeZero 允许您编写自己的 View 类,因为这个包是为您自己的项目提供 Blade 渲染引擎而设计的 - 而不是包含 Laravel 的一半功能。为了方便起见,您可以通过 View 面具访问的一些功能也可用;例如 将数据提供给所有视图,以及视图命名空间
差异
尽管 Blade 编译器与 Laravel 中的孪生版本完全相同,但 您的应用程序不是。
因此,BladeZero 提供了方法,以便在您的框架中轻松使用 Blade 的 Laravel 特定功能
@csrf
使用 setCsrfHandler 方法指定如何提供带有正确令牌的 @csrf() 指令
$blade->setCsrfHandler(function(): string { return MySessionClass::getUserToken(); });
@auth
设置您的应用程序如何处理 auth 指令,如 @auth、@elseauth 和 @guest
$blade->setAuthHandler(function(string $guard = null): bool { return MyUserClass::currentUserIs($guard); });
@can
设置您的应用程序如何处理权限指令,如 @can、@cannot 和 @canany
$blade->setcanHandler(function($abilities, $arguments = []): bool { return MyUserClass::currentUserCan($abilities, $arguments); });
@inject
如果您的应用程序使用 依赖注入容器,则指定通过 @inject 如何解决服务
$blade->setInjectHandler(function(string $service) { return MyContainer::resolveService($service); });
@error
允许您提供 @error 指令应该如何工作。
您的回调应返回第一个错误字符串或 false
$blade->setErrorHandler(function(string $key) { return MyErrorBag::getErrorMessageFor($key); });