webiny/bootstrap

Webiny Bootstrap 组件

v1.6.1 2017-09-29 08:12 UTC

README

Bootstrap 是您Web应用程序运行的第一个代码片段。它加载所有系统组件,然后运行您的应用程序。该组件使用MVC应用程序架构。注意 Webiny 框架不是一个MVC框架,而是一组模块化的组件,您可以使用它们在各种不同的应用程序架构中,例如 HMVC 和其他架构。

然而,我们决定创建这个组件,以便帮助那些主要熟悉MVC的其他开发者在其项目中使用Webiny 框架。

安装组件

安装组件的最佳方式是使用Composer。

composer require webiny/bootstrap

要获取包的附加版本,请访问Packagist 页面

需求

该组件要求您遵循特定的文件-文件夹结构。

骨架应用程序可以在Bootstrap 骨架应用程序中找到。

更高级的演示应用程序可以在Bootstrap Todo 演示应用程序中找到。

应用程序命名空间

一旦您设置了结构,您需要在 Config/App.yaml 文件中设置您希望的应用程序命名空间。

Application:
    Namespace: MySuperApp

命名空间定义了模块的类根命名空间。

模块

每个模块都放置在骨架应用程序的 Modules 文件夹中。模块名称应使用驼峰式编写,例如 "MySuperAwesomeModule"。

Modules/
    |- MySuperAwesomeModule/
        |- Controllers/
        |- Views/

控制器

位于您的模块文件夹内的 Controllers 文件夹中保存了您的控制器类。控制器名称也必须使用驼峰式编写。每个控制器类都必须使用 use 语句使用 Webiny\Component\Bootstrap\ApplicationTraits\AppTrait 特性。

<?php

namespace MySuperApp\Modules\MySuperAwesomeModule\Controllers;

class Homepage
{
    use Webiny\Component\Bootstrap\ApplicationTraits\AppTrait;

    public function doSomethingAction()
    {
        // your code goes here
    }
}

AppTrait

AppTrait 允许您访问 app 方法,然后提供对各种辅助方法的访问。

class Homepage
{
    use Webiny\Component\Bootstrap\ApplicationTraits\AppTrait;

    public function doSomethingAction()
    {
        // get absolute path
        $this->app()->getAbsolutePath();
        
        // get web path
        $this->app()->getWebPath();
    
        // assign data to the view
        $viewData = [
            'title' => 'This is a title'
        ];
        $this->app()->view()->assign($viewData);
    }
}

还有一些视图辅助方法

class Homepage
{
    use Webiny\Component\Bootstrap\ApplicationTraits\AppTrait;

    public function doSomethingAction()
    {
        $this->app()->view()
             ->setTitle('Webiny Todo App')
             ->setMeta('description', 'Webiny demo Todo application')
             ->appendStyleSheet('//maxcdn.bootstrap.ac.cn/bootstrap/3.3.1/css/bootstrap.min.css')
             ->appendScript('//code.jqueryjs.cn/jquery-2.1.1.min.js')
             ->appendScript('//maxcdn.bootstrap.ac.cn/bootstrap/3.3.1/js/bootstrap.min.js');
    }
}

这些setter方法也有对应的getter方法,用于输出结果

class Homepage
{
    use Webiny\Component\Bootstrap\ApplicationTraits\AppTrait;

    public function doSomethingAction()
    {
        // outputs 'Webiny Todo App'
        $this->app()->view()->getTitle();
        
        // outputs '<title>Webiny Todo App</title>' 
        $this->app()->view()->getTitleHtml();
        
        // outputs an array of scripts
        $this->app()->view()->getScripts();
        
        // outputs a list of scripts as a HTML tags
        $this->app()->view()->getScriptsHtml();
        
        //...and few other, checkout the View.php class inside the ApplicationClasses folder
    }
}

控制器操作

每个控制器都公开某些可以通过URL访问的公共方法。这些方法的名称必须以 Action 关键字结尾。例如 doSomethingAction

