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文件,文件内容如下:



class Bootstrap extends Yaf_Bootstrap_Abstract
{
    public function _initOne()
    {
        echo __METHOD__, "
"
; } 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()



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,结果如下:

Yaf学习之Bootstrap_第1张图片

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

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

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

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

Yaf学习之Bootstrap_第2张图片

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

你可能感兴趣的:(yaf,bootstrap,PHP)