自定义通知
概述
通知开箱即用,样式齐全。不过如果你想使用自己的样式或者自定义视图去渲染通知,也有多种选项。
通知样式
通知有一些专有 CSS 类,用于将你自己的样式应用到其中。你可以打开浏览器开发者工具,查找发现哪些类是你需要的。
使用自定义通知视图
如果你的自定义不能通过上述的 CSS 类实现,你也可以创建自定义视图渲染通知。要配置通知视图,可以在服务提供者 boot()
方法中调用静态 configureUsing()
方法,指定要使用的视图:
use Filament\Notifications\Notification;
Notification::configureUsing(function (Notification $notification): void {
$notification->view('filament-notifications.notification');
});
接下来,新建视图文件,比如此例中的 resources/views/notifications/notification.blade.php
。该视图应该使用该包的基础通知组件以使用通知功能,并通过 notification
属性传递 $notification
变量。本例是创建自定义通知视图的最低要求:
<x-filament-notifications::notification :notification="$notification">
{{-- Notification content --}}
</x-filament-notifications::notification>
所有通知属性的 Getter 在视图中可用。因此,自定义通知视图可能长这样子:
<x-filament-notifications::notification
:notification="$notification"
class="flex w-80 rounded-lg transition duration-200"
x-transition:enter-start="opacity-0"
x-transition:leave-end="opacity-0"
>
<h4>
{{ $getTitle() }}
</h4>
<p>
{{ $getDate() }}
</p>
<p>
{{ $getBody() }}
</p>
<span x-on:click="close">
Close
</span>
</x-filament-notifications::notification>
使用自定义通知对象
你的通知中可能需要该包的 Notification
类中没有定义的额外功能。如果是这样,你可用创建自己的 Notification
类,继承包中的 Notification
类。比如,你的通知设计需要 size 属性。
你在 app/Notifications/Notification.php
中自定义的 Notification
类可能包含:
<?php
namespace App\Notifications;
use Filament\Notifications\Notification as BaseNotification;
class Notification extends BaseNotification
{
protected string $size = 'md';
public function toArray(): array
{
return [
...parent::toArray(),
'size' => $this->getSize(),
];
}
public static function fromArray(array $data): static
{
return parent::fromArray()->size($data['size']);
}
public function size(string $size): static
{
$this->size = $size;
return $this;
}
public function getSize(): string
{
return $this->size;
}
}
下一步,你需要在服务提供者的 boot()
方法中将自定义 Notification
类绑定到容器中:
use App\Notifications\Notification;
use Filament\Notifications\Notification as BaseNotification;
$this->app->bind(BaseNotification::class, Notification::class);
现在你就可以像默认的 Notification
对象那样使用该自定义类了。