devhammed / server-actions

PHP 服务器动作!

0.0.5 2023-10-28 14:46 UTC

This package is auto-updated.

Last update: 2024-09-29 08:41:52 UTC


README

Latest Version on Packagist

Next.js 服务器动作 在 PHP 中工作!

这是受 这条推文 启发的概念验证,并不打算用于生产环境。

但它是可行的,让我们继续!

安装

推荐通过 Composer 安装此包。

composer require devhammed/server-actions

然后在您的入口文件(例如 index.php)中包含 Composer 自动加载器,如下所示

<?php

// File: /public/index.php

require_once __DIR__ . '/../vendor/autoload.php';

但您也可以下载此存储库并包含提供的 autoload.php 文件,例如

require_once __DIR__ . '/libs/server-actions/autoload.php';

使用方法

您可以在任何 PHP 项目中使用此包,但它为 Laravel 提供了一级支持,并为您完成了所有繁重的工作。

如果您使用的是 Laravel,可以跳转到 Laravel 部分。

基本概念是,您必须在入口文件(例如 index.php)中使用 useServer() 函数(不带参数)初始化服务器,这将返回您可以使用它来配置服务器端点和服务器动作存储的实例。当前此包提供的存储在 JSON 文件中的序列化动作的 JsonFileServerEntry,您可以实现 DevHammed\ServerActions\Contracts\ServerEntry 接口。

<?php

// File: /public/index.php

require_once __DIR__ . '/vendor/autoload.php';

use DevHammed\ServerActions\Concerns\JsonFileServerEntry;

use function DevHammed\ServerActions\useServer;

useServer()
    ->withServerActionsUrl('/server-actions.php')
    ->withServerEntry(
       new JsonFileServerEntry(
           __DIR__ . '/server-actions.json',
       ),
    );

// Other logic to include your PHP files for the request here...

然后您需要创建在 withServerActionsUrl 方法中指定的服务器动作处理文件,例如 server-actions.php,它将几乎与入口文件相同,但在链的末尾调用 run() 方法,没有其他内容,如下所示

<?php

// File: /public/server-actions.php

require __DIR__ . '/../vendor/autoload.php';

use DevHammed\ServerActions\Concerns\JsonFileServerEntry;

use function DevHammed\ServerActions\useServer;

useServer()
	->withServerActionsUrl('/server-actions.php')
	->withServerEntry(
		new JsonFileServerEntry(
			__DIR__ . '/server-actions.json',
		),
	)
	->run();

然后您可以在包含的 PHP 文件中使用 useServer 辅助函数

<?php
    // File: /views/my-form.php

    use function DevHammed\ServerActions\useServer;
?>

<form
    method="post"
    action="<?= useServer(function (string $name) {
            echo 'Hello, ' . $name;
    }) ?>"
>
    <input type="hidden" name="name" value="Hammed">
    <button type="submit">Greet the creator</button>
</form>

Laravel

此包为 Laravel 提供了一个服务提供程序,将自动为您初始化服务器和端点。

如果您使用的是 Laravel 5.4 或以下版本,可以在 config/app.php 文件中注册服务提供程序,但如果您使用的是 Laravel 5.5 或以上版本,则包将自动使用自动发现进行注册。

<?php

// File: config/app.php

return [
    // ...
    'providers' => [
        // ...
        DevHammed\ServerActions\ServerActionsProvider::class,
    ],
    // ...
];

之后,您应该运行以下命令以将配置文件发布到 config/server-actions.php 并设置可能需要的其他内容。

php artisan server-actions:install

然后您可以在 Blade 模板中使用 useServer 辅助函数

<?php
    // File: /resources/views/my-form.blade.php

    use function DevHammed\ServerActions\useServer;
?>

<form
    method="post"
    action="<?= useServer(function (string $name) {
            return 'Hello, ' . $name;
    }) ?>"
>
    @csrf
    <input type="hidden" name="name" value="Hammed">
    <button type="submit">Greet the creator</button>
</form>

请注意,由于这类似于其他表单请求,并且处理程序可以像使用控制器方法一样使用(例如重定向、返回视图等),因此需要 @csrf 指令才能让 Laravel 接受请求,所以我们返回一个字符串而不是像纯 PHP 示例那样输出它。

这就完成了!去创建一些服务器动作吧!

许可协议

此包是开源软件,许可协议为 MIT 协议

鸣谢