YAMF(另一个MVC框架)是一个小的PHP MVC框架,旨在让您在没有大量设置工作的情况下快速使用MVC范式。您所需要的只是一个接受.htaccess文件的Web服务器,您几乎可以使用!
最低要求:PHP 7.0+。
Use this template按钮,克隆存储库和/或将此项目用作您自己项目的模板。config.php 。调整您想要的任何参数,或在$app中添加新参数,例如会话逻辑。默认情况下,您无需调整任何内容即可使您的网站启动并运行。config-private.sample.php等config-private.php例如,您可以将$app->db设置为本地数据库的PDO实例。请注意, config-private.php将在config.php中的任何内容之前加载。use Yamf/XYZ ,您需要使用Composer。使用作曲家非常容易:只需转到下载页面并在顶部运行脚本即可。 (注意:如果您在Windows上,则需要在介绍页面上按照说明。)composer install (如果您的目录中有一个composer.phar文件,请运行php composer.phar install )。它会坐下来思考一分钟。他们不在这里,也不是故意的! YAMF被故意编写为不使用作曲家自动加载器以外的任何外部依赖项来降低进入PHP中MVC范式的进入障碍。如果您想要任何这些东西,只需将它们与您喜欢的依赖经理(例如作曲家)一起吸入。由于作曲家已经为PSR-4自动加载而运行该项目是必要的,因此我们建议使用Composer。 vendor/autoload.php已在init.php中为您包含在内。
有关查看模板的注释,请参见有关子类的部分。
如果您在YAMF上阅读以下文档,那么您可能会比只是跳入并尝试自己阅读代码的情况要好得多。 :)只需要几分钟,这是值得的!
为了促进配置参数的简单传递,例如数据库设置等,YAMF将类YamfAppConfig的$app变量传递给每个控制器函数。您可以设置此变量以存储数据库PDO对象,更改视图扩展名或文件夹位置以及许多其他设置。如果要将自己的值添加到$app中,则可以创建一个从YamfAppConfig派生的类,并在config.php中更改appConfigClass设置,以指向您的自定义类。请注意,您的自定义类必须来自YamfAppConfig !请参阅config.php查看YAMF通过$app传递的所有设置和值。值得注意的是,您可以:
viewsFolderName )viewExtension )defaultHeaderName / defaultFooterName )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.phpviews文件夹中创建视图return new View('name/of/view');由于路线而被称为所有控制器方法,应返回yamf/Responses/Response或所述类的子类。以下是有关如何使用每个的描述。大多数可以仅与构造函数一起在一行中使用。
Response - 路线响应的基类。new Response($statusCode = 200)yamf/Responses/Response项目子类子类,因此,如果需要,它们都可以返回自定义的HTTP状态代码!ErrorMessage围绕视图的简单包装器以发送400个状态代码和error.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 。Response 。Redirect - 允许302重定向到其他页面或路线new Redirect($redirectPath, $isInternalRedirect = true)$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用于数据库连接null ,以避免使用它们。除此之外, init.php中还设置了两个可用的变量:
$app->isLocalHost是否在本地主机上运行该应用程序( 127.0.0.1或::1 )$app->basePath当前Web应用程序的基本目录。这可用于允许Web服务器上的嵌套Web应用程序。我强烈建议您在执行本地网站链接时在views中使用此变量,以便您将文件移动或以后将其移动到子文件夹中,一切都不会破裂。要链接到您网站上的另一个页面,只需使用$app->yurl(string) (yamf url)函数: <?= $app->yurl('/path/to/page') ?> 。 $request $request将拥有有关您的路线的所有数据以及您请求随附的不同参数。它是类型yamf/Request 。它有这些公共成员可用:
$request->route - 此请求的原始路由字符串$request->controller - 控制器的字符串名称$request->function - 呼叫控制器功能的字符串名称名称$request->routeParams路由中的任何参数,例如{id}。格式:['id'=>值]$request->get在URL中找到的任何获取参数 - 与$ _GET相同的格式(未执行的额外处理)$request->post任何帖子参数 - 与$ _post相同的格式(未执行额外的处理)$request->anchor - 如果使用,则URL的#部分(无#)。路由器足够聪明,无法在/blah/#/foo等网址上匹配。扩展此框架的最简单方法是源自Response (或其他Response子类)和/或为某些控制器创建父类。例如,通过从View派生,您可以更改视图输出以使用Twig模板引擎,而不仅仅是简单的PHP输出。通过为您的控制器创建父类,您可以添加验证或其他API路由的数据的其他额外处理,例如验证用户名/密码或令牌。这些选择是无穷无尽的,潜力很大!
有一个示例是在树枝分支上使用树枝而不是原始PHP!
YAMF支持的一个漂亮功能是不需要route或controller静态网页。如果您只想/about成为一个简单的页面,请在views/static/文件夹和-BAM中扔一个about.php 。 - /about您网站上的作品。喜欢/blog/post-name子文件夹呢?那也有效!添加views/static/blog/post-name.php文件,它只是可行(TM)!您可以使用它在网站上仍然具有漂亮的URL,而无需添加路线和控制器。
您可以在config.php中配置静态视图位置。
请注意,路由器在检查静态页面之前试图匹配router.php路由。
路由器支持未立即启用的功能是URL缩短 - 例如https://example.com/short-url 。它需要一个数据库连接,但是如果添加数据库连接并具有适当的数据库表(架构在config.sample.php中),则可以在需要的情况下使用URL缩短。您不需要启用此功能。
我在config.sample.php中包括了一些默认的会话逻辑。随时使用它,修改它或扔掉。如果您有有关如何改善此功能的建议,请打开拉动请求或问题以产生进一步的讨论。
很高兴你问!在开源项目中,总有一些事情可以完成:修复错误,新功能等等!查看此存储库的“问题”选项卡,并查看已报告了哪些错误以及已要求的功能。关于贡献文档中有贡献的更多信息。
麻省理工学院许可证。在网站上使用该框架时,请确保在此框架上包括此框架的许可证(如果您觉得很慷慨!)。谢谢你! :)
特别感谢BootSwatch的样品中使用的引导纸主题。