mindstorm38 / php-sfw
Requires
- leafo/lessphp: 0.4.0
Requires (Dev)
- composer/composer: ^1.8
README
PHP-SFW 是一个面向对象的 PHP 框架。它提供了大量工具用于强大的数据库管理。自 1.1.0 版本起,支持路由、默认页面、原型访问等!
此 README 适用于版本 v1.2.0
。
摘要
1) 安装 SFW
此框架只能使用 composer
PHP 包管理器,更多关于 composer 的信息请查看 这里。
一旦你学会了 composer 的基础知识,请使用 composer require mindstorm38/php-sfw ^1.1.0
安装 PHP-SFW
包。
然后,你可以通过在你的 composer 配置中添加一个名为 - 例如 - sfw-website-init
的脚本并执行 PHP 方法 SFW\Composer::composer_init_wd
来初始化默认网站 document root
(在此文档中也称为 '工作目录')。如果你不知道如何操作,请查看 这里。脚本条目必须 - 使用之前选定的名称 - (在 'scripts' 对象中)"sfw-website-init" : "SFW\\Composer::composer_init_wd"
。
使用 composer run-script sfw-website-init
运行安装程序,它是交互式的。仅提供信息,请求的 "应用程序路径" 是 Apache 的 document root
(或 NGINX)。
2) 默认工作目录
默认工作目录包含以下内容:
langs
:由Lang
模块使用的语言文件。src/lib
:项目中的所有 PHP 类,你必须在composer.json
中添加一个PSR-4
(或其他类型的 SPL 类加载)部分指向它。src/pages/
:网站的所有页面。src/templates/
:网站的所有基本模板。.htaccess
:Apache 的配置文件,对于 NGINX 不有效,但 NGINX 开发者的贡献会受到欢迎。common.php
:该文件在每个客户端请求时加载 composer 自动加载器并启动应用程序(如果使用默认 '路由' 系统)。
生成的 common.php
使用交互式安装程序提供的信息进行了预配置。你现在可以注册所有需要的路由和页面/模板。
默认情况下,此文件通过初始化所有目录和 ResourceHandlers
来启动应用程序,在此方法之后,你可以注册所有自定义页面和路由。
框架的主要命名空间是 SFW\
。
3) 理解资源处理
理解 资源
或 资源目录
的概念对于理解其余文档非常重要。
核心类有一个 ResourceHandler
列表,一个处理器包含一个 基本目录
,并有两个方法来获取相对基本目录的目录和文件的相对路径(如果它们存在的话)。
默认情况下,有一个资源处理器指向您的应用程序的基本目录(在 'start_application' 参数中给出),还有一个指向 vendor
下的 mindstorm38/php-sfw
包目录。这允许 SFW 创建默认页面、模板和静态资源。
最后添加的资源处理器具有优先级,并且根据使用的方法,会覆盖 SFW 源代码。
4) 路由
在大多数 Web 框架中,有一个 route
的概念,路由用于根据请求的 URL 路径执行 controller
。
有两种类型的路由,普通路由和过滤器路由。如果普通路由被验证,则所有过滤器路由将按注册顺序进行测试,并且可以知道已验证了哪种类型的普通路由,它们可以停止操作并执行另一个普通控制器,或者什么都不做。
要添加路由,请使用 Core::add_route
。为了优化最大,创建自己的路由扩展 Route
或 FilterRoute
类。
• ExactRoute
ExactRoute
仅检查在实例化时给定的路径是否与请求路径相对应。
默认情况下,具有空路径 /
的 ExactRoute
路由到默认主页。
• TemplateRoute
TemplateRoute
用于创建具有空白值以传递参数到路由回调的路径。
空白模式定义为 {<type>[idx]}
,其中 type
定义了接受的字符类别,idx
是回调变量数组中解析变量的索引。
模式类型
a
:用于字母和数字n
:用于数字z
:仅用于字母
如果没有指定索引,则索引等于最后一个模式索引 + 1。
对于每个路径目录,您可以使用一个字符串在它之前和之后使用一个模式。例如,dir/test{n0}/{n}
是有效的,但 dir/ok/{a0}test{n1}
是无效的。
• StaticRoute
StaticRoute
用于访问资源。例如,如果基本路径是 static
,并且请求了 static/styles/foo.css
,则回调函数给定的变量数组包含路径 styles/foo.css
。
默认情况下,添加了一个具有基本路径 static
的 StaticRoute
(对于默认 SFW 页面来说是必须的)。
• QueryRoute
QueryRoute
仅避免使用 <base_dir>/{a}
的 TemplateRoute
。
默认情况下,创建了一个具有基本目录 query
的查询路由。
5) 页面和模板
页面和模板存储在资源处理器基础路径下的 src/pages
和 src/templates
中。将它们的文件放置在其标识符命名的目录中。
模板可以用作多个页面的基础,并使用 Core::set_page_template
方法定义。
在页面和模板脚本中,变量 $page
被定义为 Page
实例,并可用于 require
模板或页面部分。
默认情况下,SFW 提供了一个模板 sfw
以及两个与它们关联的页面 error
和 home
。
6) 配置
SFW 网站的配置存储在应用程序根目录下的 config.json
中。它使用 Config
类和 Config::get
方法来获取值(在文档化的代码中了解更多信息)。
7) 语言
语言使用 Lang
类,并存储在每个资源处理器下的 langs
目录中。每种语言由一个遵循 <lang>_<contry>.lang
模式的文件定义。语言文件是语言 entry
的集合,一个条目必须遵循 <name>=<text>
模式,并以 #
开头的行不考虑。
只有 langs.json
文件中定义的语言才会被计算和注册,请查看 SFW 源代码以了解此文件。
如果同时在应用程序和 SFW 资源处理器中定义了语言,则不会覆盖语言,而是合并。
8) 数据库
数据库管理是SFW的主要实用工具之一。目前,只能连接到一个 MySQL 数据库。数据库连接的配置可以在 config.json
中进行。
您可以使用以下类来管理您的表
Database
: 用于准备请求、获取数据等的主要类(更多详细信息请参阅文档代码)。UIDBaseClass
: 一个抽象类,如果您在table class
中有uid
字段,则应在类中实现(参见之前)。UIDLazyInstance
: 一个懒加载值,用于从一个存储在另一个表类中的uid
获取或设置实现UIDBaseClass
的另一个对象。
建议使用类获取系统,为此您需要创建 table class
,其中所有必要的表列都通过具有相同名称的属性表示。为了管理这一点,您可以创建静态类(例如命名为 'Manager'),在其中放置所有需要的SQL请求方法。
在早期版本中,无法轻松创建自己的SQL查询。必须使用类
SQLManager
、SQLSerializable
、TableDefinition
和TableManager
。
现在这些类已被弃用。
9) 原型网站
框架配置允许您通过限制其访问来将您的站点设置为原型,使用配置值 prototype:enabled
。
如果您启用原型,则访问凭证将用于访问整个站点,这些凭证在 prototype:users
配置部分中指定。在此部分中,键是用户名,值是密码,密码可以留空,否则密码必须以SHA-256编码。