Sherman Web Design

v0.2-alpha 2019-08-23 23:40 UTC

This package is auto-updated.

Last update: 2024-09-07 15:12:55 UTC


README

Sherman Web Design

安装

composer install 即将推出 不久

大概念

这是 shermanwebdesign.com 用于新项目的代码库。可能最终支持子包和模块,但现在以全部或无的状态发布。

核心概念是由做任何事、能够快速响应创意想法的愿望驱动的,无需将想法按摩成框架的“做事方式”。

HTTP_

为了支持这一点,SWD 对以下 http 请求元素进行了概念化。

请求

请求代表客户端浏览器发出的(真实或模拟)请求,响应是应用程序所有输出的容器。

虽然技术上可以在请求内编辑变量,但所有实现都必须避免这样做。可以为任何必要的目的创建(模拟)新请求。

响应

响应是应用程序所有输出的容器,必须用于所有输出,包括环境状态更改(Cookies、Session 数据、输出)。

快速开始

网站可以通过以下方式初始化:

$website = new \SWD\Website\Website(
    \SWD\Request\Request::create(),
    new \SWD\Response\Response()
);

一旦初始化,只需简单运行网站:

$website->run();

控制器

默认情况下,控制器初始化由以下处理:

SWD\DataController\DataControllerFactory

并且可以通过以下方式覆盖:

$website->setDataControllerFactory($yourFactoryClass);

$website->run(); 之前

默认 DataController 使用在 SWD\Request\UrlParser 中找到的 URL 解析。如果您不想覆盖 DataControllerFactory,只需调整 URL 解析,创建一个 \App\Factories\UrlParserFactory,该工厂具有一个返回实例化的 SWD\Request\UrlParser_interfacecreate() 方法。这将在任何调用 SWD\Request\UrlParserFactory::create(); 时自动加载,而不是默认的 UrlParser。

模块

模块可以是可调用的函数、可调用的类,或者是一个字符串类名,引用一个可调用的类。

加载模块

在调用 $website->run(); 之前,可以通过以下方法之一加载模块:

闭包

$website->addModule( $website::FOO_BAR_ETC, function($hookname, \SWD\Website\Website $website){
    //your code here
} );

实例化的类

$website->addModule( $website::FOO_BAR_ETC, $invokeableObject );

类名

$website->addModule( $website::FOO_BAR_ETC, My\Class\Name::class);

模块回调周期

字符串类名将使用 SWD\Request\Request_interfaceSWD\Response\Response_interface 参数构建。

$module = new $moduleClass( $request, $response);

可调用的(闭包、实例化的可调用类等)将使用一个字符串 $hookname 和实例化的 SWD\Website\Website 对象进行调用。

$module( $hookName, $website );

控制器与模块

虽然模块可以堆叠,但请求应该只有一个数据控制器(除非该控制器调用下属的控制器)。

虽然这意味着数据控制器在技术上不太强大,但 SWD 的预期是每个响应将有一个单一的数据值(类似对象的数组、单个对象),这个值由数据控制器发布。元对象旨在用于模块输出,理想情况下通过发布的键或模块的 dotClass 名称引用。

如果遵循这一预期,调试始终是模块化的,任何给定错误的调用栈都应该是最小化和可模拟的。