PHP项目的最小框架
Requires
- mustache/mustache: ^2.9
- phroute/phroute: ^2.1
- phryneas/logged-pdo: ^1.0.0
- swiftmailer/swiftmailer: ^5.4
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is not auto-updated.
Last update: 2024-09-24 20:41:40 UTC
README
PHP微框架
这是一个专为REST API和简单网站设计的轻量级框架。它非常轻量,具有浅堆栈跟踪,这意味着应用程序运行速度快,应用程序错误易于追踪。
如何通过composer添加到项目中
要将此微框架添加到项目中,您应该在composer.json的'require'部分中添加它,如下所示
"require": {
"willv/project": "^1.0.0"
}
如何使用
示例应用程序
可以使用示例应用程序快速启动;只需复制并适应您的需求
目录结构
Web根目录应为'www',所有PHP请求都应路由到www/index.php(www目录中的其他内容应为静态资源;此微框架不涉及处理它们)。所有'project'文件和目录都应与'www'目录处于同一级别(即Web根目录之上)
引导器
微框架包含一个名为App的引导器对象,可用于轻松设置项目。您应该在名为,例如"global.php"的文件中实例化它,然后在每个需要使用框架的脚本中require它;通常,HTTP请求的主要前端控制器以及任何需要环境的shell脚本。
命名空间
您需要为您的应用程序发明一个命名空间,以便自动加载器正常工作;有关更多详细信息,请参阅示例应用程序。
构造函数
此框架中所有类的'new'关键字都被禁用;取而代之的是,有一个名为'create'的工厂方法,应静态调用(例如User::create())。这是因为静态方法语法允许在实例化对象的同时在同一行调用方法,从而支持更多版本的PHP。
抽象类
'project'中的许多类都是抽象类,这意味着您不能直接实例化它们。相反,您应该用与您的应用程序相关的版本扩展该类,并使用它。例如,如果您正在编写一个博客应用程序,您可能有一些名为User、Post和Comment的域对象。这些类都应该扩展基础DomainObject类。
setUp方法
'project'中的许多抽象类都有setUp方法,您应该在此处进行配置(例如定义数据集的字段)。有关更多详细信息,请参阅示例应用程序。
核心概念
域对象
域对象表示应用程序使用的实体(例如,博客文章或用户)。每个域对象都与一种数据集类型相关联,这意味着提交给其各种属性的提交数据有一套验证规则;如果您破坏了它们,将抛出异常。
例如,如果您有一个名为User的域对象,您可能会将其与包含字段"名称"和"年龄"的UserDataset数据集相关联
$alice = User::create(array("name" => "Alice", "age" => "54"))
$alice->set("age", "55")
在上述两行中,将验证整个数据集。
数据集
数据集以两种方式使用
* To validate data submitted by a user
* To validate data associated with a domain object
要创建新的数据集类型,扩展\WillV\Project\Dataset类;然后您可以
* Instantiate this dataset and call its isValid method to check if a set of data is valid
* Associate the class with a domain object, and it will be used to validate data submitted when creating or changing the domain object
要将数据集与域对象相关联,在相关域对象的setUp方法中配置它,如下所示
class Task extends DomainObject {
protected function setUp() {
$this->dataSetName = "\ProjectExampleApp\Datasets\TaskDataset";
}
}
数据映射器
数据映射器用于保存域对象。
目前,只有一种数据映射器类型;MySQLMapper,用于将对象保存到MySQL数据库中;尽管可以添加更多(下一个列表中是MongoMapper,它应该是一个即插即用的替代品,用于将它们保存到MongoDB中)。
DataMappers假设数据库模式包含“id”、“created_utc”(创建日期)和“updated_utc”(更新日期)字段,因此您应确保您的数据库模式包含这些字段,否则将出现错误。
控制器
控制器是简单的PHP脚本,应放置在名为“controllers”的目录中。虽然它们是简单的脚本,但它们可以从具有各种信息访问权限的上下文中包含,例如从数组‘$this->urlParams’中可用的URL参数。它们应直接‘echo’输出,然后可以自由‘exit’。
路由
应通过扩展Router类来进行路由。在Router的setUp方法中,您可以定义大多数常见HTTP方法的路由;参数应包含在花括号中,并将作为索引数组中的值在控制器中可用$ this->urlParams。当您添加路由时,有三个参数;模式、控制器名称和响应类型;后者默认为text/html。请参阅示例应用程序以获取更多信息。
404和500错误
如果您创建了名为404.php和500.php的控制器,它们将被自动用于分别处理没有路由和未捕获的异常的情况。
环境
在'project'中存储环境对象的键值对,以及一个用于确定环境是否活跃的函数。
您的应用程序应扩展\WillV\Project\Environment类,配置环境,为每个环境提供所需字段的列表。然后,您可以实例化环境并将它们添加到环境列表中(见下文)。
在实例化环境时,您应提供一个键值对列表,以及一个用于确定新环境是否活跃的函数。一些键值对可以存储在JSON配置文件中,这具有将它们列在.gitignore中的优势,这样它们就不会出现在版本控制中;这些非常适合存储,例如,数据库和第三方API的访问凭证。
环境列表
您应使用EnvironmentList来存储可用的环境列表。getActiveEnvironment方法将通过依次调用每个环境的适当方法来查找活动环境,直到找到活动环境。