关于Yaf框架的初步搭建

来源:互联网 发布:java加载配置文件 编辑:程序博客网 时间:2024/06/09 19:00

一年前由于工作原因,接触过一段时间鸟哥的yaf框架,关于yaf框架详细介绍请查看鸟哥的博客和yaf文档。后来就没在碰过了,昨天偶然看到一个关于yaf的视频,就顺手捡起来搭建一下环境。
下面就我的使用情况和遇到的问题做下记录。至于扩展安装什么的就不说了,只要安装能适合自己的php环境的就可以了。首先通过yaf源码的tools/cg/yaf_cg工具生成yaf推荐的标准目录结构。

  1. php yaf_cg [project_name] #这个我暂定为yaf
  2. 查看当前目录下output目录,生成了一个yaf目录,这就是一个完整的项目结构,可以复制部署到你熟悉的web服务下,详细的部署请查看yaf文档中相关章节

遇到的问题

一、smarty适配yaf

按照配置净smarty放置到application/library目录后,按照网上大多数推荐的方式放置Smarty_Adapter适配器后,细节可以参考这篇文章,由于smarty的目录结构和yaf的类库加载规则不同,总是会出现各种提示缺少类库,按照提示将所需类库import之后,输出简单的字符串变量可以运行,但是如果现在使用更多smarty功能,还是会提示缺少类库,于是再次导入。。。。。感觉一直这么干,不是办法呀,smarty可是有150多类库,也总不能挨个去尝试每个功能缺少那个类库吧,要疯掉的。。。。。
尝试了多个方法之后,终于放弃。。。。于是乎想起了迫不得已的方式,按照yaf的加载规则,改写smarty,组要是按照类名将文件放置于各文件夹里,并将文件改名,目录结构下改后如下:
这里写图片描述
稍微修改smarty部分源码,删除掉了Smarty.class.php中的一下内容:

/** * Try loading the Smarty_Internal_Data class * If we fail we must load Smarty's autoloader. * Otherwise we may have a global autoloader like Composer */if (!class_exists('Smarty_Autoloader', false)) {    if (!class_exists('Smarty_Internal_Data', true)) {        require_once dirname(__FILE__) . '/Autoloader.php';        Smarty_Autoloader::registerBC();    }}/** * Load always needed external class files */if (!class_exists('Smarty_Internal_Data', false)) {    require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';}require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_extension_handler.php';require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php';require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php';require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_resource_base.php';

类的加载将有yaf自动完成,修改的源码请查看这里。欢迎指正patch代码。

二、map路由配置

由于yaf采用传统的 模块/控制器/动作 模式,导致其路由只能有三层,但是个人比较喜欢多层那种。于是乎就找到map路由的配置,Bootstrap.php简单配置如下:

public function _initRoute(Yaf_Dispatcher $dispatcher) {        //在这里注册自己的路由协议,默认使用简单路由        $router = $dispatcher->getRouter();        $route = new Yaf_Route_Map(true, '?');        $router->addRoute('map', $route);    }

最终访问效果是:
这里写图片描述

三、参数获取问题

基于第二个问题的配置,发现通过 ?p=1 这种方式,无法获取到p的值,目前暂时还没找到解决方法,待找到了再补充。。。。也欢迎有办法的大神留言补充

0 0
原创粉丝点击