Bootstrapyaf 整理札记

   
由于yaf只是一个web框架,只承担处理web请求之类的基本功能,分外简单,连db库都并未。于是试着把zend
2.2的db库,form库,validator库与yaf结合,写了一个demo。因为zend
2.2框架的命名空间跟yaf一样,所以用起来相当便利。

    下面是demo的文件架构,参照yaf手册建立的,是一个规范的架构:

Bootstrap 1Bootstrap 2

├── application
│   ├── Bootstrap.php
│   ├── controllers
│   │   ├── Album.php
│   │   ├── Application.php
│   │   ├── Blogs.php
│   │   ├── Device.php
│   │   ├── Error.php
│   │   ├── Index.php
│   │   └── Product.php
│   ├── library
│   │   ├── Album
│   │   │   ├── Filter
│   │   │   │   └── Album.php
│   │   │   └── Form
│   │   │       └── AlbumForm.php
│   │   ├── lYaf
│   │   │   └── Layout.php
│   │   └── Zend
│   │       ├── Db(下面的都是文件夹)
│   │       ├── Form
│   │       ├── InputFilter
│   │       ├── ServiceManager
│   │       ├── Stdlib
│   │       └── Validator
│    ── models
│   │   └── Device.php
│   ├── modules
│   │   └── Mod
│   │       ├── controllers
│   │       │   ├── Ctrl.php
│   │       │   └── Index.php
│   │       └── views
│   │           ├── ctrl
│   │           │   └── index.phtml
│   │           ├── index
│   │           │   └── index.phtml
│   │           └── index.phtml
│   └── views
│       ├── album
│       │   ├── add.phtml
│       │   └── index.phtml
│       ├── blogs
│       │   └── index.phtml
│       ├── device
│       │   ├── index.phtml
│       │   └── list.phtml
│       ├── error
│       │   └── error.phtml
│       ├── index
│       │   ├── form.phtml
│       │   ├── index.phtml
│       │   └── list.phtml
│       ├── layouts
│       │   └── frontend.phtml
│       ├── product
│       │   └── info.html
│       └── report
│           └── index.phtml
├── conf
│   ├── application.ini
├─  public
    ├── css
    ├── font
    ├── img
    ├── index.php
    └── js

View Code

    接下去看看布局文件

Bootstrap 3Bootstrap 4

[common]
application.directory = APP_PATH  "/application"
application.dispatcher.catchException = 1
application.dispatcher.throwException = 1
application.view.ext = 'phtml'
application.layout.directory=APP_PATH "/application" "/views" "/layouts"
;application.layoutpath = APP_PATH "/application/views"
application.document = "layout.phtml"

;app
application.baseUri = '' ;not used
application.dispatcher.defaultModule = index
application.dispatcher.defaultController = index
application.dispatcher.defaultAction = index
application.modules = Index,Mod
[product : common]


;database 数据库链接设置
database.params.driver   = "pdo_mysql"
database.params.database = "data"
database.params.username = "username"
database.params.password = "pwd"
database.params.hostname = "127.0.0.1"
database.params.port     = 3306
database.params.charset  = "UTF8"
database.params.driver_options.1002 = "SET NAMES utf8"

routes.user.type             = "regex"
routes.user.match            = "#^/$#"
routes.user.route.module     = Mod
routes.user.route.controller = Ctrl
routes.user.route.action     = index
routes.user.map.1            = name
routes.user.map.2            = value

View Code

   yaf不可缺乏的配置项:application.directory = APP_PATH
 “/application” 建议把

application.dispatcher.catchException = 1
application.dispatcher.throwException = 1

放在[product : common]外面,因为[product :
common]其间的是生产条件。注意这一句:

application.modules = Index,Mod

modules要小心顺序,而且名字要与modules下边的文书夹名字如出一辙,包括大小写。在数据库配置方面,有一个很要紧的装置项:

database.params.charset  = "UTF8"
database.params.driver_options.1002 = "SET NAMES utf8"

假若不设置database.params.driver_options.1002
= “SET NAMES utf8″,从数据库取出来的普通话会变成乱码。

布局文件与Bootstrap.php文件紧密结合,那么再来看Bootstrap.php文件

Bootstrap 5Bootstrap 6

<?php
use lYaf\Layout;
/**
 * 所有在Bootstrap类中, 以_init开头的方法, 都会被Yaf调用,
 * 这些方法, 都接受一个参数:Yaf_Dispatcher $dispatcher
 * 调用的次序, 和申明的次序相同
 */
class Bootstrap extends Yaf\Bootstrap_Abstract {

    private $_config;

    public function _initConfig() {
        $this->_config = Yaf\Application::app()->getConfig();
        Yaf\Registry::set("config", $this->_config);
    }

    public function _initDefaultName(Yaf\Dispatcher $dispatcher) {
        $dispatcher->setDefaultModule("Index")->setDefaultController("Index")->setDefaultAction("index");

    }

    /**
     * 设置页面layout
    */
    public function _initLayout(Yaf\Dispatcher $dispatcher){

        $layout = new Layout($this->_config->application->layout->directory);
        $dispatcher->setView($layout);
    }

    public function _initNamespaces(){
        //申明, 凡是以Zend,Local开头的类, 都是本地类
        Yaf\Loader::getInstance()->registerLocalNameSpace(array("Zend", "Local"));
    }

    public function _initRoute(Yaf\Dispatcher $dispatcher) {
        //在这里注册自己的路由协议,默认使用简单路由  通过派遣器获取默认的路由器
        $router = Yaf\Dispatcher::getInstance()->getRouter();//获取路由器
        $router->addConfig($this->_config->routes);//加载路由协议
    }
    /**
     * 连接数据库,设置数据库适配器
     */
    public function _initDefaultDbAdapter(){
        $dbAdapter = new Zend\Db\Adapter\Adapter(
            $this->_config->database->params->toArray()
        );

        Yaf\Registry::set("adapter", $dbAdapter);
    }

}

View Code

我早已在这一个文件中写了诠释,在此间就不一一解释了。因为自身敞开了命名空间,所以一切demo都充满着反斜杠,尽管看起来别扭,但利用起来很便宜。在这一个Bootstrap.php文件中,使用了一个老外写的Layout库,写得很系数。

从zend
2.2推介来的库都相比较简单,比1.2的版本小多了,很容易采纳。这一个引用来的模块和自定义的模块(其实引入来的也就是自定义的)都要基于安排,放在相应的目录下边。在写这些自定义模块类时,指出选择yaf的命名空间,提升功用的还要也使代码简洁了过多。

默认的module,它的controllers和views就是/application/controllers/和/application/views,而其他module,它们的controllers和views就在它们目录下边:/modules/Mod/controllers/,/modules/Mod/views/。

 

 

相关文章