coly010 / untitled
PHP 5.6 微型框架
Requires
- php: >=5.6.0
This package is not auto-updated.
Last update: 2024-09-28 20:55:05 UTC
README
内容
安装
安装 Untitled 有几种方法。下面我们将详细介绍这些方法。
下载源代码
- 前往发布页面: https://github.com/Coly010/Untitled/releases
- 点击下载压缩源代码的链接。
- 选择一个文件夹来下载。
- 找到下载的文件并将其解压。
- 开始开发你的应用!
通过 composer 安装
您也可以通过 composer 安装,但不太推荐,因为需要几个额外的步骤才能使其正常工作。
- 如果您尚未安装 composer,请查看这里: https://getcomposer.org.cn/doc/00-intro.md#installation-linux-unix-osx
- 运行以下命令
composer require coly010/untitled
- 现在导航到
vendor/coly010/untitled
- 将文件夹内容复制到您的应用根目录。
- 开始开发你的应用!
快速入门指南
制作网络应用已成为技术行业的一个基本组成部分,我们都想找到一种更简单的方法从头开始,每次我们都有一个新项目。
这就是 Untitled 的用武之地。它通过为您完成大量启动工作来简化设置网络应用的过程。您只需要创建您的页面,然后就可以开始!Untitled 内置了 Twig,这是一个专为 PHP 设计的强大模板引擎。它有助于将视图逻辑与应用逻辑分离。
以下我们将快速讨论如何将 Untitled 用于您的项目!
理解 Untitled 工作流程
Untitled 的工作流程与您可能习惯的其他 PHP 框架略有不同。
Untitled 专注于您的网络应用中的页面。对于您的网络应用中的每个页面,您只需创建一个新的 Page
对象来表示它。然而,Untitled 需要将请求的 URI 与您的页面进行匹配。这就是 Untitled 最强大的功能之一:路由。
每个 Page
对象都包含一个 Route
对象数组。在创建 Route
对象时,您需要设置 Route
将要处理的 URI。一旦您设置了 Route
对象,只需将它们添加到您的 Page
对象中即可。Untitled 会处理其余的工作。
DataProcess
对象用于需要执行与 Route
相关的任何逻辑。例如,如果您有一个登录表单并需要验证表单数据,您会创建一个 DataProcess 来执行此逻辑。然后,您将 DataProcess 链接到 Route
对象。
Twig 随 Untitled 一起提供并集成,是渲染页面的设置方法。在您的 Route
对象中,您设置与 Route
相关的 html 文件路径。
创建您的第一个页面
请注意以下应用程序目录结构
- 应用程序
- 缓存
- 配置
- 数据处理
- 页面
- 页面名称
- 路由
- 视图
此目录结构使您的应用程序代码结构良好且易于查找。
对于您希望创建的每个页面,始终在 Pages 目录中创建一个与页面名称相同的目录。
好的,让我们来创建我们的第一个页面。现在,大多数网站都有一个 About
页面,让我们从这里开始。
首先,在 Pages
文件夹中创建一个新的文件夹并命名为 About
。现在,在 About
文件夹中,创建另一个名为 Routes
的文件夹。现在是创建页面的时候了。创建一个新的 PHP 文件并命名为 About_Page.php
。请注意 _Page
后缀。这有助于 Untitled 发现您的应用中的页面。这对于框架的正常工作是一个要求。打开 About_Page.php
并输入以下内容
<?php namespace Application\Pages\About\About_Page; use Untitled\PageBuilder\Page; use Application\Pages\About\Routes\About_Route; class About_Page extends Page { public function __construct(){ parent::__construct(); $this->AddRoute(new About_Route()); } }
如果您正在使用 IDE,可能会看到一些错误。我们现在将修复它。转到您的 About
文件夹中的 Routes
文件夹,并创建一个名为 About_Route.php
的新文件。打开 About_Route.php
并输入以下内容
<?php namespace Application\Pages\About\Routes\About_Route; use Untitled\PageBuilder\Route; class About_Route extends Route { public function __construct(){ parent::__construct(); $this->Request = "about"; $this->RenderView = true; $this->ViewFilePath = "About/about.html"; } public function RunDataProcess(){} }
由于 Route
是一个抽象类,我们必须实现 RunDataProcess()
方法。完成页面创建的最后一步是创建与 About 页面关联的 html 文件。转到您的 Views
文件夹并创建一个名为 About
的新文件夹。在这个 About
文件夹中创建一个名为 about.html
的新文件。打开 about.html
并输入以下内容
<html> <head> <title>Example</title> </head> <body> <h2>About</h2> <p>This is your about page</p> </body> </html>
哇,当有人访问您的网站并访问 url: http://yoursite.com/about 时,Untitled 将创建页面并显示它。
让我们获取一些视图数据!
基于 URI 渲染基本页面很好,但有时您需要执行一些逻辑。有时您需要执行计算或从数据库检索数据以帮助生成页面内容。
Untitled 为此提供了解决方案!这个解决方案以 DataProcesses 的形式出现!在 simplest form 中,DataProcess
是一个您可以创建来处理此逻辑的空类。Untitled 随带一个简单的 PDO 包装器,可能对您有所帮助。如果不适用,您可以直接使用以下方法访问 PDO 对象:
$db = new Database()->Connect(); $db = $db->DB;
让我们通过一个示例来了解这如何与上面创建的 About 页面一起工作。假设数据库中有一个名为 content
的表,其中有两个列,page
和 content
。在这个表中有一个记录包含 About 页面的内容。我们需要检索此内容以便在用户导航到 About 页面时显示。请 注意:以下代码除非您创建适当的数据库表并添加记录,否则将不会为您工作。您还需要将 Database_Config.php 文件更改为与您的数据库凭据匹配。
为此,在 DataProcesses
文件夹中创建一个名为 About_DataProcess.php
的新文件。打开 About_DataProcess.php
并输入以下内容
<?php namespace Application\DataProcesses; use Untitled\PageBuilder\DataProcess; class About_DataProcess extends DataProcess { public function __construct(){ parent::__construct(); } public function RetrieveContent(){ $this->db->Run("SELECT * FROM content WHERE page = :page", [":page" => "about"]); $content = $this->db->Fetch()['content']; return $content; } }
接下来,打开 About_Route.php
(位于 Pages/About/Routes)。在 use Untitled\PageBuilder\Route;
下方添加 use Application\DataProcesses\About_DataProcess;
语句。将构造函数修改为以下内容
public function __construct(){ parent::__construct(); $this->Request = "about"; $this->RenderView = true; $this->ViewFilePath = "About/about.html"; $this->DataProcess = new About_DataProcess(); }
现在,将 public function RunDataProcess(){}
修改为
public function RunDataProcess(){ $this->ViewData = ["content" => $this->DataProcess->RetrieveContent()]; }
这将从数据库中检索内容并将其传递给视图数据。视图数据始终应为数组,并将其发送到 Twig 以传递到视图文件。因此,在我们的 about.html
中,我们可以现在做以下操作
<html> <head> <title>Example</title> </head> <body> <h2>About</h2> {{ content }} </body> </html>
这将直接从数据库加载内容到页面上。很简单。
操作指南
以下您将找到有关 Untitled 不同部分的信息。
设置配置
您可能需要更改一些配置选项,以便使您的 Web 应用程序正常工作。您可以在 Application/Config
文件夹中找到这些配置文件。默认情况下,您应该看到三个文件
Application_Config.php Database_Config.php Twig_Config.php
如果您打开 Application_Config.php
,您将看到以下内容
<?php namespace Application\Config; class Application_Config { public static $PAGES_DIR = "Application/Pages"; public static $DATA_PROCESSES_DIR = "Application/DataProcesses"; public static $VIEWS_DIR = "Application/Views"; }
$PAGES_DIR
表示存储页面的文件夹的相对路径。 $DATA_PROCESSES_DIR
表示存储数据处理的文件夹的相对路径。 $VIEWS_DIR
表示存储视图的文件夹的相对路径。默认情况下,如果您使用随源提供的文件夹结构,则不需要编辑这些变量。
如果您打开 Database_Config.php
,您将看到以下内容
<?php namespace Application\Config; class Database_Config { /** * @var string Database Server host */ public static $HOST = "localhost"; /** * @var string Database name to connect to */ public static $DBNAME = ""; /** * @var string Username for the database */ public static $USER = ""; /** * @var string Password for the associated username */ public static $PASS = ""; }
$HOST
表示 MySQL 服务器的位置。默认情况下,通常是 localhost
。 $DBNAME
表示您希望使用的数据库的名称。 $USER
表示与数据库关联的用户名。 $PASS
表示相关联用户名的密码。
Twig_Config.php
存储了一些 Twig 的配置。如果您打开 Twig_Config.php
,您将看到以下内容
<?php namespace Application\Config; class Twig_Config { /** * @var string Path to the templates */ public static $TEMPLATE_PATH = "Application/Views"; /** * @var string Path to the cache directory */ public static $CACHE_PATH = "Application/Cache"; }
$TEMPLATE_PATH
表示应用程序将使用的视图的路径。 $CACHE_PATH
表示 Twig 将用于缓存视图的文件夹的路径。您可能会遇到一些问题,通常是因为 Twig 需要对该文件夹的写权限。更多信息请参见此处。
页面
页面是 Untitled 的基础。它们代表应用程序将拥有的每个页面。如果您考虑您的 Web 应用程序,您可以将其分解为一个页面,但具有多个视图。想想看。
比如说您有论坛。它应该是一个页面,根据某人是否正在查看线程、帖子或类别,页面上会有适当的内容。当用户点击线程时,他们仍在查看论坛页面,但显示的是特定线程,而不是线程列表。 但他们仍然在查看论坛页面!
Untitled 适应了这种思维方式。它允许开发人员创建他们需要的页面。然后使用路由来决定页面上应显示哪个视图。下面是 Page
的完整参考。
路由
路由与页面相辅相成。没有路由,页面就无法工作。它们需要匹配请求的 URI 并显示与 URI 匹配的正确视图。但路由做更多的事情,它还提供了一种方法,让开发人员将 DataProcess
连接到特定的 Route
,从而使开发人员可以根据请求的 URI 分割应用程序逻辑。
所有 Route
对象都必须实现 RunDataProcess
方法,该方法将由 Untitled 自动调用,以执行与该 Route
相关的任何应用程序逻辑。
路由还具有其他一些功能,在不同的场景中可能非常有用。 复杂路由
允许开发人员直接从 URI 接受参数。为此,开发人员需要知道这些参数中的每一个将在 URI 的哪个位置出现。
以您正在为您的网络应用程序构建的一个简单搜索功能为例。很多时候,开发人员只是使用 GET 请求来处理搜索功能。要在 Untitled 中完成同样的操作,您只需创建一个类似于 /search/search_term
的 URI,然后创建一个适当的 Route
,如下所示
<?php namespace Application\Pages\Search\Routes; use Untitled\PageBuilder\Route; use Application\DataProcess\Search_DataProcess; class Search_Route extends Route { public function __construct(){ parent::__construct(); $this->ComplexRoute = true; $this->Request = "search/%VAR%" $this->RenderView = true; $this->ViewFilePath = "Search/results.html"; $this->DataProcess = new Search_DataProcess(); } public function RunDataProcess(){ $this->ViewData = ["search_result" => $this->DataProcess->DoSearch($this->Params[0])]; } }
在 URI 的任何位置,开发人员期望出现参数时,在设置 Route
的 $Request
时应使用 %VAR%
。您甚至可以有一个像 $this->Request = /search/%VAR%/filesonly/%VAR%/limit/%VAR%/page/%VAR%
这样疯狂的结构。 Untitled 将在 URI 中找到参数,并将它们一个接一个地添加到 Route
中的 $Params
数组中。
下面是 Route
的完整参考
DataProcesses
DataProcess
基本上是一个空的类,包含对 Database
封装的引用,开发人员通过扩展和用于存储与特定 Page
或 Route
相关的任何应用程序逻辑来使用它。如果某个特定的 Page
有许多 Route
对象,则开发人员可以创建多个 DataProcess
对象来适应这种情况,并保持应用程序逻辑整洁和良好维护。如果数据库配置尚未设置,则 $db
也不会设置。
下面是 DataProcess
的完整参考
Additional Library References
Untitled 随带一些额外的库,这些库可能有助于开发人员创建他们的网络应用程序。下面是它们的完整参考。
Database
Database
仅为 MySQL 数据库的内置 PDO
对象构建的一个包装器。
Input
Input
库是一个简单的类,具有静态方法,用于访问 PHP
的 $_POST
和 $_GET
数组。
Sanitiser
Sanitiser
类包含一些静态方法,以帮助开发人员清理用户输入。
Validator
Validator
类包含一些静态方法,以帮助开发人员验证用户输入。
Session
Session
类包含一些静态方法,以帮助开发人员处理会话。
ULogger
ULogger
是一个包含一些静态方法的基本类,以帮助开发人员在调试应用程序时记录任何内容。它以 HTML
输出日志。
Credits
Untitled 由 Colum Ferry 开发。版权所有 © 2017 Colum Ferry。在 BSD-3-Clause 许可证下发布。
Twig 版权 © 2017 SensioLabs 发布在 BSD-3-Clause 许可协议之下。本软件由版权所有者和贡献者提供“现状”并明确或暗示地不提供任何保证,包括但不限于适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者不应对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论此类损害是由于何种原因引起的,也不论是根据何种责任理论(合同、严格责任或侵权责任,包括疏忽或不计)引起的,即使已告知此类损害的可能性。