nowise/uup-site

基于 OOP 主题/模板的页面渲染,具有路由功能。

1.2.7 2019-10-15 02:35 UTC

README

此包是一个微框架,采用面向对象的方法在 PHP 中构建大规模网站和 Web 应用程序。考虑到小内存占用、易用性和快速执行。

控制器直接放置在 public 下,并从合适的基类派生以定义其行为(即公共网页或受保护的 JSON 服务),并负责加载它们的视图。分发器负责从请求路径到控制器的自然路由。

如果公共页面不包含类,则由分发器将其视为简单的视图处理,分发器在渲染之前将其包装在视图控制器中。

快速入门

对于那些急于尝试而无需进一步阅读的人

composer require nowise/uup-site
./vendor/bin/uup-site.sh --bootstrap
./vendor/bin/uup-site.sh --location /myapp --setup --auth --edit --locale --guide --examples

在您的 htdocs 下创建指向 public 的符号链接,并将您喜欢的浏览器指向 /myapp 应该能让您开始

Screenshot of getting started page

很简单,对吧?

特性

支持多主题,直接渲染页面内容或使用分发器(路由)脚本,并设计这些目标

  • 适用于 Web 接口、AJAX 或服务(例如 JSON 或 SOAP 中的 API)
  • 响应式设计,具有多个主题
  • 小内存占用(每个请求约 500kB)
  • 快速请求处理(每个请求小于 0.01 毫秒)
  • 支持国际化(I18N)和本地化(L10N)

网站配置

config/defaults.site 文件在包目录(vendor/nowise/uup-site)或网站目录(虚拟主机目录)中查找。默认情况下禁用了认证和编辑支持,在 config/defaults.site 中启用它们。

设置(网站)

推荐的解决方案是使用 uup-site.sh 使用 uup-site 设置实例。通过 composer 安装时位于 vendor/bin 下。安装虚拟主机时,请确保 public 是唯一暴露给外部世界的目录。

cd /usr/local/bin
wget https://nowise.se/oss/uup/site/files/uup-site.sh

要引导和初始化新的虚拟主机

mkdir -p /var/www/example.com && cd mkdir -p /var/www/example.com
uup-site.sh --bootstrap
uup-site.sh --setup

设置完成后,审查 public 和 config 目录的内容。决定是否使用页面路由(mod_rewrite)。通过将 public 目录定义为文档根(如果开发网站)来完成设置。

有关更多设置选项,包括引导、composer、存档或手动操作,请参阅 https://nowise.se/oss/uup/site/usage/setup/

主题

主题包含在主题目录中,包括公共内容和模板文件。在渲染阶段,在模板目录下查找匹配的主题和模板 (*.ui) 文件。

基础设施

菜单和发布信息可以通过在页面目录中具有自定义文件来定义,也可以通过在页面构造函数中重新定义菜单内容来程序化定义。

请参阅 example/context 了解基础设施示例。请参阅 example/multi 了解程序化定义菜单的示例。网站配置文件对菜单处理也有一定影响。

请参阅 example/context/menus 了解更高级的菜单,例如动态更新页面内容或定义相对于当前站点根的菜单。

控制器、分发和渲染

页面类可以直接渲染或使用路由。使用分发路由是推荐的方法,它还支持视图并提供漂亮的 URL。

渲染(直接)
// 
// Assume virtual host defines include path to root directory:
// 
require_once('vendor/autoload.php');

use UUP\Site\Page\Web\StandardPage;

class IndexPage extends StandardPage
{
    // Define the printContent() member function at least.
};

$page = new IndexPage();
$page->render();
渲染(分发)
// 
// The dispatcher.php (router) has already setup autoloading, no need
// to explicit call render() either.
// 
class IndexPage extends StandardPage
{
    // Define the printContent() member function at least.
};

源包中的示例目录包含更多示例。建议您的应用程序从提供的基类派生自己的控制器,以支持 JSON 或文件 API。

视图

虽然页面是完整的类,但视图只是包含主要部分内容的简单文件(HTML/PHP片段)。使用路由是渲染视图的推荐方法。

使用标准页面类来渲染视图可以使上下文(即菜单)可用于装饰。视图旨在用于网站,而页面则更针对网络应用(更多控制)。

认证

通过运行uup-site.sh启用认证。需要调整config/auth.inc文件以使用支持的认证器。

uup-site.sh --auth

您需要在config/defaults.site内部启用认证设置。一个控制器可以通过从安全基类派生来强制执行认证。也可以从公共控制器内部程序化地强制执行认证,例如基于请求的视图。

命名空间

默认的调度器设置不支持控制器中的命名空间。如果您想在它们中使用命名空间,请修改public/dispatch.php。

$router = new Router();
$router->setNamespace("\\");                        // Use global namespace
$router->handle();

如果您的控制器位于public/api/customer中,则在控制器中使用namespace API\Customer。如果您想在命名空间名称中使用应用程序前缀,例如MyApp\Controllers\API\Customer,则定义您的命名空间如下:

$router = new Router();
$router->setNamespace("\\MyApp\\Controllers\\");    // Harmonize with application namespace
$router->handle();

地区和翻译

使用uup-site.sh启用地区(gettext)支持

uup-site.sh --locale
(i) Edit settings in makefile, then run 'make new-locale' and 'make' in current directory.

这将创建一个地区目录并在当前目录中安装一个makefile。如果网站/应用程序很大,则建议使用多个文本域。

uup-site
  ├── htdocs/                       // Document root
  │     ├── dir1/
  │     ├── dir2/
 ...   ...
  ├── locale/                       // Support for locale (gettext)
  │     ├── dir1.pot
  │     ├── dir2.pot
 ...   ...

每个页面都可以在其构造函数中初始化自己的文本域。

class MyPage extends StandardPage
{

    public function __construct()
    {
        parent::__construct(_("My page"));
        $this->locale->setTextDomain("dir2");
    }
     
}

在线内容编辑器

通过运行uup-site.sh启用CMS。您需要在config/defaults.site内部安装JavaScript库并调整编辑设置。

uup-site.sh --edit

对于小型安装,可以使用数组定义允许的内容编辑器(在config/defaults.site内部完成)。为了支持例如LDAP,可以通过配置一个可调用的(类或函数)来实现。

// 
// Naive example support for LDAP using hypotetical object:
// 
'edit' => array(
    'user' => function($user) use($ldap) {
        return $ldap->exist(array('uid' => $user));
    },
)

企业(ISP)

如果您是ISP,可以使用uup-site为您的客户启动多个虚拟主机。有关详细信息,请参阅企业设置页面。

好处包括:

  • 每个虚拟主机大约使用200kB的磁盘空间。
  • 定义一个可以使用的主题中央库。
  • 更新单一点(只是uup-site的共享目录)

更多信息

有关更多信息,请访问项目页面