tigron/skeleton-core

Skeleton的核心功能


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至少需要以下配置项才能正常工作

应用检测

该包将自动检测“应用”,这是项目的独立部分。以下应用类型可用

根据请求中的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);

将按照以下顺序搜索资产:

  1. 当前应用程序的媒体目录
  2. 配置的 asset_paths
  3. 其他骨架包的媒体目录

事件

可以创建事件,在应用程序执行过程中的特定关键点执行任务。

事件在 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