devhammed / server-actions
PHP 服务器动作!
Requires
- php: >=8.0
- illuminate/contracts: ^10.0
- illuminate/support: ^10.0
- opis/closure: ^3.6
- ramsey/uuid: ^4.7
- spatie/laravel-package-tools: ^1.16
README
让 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 协议。