视图

每个控制器都有自己的视图文件夹,其中包含控制器操作的视图模板。视图文件夹的名称必须与控制器类名称匹配。

Modules/
    |- MySuperAwesomeModule/
        |- Controllers/
            |- Homepage.php
            |- ProductSearch.php
        |- Views/
            |- Homepage/
                |- DoSomething.tpl

视图模板名称的要求是

  • 使用驼峰式编写
  • 必须匹配控制器的操作名称
  • 不应在末尾包含 Action
  • 例如 Homepage/DoSomething.tpl 匹配 Homepage 控制器上的 doSomethingAction 方法。

默认情况下,Bootstrap 组件使用 TemplateEngine 组件,该组件使用 Smarty 模板引擎。

环境和配置文件

Config 文件夹中,您有 Production 文件夹,它必须始终存在。这是组件读取配置文件的位置。然而,您可以拥有与生产文件夹一起使用的附加文件夹,这些文件夹包含特定环境的配置。生产配置文件始终被加载,而附加环境特定的配置文件仅覆盖生产配置变量。

要创建环境,您首先需要在 Config/App.yaml 配置文件中定义它。

Application:
    Namespace: MySuperAwesomeModule
    Environments:
        Production:
            ErrorReporting: off
        Development:
            Domain: http://www.myapp.local/
            ErrorReporting: on
            SomeCustomVar: varValue

参数 Domain 用于定义何时加载特定环境。环境名称定义了存放配置文件的文件夹。您可以拥有任意数量的环境。

如果上面示例中的 Domain 与当前主机名匹配,组件将首先加载 Production 文件夹中的所有配置文件,然后加载 Development 文件夹中的所有文件,最后将这两个配置合并为一个。

Config/
    |- Production/
        |- Router.yaml
        |- Mongo.yaml
    |- Development/
        |- Mongo.yaml 

系统配置

Webiny 框架中的几乎所有组件都使用配置文件。该文件定义了组件的初始数据以及组件应该如何构建。

Bootstrap 组件自动处理此初始化过程。如果您创建一个与 Webiny 框架组件名称匹配的配置文件,组件将在应用启动时初始化,并且可以立即在您的应用程序代码中使用。

请查看 Bootstrap Todo 示例应用中的 Config 文件夹

路由

默认情况下,组件使用标准 MVC 路由。例如,以下请求:www.myapp.com/HelloWorld/Foo/sayHi/ 将匹配以下内容:

  • HelloWorld:模块名称
  • Foo:控制器名称
  • sayHiAction:方法名称

上面的 URL 也可以用小写和连字符书写:www.myapp.com/hello-world/foo/say-hi/。这将匹配相同的模块-控制器-操作。

自定义路由

要定义自定义路由,只需在您的环境中创建一个 Router.yaml 配置文件。该文件应遵循 路由组件 的设置。Bootstrap 组件将自动拾取所有定义的路由并进行匹配。如果自定义路由不匹配,Bootstrap 将回退到默认 MVC 路由器。

以下是一个自定义路由的定义示例。

Router:
    Routes:
        StartPage:
            Path: /
            Callback:
                Class: Demo\Modules\StaticPages\Controllers\Homepage
                Method: displayHomepage

传递参数

如果操作方法接受一个或多个参数,您可以将它们放在 URL 路径中。

例如,假设您有以下操作方法

public function sayHiAction($name, $location='Planet Earth')
{
    echo 'Hi '.$name.', from '.$location;    
}

您可以将参数传递如下:www.myapp.com/hello-world/foo/say-hi/Jack/,这将输出:

Hi Jack, from Planet Earth

或者这样:www.myapp.com/hello-world/foo/say-hi/Jack/Hawaii,这将输出:

Hi Jack, from Hawaii

资源

要运行单元测试,您需要使用以下命令:

$ cd path/to/Webiny/Component/Bootstrap/
$ composer.phar install
$ phpunit