deadpikle / yamf-php
Requires
- php: ^7.0
- ext-json: *
- ext-pdo: *
This package is auto-updated.
Last update: 2024-09-29 04:14:42 UTC
README
YAMF (Yet Another MVC Framework) 是一个轻量级的PHP MVC框架,旨在让您快速开始使用MVC模式,而无需进行大量设置工作。您只需要一个接受 .htaccess 文件的Web服务器,基本上就可以开始使用了!
设置
最低要求:PHP 7.0+。
- 克隆存储库,或通过点击 此链接 或在主项目仓库页面上点击
Use this template按钮将此项目用作您自己的项目的模板。 - 确保您的Web服务器已设置好以读取和利用 .htaccess 文件。(如果您不知道这意味着什么,请谷歌一下!也许我们稍后会在此处添加一些辅助链接。)
- 如有必要,请配置
config.php。调整您想在其中设置的任何参数,或向$app中添加新参数,例如会话逻辑。默认情况下,您无需调整任何内容即可启动和运行您的网站。 - 如果您需要使用数据库凭据、私钥等在网站上使用的信息,请将
config-private.sample.php复制到config-private.php并根据您的需求进行调整。例如,您可以设置$app->db为您的本地数据库的PDO实例。 请注意,config-private.php将在config.php中的任何内容之前加载。 - 为了使
use Yamf/XYZ语句正常工作,您需要使用 Composer。使用Composer非常简单:只需访问 下载页面 并运行顶部的脚本。(注意:如果您使用Windows,请按照简介页面上的说明 进行操作。) composer install(如果您在目录中有composer.phar文件,请运行php composer.phar install)。它将静置思考一分钟。- 您已完成!享受您的基于MVC的网站!当然,您可以移除默认示例项和CSS!
等等!数据库迁移库/视图模板逻辑/单元测试库/{其他框架}在哪里?
它们不在这里,也不是故意不在这里的!YAMF是特意编写的,不使用任何外部依赖项,除了Composer的自动加载器,以降低使用PHP中MVC模式进入的门槛。如果您需要任何这些功能,只需使用您最喜欢的依赖管理器(如Composer)引入它们。由于Composer对于运行此项目的PSR-4自动加载是必需的,因此我们建议使用Composer。vendor/autoload.php 已经在 init.php 中为您包含。
有关视图模板的说明,请参阅子类化部分。
文档
如果您阅读了以下关于YAMF的文档,您将比仅仅跳入并尝试阅读代码要好得多。 :) 这只需几分钟,而且值得!
关于 $app 的说明
为了便于配置参数(如数据库设置等)的轻松传递,YAMF将一个类为Yamf\AppConfig的$app变量传递给每个控制器函数。您可以设置此变量以存储您的数据库PDO对象,更改视图扩展名或文件夹位置,以及许多其他设置。如果要将自定义值添加到$app中,可以创建一个从Yamf\AppConfig派生的类,并将config.php中的appConfigClass设置更改为您自定义的类。请注意,您的自定义类必须从Yamf\AppConfig派生!请参阅config.php以查看YAMF通过$app传递的所有设置和值。值得注意的是,您可以
- 更改视图文件夹的位置(
viewsFolderName) - 更改视图文件的扩展名(
viewExtension) - 更改默认的头部或尾部名称(
defaultHeaderName/defaultFooterName) - 轻松访问您的PDO/其他数据库(在
config-private.php中设置)
$app在您的视图中自动可用。
添加新路由
您可能首先想要做的是添加一个新路由。为此,请按照以下步骤操作
- 如果您还没有为新路由创建控制器类,请前往项目中的
app/Controllers文件夹添加一个。子文件夹是可以的。控制器实际上不需要在名称中包含Controller,但请确保类名与文件名匹配。 - 为您的控制器方法添加一个存根。至少,它必须是一个接受两个参数的
public函数:$app和$request(按此顺序)。 - 打开
routes.php并确保您理解路由的工作原理的文档和示例。 - 将您的路由添加到
routes数组中。- 如果需要,请指定
POST。 - 控制器名称字符串必须与第一步中控制器文件名和类名匹配。
- 如果控制器位于子文件夹(或子文件夹中),请确保您有
Parent-Folder/Controller-Name格式的名称。 - 函数名称应与第二步中的函数名称匹配。
- 如果需要,请指定
- 到目前为止,路由已经生效,但您的控制器方法需要返回某种类型的
yamf/Responses/Response,这可以是从View到JSON响应,甚至更多。请参阅下一部分以获取更多信息。 - 您正常的用例可能是返回一个
yamf/Responses/View。在views文件夹中创建一个PHP文件(视图)--同样,子文件夹是可以的--,并在控制器方法中返回return new View('name/of/view');。 - 现在路由应该可以正常工作了!
简而言之
- 将控制器及其方法添加到
app/Controllers文件夹 - 将路由添加到
routes.php - 如果需要,在
views文件夹中创建视图 - 将控制器方法修改为
return new View('name/of/view');
控制器函数的返回类型
所有因路由而调用的控制器方法都应该返回一个yamf/Responses/Response或其子类。以下是关于如何使用每个类的说明。大多数都可以使用一行代码仅使用构造函数来完成。
Response-- 路由响应的基类。- 构造函数格式:
new Response($statusCode = 200) - 输出状态码。
- 由于所有其他
yamf/Responses/Response项目都是从这个父类派生的,因此它们都可以返回自定义HTTP状态码,如果您想的话!
- 构造函数格式:
ErrorMessage-- 简单包装View,以发送回状态码为400的错误.php视图。- 构造函数格式:
new ErrorMessage($msg = '', $name = 'error', $title = '', $headerName = '', $footerName = '')。$name是视图名称。 - 请注意,第一个参数是错误消息,而不是视图名称!
- 默认情况下,输出到视图中的错误变量名为
$error。如果不使用子类化,您不能更改此变量。 - 默认情况下,使用的头部和尾部文件是
views/header.php和views/footer.php。 - 当然,状态码也可以更改。
- 构造函数格式:
JsonResponse-- 有关如何从控制器发送JSON响应的示例- 构造函数格式:
new JsonResponse($data, $jsonEncodeOptions = 0) - 通过
echo json_encode($this->data, $this->jsonEncodeOptions);输出$data
- 构造函数格式:
NotFound-- 用于向客户端返回404未找到消息。- 构造函数格式:
new NotFound($name = '404', $data = [], $title = '', $headerName = '', $footerName = '')。$name是视图的名称。 - 默认情况下,使用的头部和尾部文件是
views/header.php和views/footer.php。 - 如果您只想返回404(例如,用于API),请使用
Response。
- 构造函数格式:
Redirect-- 允许对其他页面或路由进行302重定向- 构造函数格式:
new Redirect($redirectPath, $isInternalRedirect = true) - 默认状态码为302
$isInternalRedirect用于重定向到当前网站/routes.php数据中的路由。如果您想重定向到内部路由,请像这样使用Redirect:new Redirect('/route/name');(注意前面的/)。如果不这样做,请像这样使用Redirect:new Redirect('https://example.com', false);。
- 构造函数格式:
View-- 用于返回基于PHP的HTML视图。- 构造函数格式:
new View($name, $data = [], $title = '', $headerName = '', $footerName = '')。$name是视图的名称。 - 要将数据发送到您的视图,最简单的方法可能是使用
compact函数。请参阅BlogController的示例。 - 默认情况下,使用的头部和尾部文件是
views/header.php和views/footer.php。
- 构造函数格式:
如果您对YAMF中应包含的更多 Response 类型有想法,请通过问题标签打开功能请求或打开拉取请求!
发送到控制器方法的数据
从路由发送到您的控制器方法中的有两个主要变量:$app 和 $request。 请注意,所有 View 输出都将具有可用的 $app 和 $request 变量。您不需要将它们作为 $data 参数发送。
AppConfig $app
$app 主要是在 config.php 中设置的配置变量。查看该文件以快速查看可用项。一些更重要的事项包括
$app->db用于数据库连接- 所有视图、404页面和错误页面的默认头部文件名。您可以将其设置为
null以避免完全使用它们。
除此之外,还有两个在 init.php 中设置的变量可用
$app->isLocalHost-- 应用程序是否在本地主机上运行(127.0.0.1或::1)$app->basePath-- 当前Web应用程序的基础目录。这可以用于允许在Web服务器上嵌套Web应用程序。我 强烈 建议在本地网站链接时使用此变量,以便在移动文件或稍后将其移动到子文件夹时不会破坏一切。要链接到网站上的另一个页面,只需使用$app->yurl(string)(YAMF URL)函数,如下所示:<?= $app->yurl('/path/to/page') ?>。
$request
$request 将包含有关您的路由以及随请求传入的不同参数的所有数据。它是 yamf/Request 类型。它具有以下公共成员可用
$request->route-- 请求的原始路由字符串$request->controller-- 控制器的字符串名称$request->function-- 要调用的控制器函数的字符串名称$request->routeParams-- 路由中的任何参数,例如 {id}。格式:['id' => value]$request->get-- 在URL中找到的任何GET参数 -- 与 $_GET 的格式相同(没有进行额外处理)$request->post-- 任何POST参数 -- 与 $_POST 的格式相同(没有进行额外处理)$request->anchor-- 如果使用,则是 URL 的 # 部分(不含 #)。路由器足够智能,不会与像/blah/#/foo这样的 URL 匹配。
通过子类扩展框架
您扩展此框架的最简单方法是从 Response(或某些其他 Response 子类)派生,并为一些控制器创建一个父类。例如,通过从 View 派生,您可以将视图输出更改为使用 Twig 模板引擎,而不是仅使用简单的 PHP 输出。通过为您的控制器创建父类,您可以为所有 API 路由添加验证或其他额外数据处理,例如验证用户名/密码或令牌。选项无穷无尽,潜力巨大!
在 Twig 分支中有一个使用 Twig 而不是原始 PHP 的示例!
静态页面简洁性
YAMF 支持的一种非常巧妙的特性是无需 route 或 controller 的静态网页。如果您想让 /about 只是一个简单的页面,只需将 about.php 页面放入 views/static/ 文件夹中,然后 -- 嘭! -- /about 就可以在您的网站上工作。那么子文件夹如 /blog/post-name 呢?这也一样工作!添加一个 views/static/blog/post-name.php 文件,它就 Just Works(tm)!您可以使用此功能在网站上仍然拥有漂亮的 URL,而无需担心添加路由和控制器。
您可以在 config.php 中配置静态视图位置。
请注意,路由器在检查静态页面之前会尝试匹配 router.php 路由。
URL 缩短器
路由器支持的一个未立即启用的功能是 URL 缩短 -- 例如 https://example.com/short-url。它需要一个数据库连接,但如果您添加数据库连接并具有适当的数据库表(模式在 config.sample.php 中),则可以在需要时使用 URL 缩短。您不必启用此功能。
默认会话逻辑
我在 config.sample.php 中包含了一些默认的会话逻辑,并已注释。请随意使用它、修改它或丢弃它。如果您有改进此功能的建议,请提交一个拉取请求或问题以产生进一步的讨论。
我能帮忙贡献吗?
很高兴您问!开源项目上总是有可以做的事情:修复错误、添加新功能等等!检查此存储库的问题标签,看看已经报告了哪些错误,以及哪些功能已被请求。有关贡献的更多信息,请参阅 贡献 文档。
许可
MIT 许可证。请确保在使用此框架(如果愿意,请包括 GitHub 链接!)时包含此框架的许可证。谢谢! :)
特别感谢
特别感谢 Bootswatch 提供的 Bootstrap Paper 主题,该主题用于示例。