tatter/forms

适用于 CodeIgniter 4 的 RESTful AJAX 表单

v0.10.0 2022-07-28 19:25 UTC

This package is auto-updated.

Last update: 2024-09-17 22:04:19 UTC


README

适用于 CodeIgniter 4 的 RESTful AJAX 表单

Coverage Status

快速开始

  1. 使用 Composer 安装: > composer require tatter/forms
  2. 发布资源: > php spark assets:publish
  3. 将 JavaScript 添加到您的视图

功能

提供资源和演示控制器模板以及相应的 JavaScript,用于在 CodeIgniter 4 的原生 RESTful 实现中使用 AJAX 表单。

安装

通过 Composer 轻松安装,利用 CodeIgniter 4 的自动加载功能,并保持最新状态。

> composer require tatter/forms

或者,通过下载源文件并将目录添加到 app/Config/Autoload.php 中来手动安装。

安装后,您需要将所需的资源复制或发布到您的 public/ 文件夹。如果您想自动化此过程,请查看 资源库

最后,通知您的视图/布局您打算使用 JavaScript 为您的表单(您的路径可能不同)

<script src="assets/vendor/forms/forms.js" type="text/javascript"></script>
<script>
	var baseUrl = "<?= base_url() ?>";
	var siteUrl = "<?= site_url() ?>";
	var apiUrl  = "<?= site_url(config('forms')->apiUrl) ?>";
</script>

配置(可选)

库的默认行为可以通过其配置文件进行覆盖或增强。将 examples/Forms.php 复制到 app/Config/Forms.php,并按照注释中的说明操作。如果没有找到配置文件,库将使用其默认值。

用法

注意: 请将此模块视为模块化自身 - 您不需要使用每个部分!将您不使用的代码部分视为在您自己的应用程序中实现此功能的示例。

在初始安装之后,需要实现一些部分。 表单 将通过将视图与 ResourcePresenterResourceController 接口,根据交互方式(即页面加载与 AJAX)运行 CRUD 风格的操作。不出所料,您将需要一些 视图 和每个资源两个 控制器

命名

表单 通过资源名称与每个资源路由和控制器交互。如果您正在创建一个游戏,您的资源名称可能是 hero(es)level(s)reward(s) 等。命名约定对于自动加载资源和它们的端点很重要。默认情况下,表单 将使用与您的资源关联的模型的名称。因此,URL heroes/new 将路由到使用 HeroModelHeroController,整个资源将根据该模型命名为 "hero"。

如果您需要设置自己的名称,请在您的模型的 $name 属性中设置。

class HeroModel extends \CodeIgniter\Model
{
	public $name = 'superhero';
	...

视图

如果您选择使用内置的控制器,它们期望每个资源都有以下视图可用(其中 {names} 是您的资源名称的复数形式)

  • Views/{names}/new - 创建新对象的提示,包裹 {names}/form
  • Views/{names}/index - 所有(或过滤后)对象的列表,包裹 {names}/list
  • Views/{names}/show - 单个对象的详细信息,包裹 {names}/display
  • Views/{names}/edit - 更改对象的提示,包裹 {names}/form
  • Views/{names}/remove - 删除对象的提示,包裹 {names}/display{names}/confirm
  • Views/{names}/list - 部分视图;对象的列表
  • Views/{names}/form - 部分视图;用于新建和编辑的表单
  • Views/{names}/display - 部分视图;一个可显示的对象版本
  • Views/{names}/confirm - 部分视图;删除对象的提示

如您所见,表单 需要一些视图,这些视图是完整页面加载布局的一部分,还有一些可以通过 AJAX 注入到现有页面中(例如,在模态框中)。请参阅 示例 以获取完整的示例视图文件集(注意:这些文件是“原样”提供的,可能并不总是适用于所有用例)。

控制器

除了视图外,您还需要为每个资源准备两个控制器

  • Controllers/{names}.php - 您的页面加载展示者,继承自 Tatter\Forms\Controllers\ResourcePresenter
  • Controllers/API/{names}.php - 您的 AJAX 调用控制器,继承自 Tatter\Forms\Controllers\ResourceController

与其他框架的 RESTful 控制器一样,您的控制器通过 $modelName 属性设置其模型

<?php

namespace App\Controllers;

use App\Models\HeroModel;
use Tatter\Forms\Controllers\ResourcePresenter;

class Heroes extends ResourcePresenter
{	
	protected $modelName = HeroModel::class;
	...

您的资源控制器可以添加一个额外的属性 $format 来指定响应格式(《表单》目前仅支持 JSON)

<?php

namespace App\Controllers\API;

use App\Models\HeroModel;
use Tatter\Forms\Controllers\ResourceController;

class Heroes extends ResourceController
{	
	protected $modelName = HeroModel::class;
	protected $format    = 'json';
	...

请参阅 CodeIgniter 4 用户指南中的 RESTful 资源处理 获取更多关于使用资源控制器的信息。

路由

您需要为每个资源向两个控制器添加路由

$routes->presenter('heroes');
$routes->resource('api/heroes', ['controller' => 'App\Controllers\API\Heroes']);

$routes->presenter('rewards');
$routes->resource('api/rewards', ['controller' => 'App\Controllers\API\Rewards']);

默认情况下,您的资源控制器路由将全部以 "api/" 前缀,但您可以在配置文件中更改此设置。

JavaScript

《表单》包含了一组轻量级的 JavaScript 命令,用于在视图和控制器之间传递数据以及自动处理 AJAX 请求。如果您需要更完整的函数集或完全自动化的对象处理器,您需要包含自己的第三方工具并在视图文件中实现它们。

jQuery

此包使用 jQuery(不包括)。未来的版本将放弃 jQuery,转而使用原生的 JavaScript(通过 Fetch)。