j-angnoe / php-bridge

用于原型的PHP和JavaScript桥梁

dev-master 2022-08-19 13:33 UTC

This package is auto-updated.

Last update: 2024-09-19 17:46:34 UTC


README

PHP Bridges 允许您在不处理路由和参数打包的情况下,通过JavaScript与指定的PHP对象交互。减少编写样板代码和框架配置的时间,更多地专注于开发您的想法。

一个示例PHP对象

class MyController {
    function performSomeAction($argument1, $argument2) {
        // ...
    }
}

在JavaScript中与此对象交互

var result = await api.performSomeAction(arg1, arg2);

通过添加

PhpBridge\Bridge::serve(MyController::class)

用法

PhpBridge 是一个库,并附带一个可执行文件,可以快速启动本地原型。

使用phpbridge可执行文件

PhpBridge 将在可用端口上启动一个web服务器,提供您指定的文件(或目录)。它将自动加载PhpBridge并提供 bridge 函数,因此您可以编写:它将自动

./vendor/bin/phpbridge file.php [--port=1234] [--no-browser]
// file.php
<?php
bridge(MyController::class);

class MyController {
    function fn() { } 
}
?>
<button onclick="execute()">Execute</button>
<script>
    async function execute() { 
        var result = await api.fn();
        alert(result);
    }
</script>

使用库

<?php


class MyController {
    function fn() { } 
}

$bridge = PhpBridge\Bridge::to(Mycontroller);
$bridge->interrupt();

// Will write <script>window.api = .... </script>
echo $bridge->output('script');
?>

<button onclick="execute()">Execute</button>
<script>
    async function execute() { 
        var result = await api.fn();
        alert(result);
    }
</script>

安装

通过composer

composer require j-angnoe/php-bridge

API

PhpBridge\Bridge::to($targetClass) - 创建一个桥梁实例并向它提供目标类(类名或对象)

PhpBridge\Bridge::interrupt() - 允许PHP Bridge中断当前脚本的流程以处理API调用。在开始输出之前调用interrupt。

PhpBridge\Bridge::output($flags) - 获取目标类的JavaScript客户端副本。

特性

PhpBridge\Bridge 使用客户端/csrf方法保护调用。这是为了防止任何非浏览器客户端通过桥梁与您的代码交互。为了从这一额外的安全层中受益,您应该确保在调用interrupt之前启动PHP。phpbridge二进制文件会为您做这件事。

JavaScript客户端需要浏览器具有 fetch 方法。

示例

可以在 ./examples/ 中找到