webiny / bootstrap
Webiny Bootstrap 组件
Requires
- php: ^7
- webiny/class-loader: ~1.6
- webiny/config: ~1.6
- webiny/http: ~1.6
- webiny/router: ~1.6
- webiny/std-lib: ~1.6
- webiny/template-engine: ~1.6
Requires (Dev)
- phpunit/phpunit: 4.1.*
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