kanuni/laravel-blade-anchor

利用锚点功能,轻松扩展Laravel模板文件

v0.0.2 2024-03-20 15:44 UTC

This package is auto-updated.

Last update: 2024-09-21 13:05:43 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

通过锚点轻松启用第三方包扩展您的应用程序用户界面。

安装

您可以通过composer安装此包

composer require kanuni/laravel-blade-anchor

用法

要允许第三方包扩展您的应用程序UI,您需要在Blade模板文件中插入锚点,以便在这些位置允许这些扩展。

放置锚点以启用UI扩展

在您的Blade文件中(例如,resources/views/welcome.blade.php),您可以添加一个锚点指令。在这个例子中,我们将在<body>标签之后立即创建一个锚点

...
<body>
    @anchor('begin.body')
    ...
</body>

您可以为锚点命名任何您喜欢的内容。在这个例子中,我们将其命名为begin.body

创建扩展器类

一旦您放置了锚点,您现在可以注册一个扩展器类,该类将在指定的锚点位置渲染字符串或Laravel视图。理想情况下,您应该在AppServiceProvider类的boot()方法中注册您的锚点扩展器。

但是,首先,让我们使用Artisan命令创建一个新的锚点扩展器类

php artisan make:anchor-extender WelcomePageExtender

此命令将在app/BladeExtenders/WelcomePageExtender.php中生成一个新的扩展器类。该类应实现__invoke()方法,其返回值将在指定的锚点位置渲染。

这是我们的新创建的类的示例

namespace App\BladeExtenders;

use Illuminate\Contracts\Support\Renderable;
use Kanuni\LaravelBladeAnchor\Contracts\AnchorExtender;

class WelcomePageExtender implements AnchorExtender
{
    public function __invoke(?array $variables): string|Renderable|null
    {
        return '<p>This string will be injected at anchor point.</p>';
    }
}

__invoke()方法可以返回一个字符串或视图,并接受一个可选的变量数组,这些变量可以在您的Blade模板中使用。如果返回Blade视图,您可以像这样传递变量到视图中

public function __invoke(?array $variables): string|Renderable|null
{
    return view('my-custom-blade-view', $variables);
}

也可以将任何依赖类注入到扩展器的__construct()方法中

class WelcomePageExtender implements AnchorExtender
{
    public function __construct(
        protected YourService $service
    )
    {}

    public function __invoke(?array $variables): string|Renderable|null
    {
        return "<p>This are the results of your service: {$this->service->getResults()}</p>";
    }
}

将扩展器附加到锚点

使用LaravelBladeAnchor外观在app/Providers/AppServiceProvider类的boot()方法中注册您的Blade扩展器。为此,调用registerExtender方法并提供视图名称、锚点名称和扩展器类。

use Kanuni\LaravelBladeAnchor\Facades\LaravelBladeAnchor;
use App\BladeExtenders\WelcomePageExtender;

public function boot(): void
{
    LaravelBladeAnchor::registerExtender(
        view: 'welcome',
        anchor: 'begin.body',
        extenderClass: WelcomePageExtender::class,
    );
}

如示例所示,锚点名称在每个视图中是唯一的。这意味着您可以在两个不同的视图中具有相同名称的锚点而不会发生冲突。

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

鸣谢

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。