diogoadc / sunday-framework
这是一个为那些想要了解后端世界的人创建的框架,但是,只有星期天才能练习。
Requires
- php: >=7.4.0
This package is auto-updated.
Last update: 2024-09-29 06:08:52 UTC
README
星期日框架(SF)是由里约热内卢联邦理工学院(IFRJ)- 阿拉亚尔湾分校的学生迪戈·阿尔维斯创建的项目,其目的是简单实用:在空闲时间(或者说,在星期天)以简单的方式创建API。
项目的目标是允许创建PHP API,而无需广泛了解编程或后端开发,因此,对于需要测试其应用程序的前端开发者或对后端应用程序感兴趣并希望看到其工作原理的学生来说,这是一个完美的选择。
目标
星期日框架将尝试最大限度地抽象化后端应用程序背后的“复杂”过程,以简化,尤其是加速应用程序创建的过程。
预计创建的功能包括
- 自动创建数据库和表(MySQL)。
- 通过控制器自动路由。
- 通过模型自动将数据插入数据库。
未来功能
- 一个CLI(命令行界面)界面,允许快速创建模型和控制器,以及更新/创建数据库。
- 调试模式,允许创建日志文件以进行深入的代码调试。
- 一个界面,方便发送电子邮件。
- 一个界面(或包),允许使用json web tokens进行身份验证。
链接
要求
要使用星期日框架,需要本地服务器、安装了PHP 7.4或更高版本的PHP语言,以及到目前为止的MySQL数据库。因此,建议安装Xampp的Apache,因为它已经包含了一个包,其中包含所有这些资源。
安装
如果您在机器上已安装composer,只需进入本地服务器项目目录(对于Apache而言,是Xampp根目录下的htdocs文件夹)并在某个控制台中运行以下命令:
composer create-project diogoadc/sunday-framework:dev-master
然后,一切都将自动运行。
然而,如果您尚未安装composer,可以通过简单地克隆此存储库并在本地服务器项目目录中解压文件夹来安装星期日框架。
版本0.3的新功能
在版本0.3中的一些变化包括
- 实现了psr-4规范的自动加载,这允许您的代码通过使用命名空间而无需成千上万的'require'/'include'。
- 数据库中DateTime类型的改进实现。
- 一系列错误和其他问题的修复。
如何使用
介绍
到目前为止,SF默认具有一个文件夹层次结构,绝对不应该更改。以下将列出每个文件夹及其相应功能。
文件夹结构
**_核心:**具有框架的核心。 控制器:负责存储所有路由控制器的文件夹。 模型:负责存储所有数据模型的文件夹。 **公共:**截至目前尚无实际用途的文件夹。 销售:属于 composer 的文件夹。
文件
.gitignore:属于 Github 的文件 **.htaccess:**负责路由的文件。请勿修改! composer.json:属于 composer 的文件 index.php:您应用程序的初始文件。将在以后讨论。 LICENSE:许可证文件。 **README.md:**Github 文件。 RestAPI.php:负责您的 API 的文件。绝对不要修改! settings.json:配置文件。目前仅用于配置数据库。
唯一需要修改的文件/文件夹是 **index.php** 和 settings.json 文件以及 模型 和 控制器 文件夹。以下将逐一解释每个项目。
index.php
目前 index.php 具有非常具体的函数。唯一需要修改的是包含以下内容的行:
$con->createConnection()->autoCreateDatabase()->autoCreateTables();
方法 'autoCreateDatabase()' 会自动在 settings.json 中指定的数据库内创建数据库。方法 'autoCreateTables()' 会根据 Models 文件夹中现有的模型自动在数据库中创建表。如果您不希望自动执行此操作,只需删除这两个函数的调用,即该行应变为:
$con->createConnection();
settings.json
settings.json 是负责数据库连接的文件。您需要提供 MySQL(或 PHPMyAdmin)中存在的 host、username、password 和数据库名称。
模型
models 文件夹负责存储您的应用程序的所有模型,但什么是模型?模型基本上是表的镜像,也就是说,模型是一个包含数据库表中所有属性的类的集合。模型的基本结构是
// A classe terá de ter a nomenclatura Nome + Model, ondem o nome pode ser entendido como o nome da tabela.
// Todo model deverá herdar da classe BaseModel
class ExampleModel extends BaseModel {
// Um protected $primaryKey é necessário para dizer qual é a chave primária da tabela. O seu valor deverá ser a propriedade que será a chave primária entre aspas.
protected $primaryKey = 'id';
// Demas propriedades publicas de acordo com sua necessidade
public int $id;
public DateTime $dt_nasc;
public function __construct() { }
}
注意:请在您的模型中始终使用公共属性。私有属性不会被分配给数据库! 注意 2:每个文件仅创建一个模型。文件名应与模型同名!
注意:SF 带有一个标准和控制器模型,以便更好地理解其功能!
模型的特点
模型具有 "protected $primaryKey" 属性,该属性应接收作为值的属性名称,该属性将是表的主键。例如
protected $primaryKey = 'cpf';
该行将通知 API,cpf 将是主键。
每个模型都有一个名为 "patchValues(array)" 的方法,该方法接收任意关联数组,并用数组中的值填充模型。如果您愿意,也可以手动填充它。
控制器
controller 文件夹负责您的 API 中发生的所有事情。它会自动创建路由并响应根据编程要求进行的请求。API 中的一个常规路由将描述如下
// Todos os parâmetros são opcionais!
URL_Base/controller/metodo/parametro1/parametro2/parametro3/...
创建新的控制器文件后,该路由将自动通过 URL 访问,每个公共函数都是一个可能的端点(URL)。 注意:所有控制器都有 4 个“标准”路由:get、post、put 和 delete;换句话说,如果在一个名为“联系人”的控制器中创建了一个名为“get”的函数,那么只需向“url_base/contato”发送一个类型为 get 的请求即可访问 get() 方法。
与模型一样,控制器也具有必须遵循的标准结构,以下将进行解释
// Todo controller deverá ter a nomeclatura "nome + Controller" (Em Pascal Case)
// Todo controller deverá herdar da classe BaseController.
class ExampleController extends BaseController {
// Função opcional
public function get($id = null) { }
// Função opcional
public function post() { }
// Função opcional
public function delete($id) { }
// Função opcional
public function put() { }
}
控制器的流程非常简单易懂。
对于每个创建的公共函数,您将有一个新的端点
也就是说,如果您创建了一个: public function pegarTodosOsElementos()
,您可以随时访问这个路由。
控制器特性
Symfony 是围绕控制器和模型工作的。在控制器内部,您可以访问该方法
$this->query->insert(model)
$this->query->update(model);
$this->query->select(model);
$this->query->delete(model);
$this->query->where(model, atributo);
...
查询是负责构建查询而不需要实际编写查询的人。在您“组装”完查询后,您可以使用'repository'类来访问数据库。您将使用的方法是
$this->repository->select($this->query);
$this->repository->selectAll($this->query);
$this->repository->insert($this->query);
$this->repository->update($this->query);
$this->repository->delete($this->query);
根据到目前为止的说明,控制器中函数的基本流程会是。
- 使用模型构建查询。
- 在数据库中执行查询。
例
// Cria um model
$model = new UserModel;
// Preenche um model com seus dados
$model->patchValues($this->data);
// Monta uma query de select que pegará os valoes onde o id é igual ao id do model dado
$this->query->select($model)->where($model, 'id');
// Executa a query e retorna o valor pra fora da API
return $this->respository->select($this->query);
注意:您既可以这样写
$this->query->select($model);
$this->query->where($model, 'id');
也可以这样写
$this->query->select($model)->where($model, 'id');
两种方式是等效的。
每个控制器都有一个属性,用于存储以json格式发送的HTTP请求体中的数据。要访问它,只需这样做$this->data;
重要信息
- Sunday Framework 是为了仅与使用json的请求一起工作而创建的。
- 如果您想测试您的API而无需创建一个应用程序来访问它,我建议您使用Postman等具有此目的的应用程序。
- 该框架目前仍处于开发阶段。当前版本是0.2.0。
- 如果发现错误,请通过GitHub报告,以便修复。
- 文档尚未完成。遗憾的是,许多事情都会发生变化,因此不值得用它来记录所有操作的方法。
- 非常感谢您的理解,如果您有任何疑问,可以通过电子邮件或GitHub与我联系。电子邮件: Diogo2560@gmail.com