phdomiciano/phcodemvc

这是一个使用MVC模式但无框架的简单课程列表CRUD。

v1.0.0 2022-08-23 23:02 UTC

This package is auto-updated.

Last update: 2024-09-24 15:22:51 UTC


README

这是一个使用MVC模式但无框架的简单课程列表CRUD。挑战在于不使用外部框架,而是开发一个遵循良好实践和概念的完整MVC结构。

要求

  • PHP ^8.1
  • Composer

此代码使用

  • PSR-4: 自动加载(Composer)
  • DOCTRINE/ORM
  • SQLITE

安装

通过 Composer 安装此包。

在终端中运行Composer require命令。

composer create-project phdomiciano/phcodemvc

如果需要,更新您的需求,然后在终端运行。

composer update

composer dump-autoload

在终端中创建sqlite数据库和所有所需的表。

php db.php migrate

在终端运行您的php服务器,并在浏览器中访问项目URL。

php -S localhost:8080

应用解决方案

  • 请求表单验证
  • 依赖注入
  • 多态性
  • 匿名类

开发解决方案

迁移

为了在开发环境中使用,创建了一个可以在终端中执行的脚本,用于对数据库进行小指令,例如创建数据库、执行迁移、查询记录和表等。要尝试和获取更多信息,请在终端运行。

php db.php help

对于新的迁移,创建了一个类似于其他框架的结构,只需在“database/migrate”文件夹中创建一个新文件即可。

索引

index.php文件是应用程序的核心,负责过滤、路由转发和执行第一次验证。

路由

要创建一个新路由,只需将其添加到“config/routes.php”文件中。直观地,以简化的方式遵循现有主要框架的模式。

位于“src/infra”文件夹中的Route类负责根据“routes.php”列表识别和过滤路由信息。

请求

位于“src/requests”的父级Request类管理HTTP请求,便于数据处理,并自动清理所有输入数据(无论提交方法如何)。此类可以使用“validate()”方法进行手动或自动验证表单数据。

“validate()”方法可以手动接收一个过滤器数组或自动从Request的子类捕获验证规则。

可以在“routes.php”文件中配置自定义Request类。如果没有为路由提供自定义Request,则系统自动加载父类,允许手动验证。

控制器

父级Controller类已经有一个entityManager和一个Request类的对象。

认证

位于“src/infra”文件夹的Auth类可以在系统的任何地方使用。它处理和存储用户认证信息、记录所有权验证和CSRF令牌管理。

视图

位于“src/infra”文件夹的View类必须在控制器中使用以显示视图。此类负责查找视图文件,管理警报和错误(自动捕获)。警报和错误类似于闪存消息,在第一次读取后自动删除。

CSRF保护

此代码关注于CSRF(跨站请求伪造)。Auth类管理每次提交时都会变化的随机令牌,并且所有表单都必须包含一个隐藏的具有该令牌的项,该令牌将在每次请求某些数据时由Request类自动比较。如果表单没有包含具有有效令牌的隐藏项,则表单提交将不会工作。在任意视图中都可以轻松创建隐藏项,因为View类会加载一个带有生成隐藏项方法的Auth对象。只需在表单中打印这个即可

<?=$auth->token();?>

属性ORM

在项目中使用了Doctrine作为ORM,配置为通过属性映射而不是注解,以更直观的方式,并且无需使用注释作为代码。

PSRs和最佳实践

此代码符合PSRs,遵循一些已建立的标准,如PSR-4、PSR-1和PSR-12。代码标识、清洁代码、代码结构、变量和函数参数的类型化,以及定义返回类型。