Yaf学习之Bootstrap

YafBootstrap机制,提供了一个全局配置的入口,它:

  • 运行于Yaf_Application:run()之前,必须手动调用,如$app->bootstrap()->run();
  • 类名必须为Bootstrap,继承自Yaf_Bootstrap_Abstract
  • 类文件默认为APPLICATION_PATH下,文件名为Bootstrap.php。可以通过通过配置 application.bootstrap 指定文件位置和名称
  • Bootstrap类中,以_init开头的方法才会被Yaf调用,接受Yaf_Dispatcher实例作为参数

之前我们把增加路由协议的代码放在入口文件index.php中,现在就把它们单独移至Bootstrap中。

1. 配置Bootstrap类的路径

在 conf/application.ini中增加这一行:

application.bootstrap=APP_PATH "/application/bootstrap/Bootstrap.php"

表示我们把Bootstrap类放在application/bootstrap/Bootrap.php这个文件中。

2. 编写Bootstrap类

在application下新建一个bootstrap目录,然后新建Bootstrap.php文件,文件内容如下:

<?php

class Bootstrap extends Yaf_Bootstrap_Abstract
{
    public function _initOne()
    {
        echo __METHOD__, "<br/>";
    }

    public function _initRoute(Yaf_Dispatcher $dispatcher)
    {
        $router = $dispatcher->getRouter();
        $simpleRoute = new Yaf_Route_Simple('m', 'c', 'a');
        $router->addRoute('simple_route', $simpleRoute);

        $supervarRoute = new Yaf_Route_Supervar('r');
        $router->addRoute('supervar_route', $supervarRoute);

        $regexRoute = new Yaf_Route_Regex(
            '#product/([0-9]+)/([0-9]+)#',
            array(
                'module' => 'app',
                'controller' => 'goods',
                'action' => 'detail',
            ),
            array(
                1 => 'cid',
                2 => 'id'
            )
        );
        $router->addRoute('regex_route', $regexRoute);

        $rewriteRoute = new Yaf_Route_Rewrite(
            'user/:name/*',
            array(
                'controller' => 'user',
                'action' => 'index'
            )
        );
        $router->addRoute('rewrite_route', $rewriteRoute);
    }
}

在这里,_iniOne()方法,和_initRoute()方法预期会被Yaf依次执行。_initRoute()方法中的代码就是上一篇配置路由协议的代码,这里我们直接从方法参数中获取Yaf_Dispatcher实例。

3. 入口文件中调用bootstrap()

<?php

define('APP_PATH', realpath(dirname(__DIR__)));

$app = new Yaf_Application(APP_PATH . "/conf/application.ini");

try {
    $app->bootstrap()->run();
} catch (Exception $e) {
    echo $e->getMessage();
}

访问地址 yaf.cc/product/1/105,结果如下:

这里写图片描述

由上图可知,Bootstrap类中的代码被Yaf正确执行。

如果我们把配置文件中application.bootstrap这一行注释调:

;application.bootstrap=APP_PATH "/application/bootstrap/Bootstrap.php"

再次访问 yaf.cc/product/1/105:

这里写图片描述

可见,Bootstrap类的默认位置是 application/Bootstrap.php,由于这个文件不存在,报错。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值