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 主题,该主题用于示例。