Sherman Web Design
Requires
- curl/curl: ^1.8
- doctrine/orm: ^2.5
- erusev/parsedown: ^1.7
- ezyang/htmlpurifier: ^4.10
- gabrielbull/ups-api: ^0.8.0
- league/iso3166: ^2.1
- php-http/guzzle6-adapter: ^1.1
- phpmailer/phpmailer: ^6.0
- twig/twig: ^2.4
- vinceg/usps-php-api: ^1.0
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_interface
的 create()
方法。这将在任何调用 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_interface
和 SWD\Response\Response_interface
参数构建。
$module = new $moduleClass( $request, $response);
可调用的(闭包、实例化的可调用类等)将使用一个字符串 $hookname 和实例化的 SWD\Website\Website
对象进行调用。
$module( $hookName, $website );
控制器与模块
虽然模块可以堆叠,但请求应该只有一个数据控制器(除非该控制器调用下属的控制器)。
虽然这意味着数据控制器在技术上不太强大,但 SWD 的预期是每个响应将有一个单一的数据值(类似对象的数组、单个对象),这个值由数据控制器发布。元对象旨在用于模块输出,理想情况下通过发布的键或模块的 dotClass 名称引用。
如果遵循这一预期,调试始终是模块化的,任何给定错误的调用栈都应该是最小化和可模拟的。