tigron / skeleton-core
Skeleton的核心功能
Suggests
- dev-master
- v5.0.0
- 4.x-dev
- v4.0.7
- v4.0.6
- v4.0.5
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- 3.x-dev
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- 2.x-dev
- v2.0.12
- v2.0.11
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- 1.x-dev
- v1.4.9
- v1.4.8
- v1.4.7
- v1.4.6
- v1.4.5
- v1.4.4
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v0.1.17
- v0.1.16
- v0.1.15
- v0.1.14
- v0.1.13
- v0.1.12
- 0.1.11
- v0.1.10
- v0.1.9
- v0.1.8
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- 0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- v0.0.5
- v0.0.4
- v0.0.3
- v0.0.2
- v0.0.1
- dev-feature/typehints
This package is auto-updated.
Last update: 2024-09-02 11:56:43 UTC
README
描述
这个库包含了skeleton框架的核心功能。它执行以下主要任务
- 自动加载
- 配置管理
- 应用检测
- HTTP工具包
安装
通过Composer安装
composer require tigron/skeleton-core
安装后,您可以开始一个skeleton项目。
特性
自动加载
Skeleton不会强制您使用特定的文件结构。这意味着skeleton可以适应您的结构。为了做到这一点,您需要配置skeleton自动加载器。
自动加载可以配置如下
/**
* Register the autoloader
*/
$autoloader = new \Skeleton\Core\Autoloader();
$autoloader->add_include_path($root_path . '/lib/model/');
$autoloader->add_include_path($root_path . '/lib/base/');
$autoloader->add_include_path($root_path . '/lib/component/');
$autoloader->add_include_path($root_path . '/tests');
$autoloader->register();
Skeleton自动加载器将在其搜索请求的类时包括给定的包含路径。可以提供一个可选参数'class_prefix'。这将给给定路径的所有类添加给定的前缀
配置管理
Skeleton核心提供了一个Config对象,该对象由给定的配置目录填充。Config对象自动包含存储在配置目录中的所有php文件。每个php文件应返回一个php数组。每个键值对都将可用于您的项目。
包含配置目录
\Skeleton\Core\Config::include_path('/config');
存储在配置目录中的PHP文件将按字母顺序评估。如果您有特定环境的配置,您可以在配置目录中创建一个名为environment.php
的文件,该文件将被最后评估。
获取配置对象
$config = \Skeleton\Core\Config::get();
Skeleton至少需要以下配置项才能正常工作
应用检测
该包将自动检测“应用”,这是项目的独立部分。以下应用类型可用
- skeleton-application-web:一个Web应用。
- skeleton-application-api:一个Openapi接口
- skeleton-application-dav:一个webdav接口
根据请求中的Host
头,启动正确应用。这将是应用配置文件中的hostnames
数组发挥作用的地方。
如果skeleton-core
可以根据Host
头找到匹配的应用。完成HTTP请求是应用的职责。
应用在$application_path中识别,应至少遵循以下目录结构
- {application_path}
- {APP_NAME}
- config
- event
应用配置目录应包含特定于应用的配置文件。以下配置指令至少应设置
HTTP工具包
尽管skeleton可用于控制台应用,但它提供了一个HTTP工具包。它可以
- 接受HTTP请求并将其传递给正确应用
- 服务媒体文件
- 会话管理
HTTP处理程序
HTTP处理程序将接受传入的HTTP请求并基于HTTP主机头搜索正确应用。
运行HTTP处理程序
\Skeleton\Core\Http\Handler::Run();
然后,它将请求传递给应用。应用将通过以下方式设置
\Skeleton\Core\Application::set();
在请求的生命周期中,可以通过以下方式检索应用
\Skeleton\Core\Application::get();
服务媒体
媒体服务仅针对已知文件类型。已知的文件类型有:css、map、pdf、txt、woff、woff2、ttf、otf、eot、gif、jpg、jpeg、png、ico、svg、js、html、htm、mp4、mkv。其他文件扩展名将被忽略。媒体服务可以通过以下方式请求:
\Skeleton\Core\Http\Media::detect($request_uri);
将按照以下顺序搜索资产:
- 当前应用程序的媒体目录
- 配置的 asset_paths
- 其他骨架包的媒体目录
事件
可以创建事件,在应用程序执行过程中的特定关键点执行任务。
事件在 Event
上下文类中定义。这些类是可选的,但使用时,它们应位于应用程序的 event
目录中。文件名应采用 Context_name.php
的形式,例如 Application.php
。
类应扩展自 Skeleton\Core\Application\Event\{Context}
,并且类名应位于命名空间 \App\APP_NAME\Event\{Context}
中,其中 APP_NAME
是您应用程序的名称,Context
是可用的上下文之一
- 应用程序
- 错误
- 媒体
根据您运行的应用程序类型,可能还有其他事件可用。请阅读应用程序类型的 Readme 以获取更多信息。
名为 admin
的应用程序的 Module
事件类的示例
<?php
/**
* Module events for the "admin" application
*/
namespace App\Admin\Event;
class Module extends \Skeleton\Core\Application\Event\Module {
/**
* Access denied
*
* @access public
*/
public function access_denied() {
\Skeleton\Core\Web\Session::redirect('/reset');
}
}
下面描述了不同的上下文及其事件。
应用程序上下文
bootstrap
在加载应用程序之前调用 bootstrap 方法。事件应返回一个布尔值以指示骨架是否应继续运行应用程序。如果返回 false,则应用程序停止执行并触发 teardown() 事件。
public function bootstrap(): bool
teardown
在应用程序运行结束后调用 teardown 方法。
public function teardown(): void
detect
在每次请求时调用 detect 方法以确定应用程序是否应处理请求,或者根据请求的域名和请求的 URI,是否应跳过请求。
此事件应返回 true
以继续处理此应用程序。
public function detect($hostname, $request_uri): bool
错误上下文
此上下文仅在安装了 skeleton-error 时可用。
exception
在每次异常/错误发生时调用 exception 方法。方法应返回一个布尔值,指示 skeleton-error 是否应继续到其他错误处理器
public function exception(\Throwable $exception): bool
sentry_before_send
可以使用 sentry_before_send 方法使用应用程序特定的数据(例如已登录的用户)丰富将发送到 Sentry 的数据。
public function sentry_before_send(\Sentry\Event $event)
媒体上下文
not_found
当请求找不到媒体文件时,将调用 not_found
方法。
public function not_found(): void