Skip to content

事件

从原生代码分发事件

许多原生操作是异步的——ML 推理、传感器读取、后台任务。你的原生代码需要一种方法在结果准备好时将其发送回 PHP。这就是事件的用武之地。

事件从原生代码分发并由你的 Livewire 组件接收。

声明事件

将你的事件类添加到清单中:

json
{
    "events": [
        "Vendor\\MyPlugin\\Events\\ProcessingComplete",
        "Vendor\\MyPlugin\\Events\\ProcessingError"
    ]
}

创建事件类

事件是简单的 PHP 类:

php
namespace Vendor\MyPlugin\Events;

use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class ProcessingComplete
{
    use Dispatchable, SerializesModels;

    public function __construct(
        public string $result,
        public ?string $id = null
    ) {}
}

提示

事件不需要 ShouldBroadcast 或频道配置。NativePHP 直接处理分发。

Swift 事件分发

使用 LaravelBridge.shared.send 分发事件:

swift
// 构建你的负载
let payload: [String: Any] = [
    "result": processedData,
    "id": requestId
]

// 分发到 PHP
LaravelBridge.shared.send?(
    "Vendor\\MyPlugin\\Events\\ProcessingComplete",
    payload
)

这在主线程上同步运行,所以如果需要,请包装在 DispatchQueue.main.async 中。

Kotlin 事件分发

使用 NativeActionCoordinator.dispatchEvent 分发事件:

kotlin
import android.os.Handler
import android.os.Looper

// 构建你的负载
val payload = JSONObject().apply {
    put("result", processedData)
    put("id", requestId)
}

// 必须在主线程上分发
Handler(Looper.getMainLooper()).post {
    NativeActionCoordinator.dispatchEvent(
        activity,
        "Vendor\\MyPlugin\\Events\\ProcessingComplete",
        payload.toString()
    )
}

始终使用主线程

事件分发涉及将 JavaScript 注入到 Web 视图中。这必须在主/UI 线程上发生,否则会静默失败。

官方插件和开发工具包

跳过复杂性——浏览现成的插件或获取开发工具包来构建你自己的。 访问 NativePHP 插件市场 →

基于 NativePHP 官方文档翻译