@yaf函数方法使用规则

1.yaf中类的加载规则, 都是一样的: Yaf规定类名中必须包含路径信息, 也就是以下划线”_”分割的目录信息. Yaf将依照类名中的目录信息, 完成自动加载.例如:/admin_login  表示这样的路径:APP_PATH/admin/login.php.

2.yaf要加载类库文件,可以直接在php.ini里加入yaf.library=”类库文件所在的目录”;

@1.Yaf_Bootstrap_Abstract

1.bootstrap是yaf提供的一个全局配置的入口, 当bootstrap被调用的时刻, Yaf_Application就会默认的在APPLICATION_PATH下, 寻找Bootstrap.php, 而这个文件中, 必须定义一个Bootstrap类, 而这个类也必须继承自Yaf_Bootstrap_Abstract.

 2.bootstrap里定义的_init方法会自动被yaf调用;

1 <?php
2 class Bootstrap extends Yaf_Bootstrap_Abstract
3 {
4    public function _init()
5 {
6 echo 'love';   //调用时会自动显示
7 }
8 }

 @2.Yaf_Plugin_Abstract

yaf插件类,继承的类将通过Yaf_Dispatcher::registerPlugin()调用;

定义一个插件类
class LayoutPlugin extends Yaf_Plugin_Abstract
{
    private $_layoutDir;
    private $_layoutFile;
    private $_layoutVars = array();

    public function __construct($layoutFile, $layoutDir=null)
    {
        $this->_layoutFile = $layoutFile;
        $this->_layoutDir = ($layoutDir) ? $layoutDir : APP_PATH.'views/';
    }

    public function __set($name, $value)
    {
        $this->_layoutVars[$name] = $value;
        /**
         * 例子
         * $my = new LayoutPlugin(my.html);
         * $my->name='cj';
         * echo $my->name;  //if add __get() , will output cj
         */
    }

    public function dispatchLoopShutDown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)
    {
    }

    public function dispatchLoopStartup ( Yaf_Request_Abstract $request , Yaf_Response_Abstract $response )
    {
    }

    public function postDispatch (Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)
    {
        //获取已经设置响应的Body
        $body = $response->getBody();
        //清除已经设置响应的body
        $response->clearBody();

        $layout = new Yaf_View_Simple($this->_layoutDir);
        $layout->content = $body;
        $layout->assign('layout', $this->_layoutVars);
        //设置响应的body
        $response->setBody($layout->render($this->_layoutFile));
    }

    public function preDispatch ( Yaf_Request_Abstract $request , Yaf_Response_Abstract $response ){

    }

    public function preResponse ( Yaf_Request_Abstract $request , Yaf_Response_Abstract $response ){

    }

    public function routerShutdown ( Yaf_Request_Abstract $request , Yaf_Response_Abstract $response ){

    }

    public function routerStartup ( Yaf_Request_Abstract $request , Yaf_Response_Abstract $response ){

    }    
}
在bootstrap类中定义方法进行引用
public function _initLayout(Yaf_Dispatcher $dispatcher)
{
   $layout = new LayoutPlugin('index.html');
    $dispatcher::registerPlugin($layout);
}

 @3.Yaf_Controller_Abstract

Yaf_Controller_Abstract::getView()获取当前的视图引擎

Yaf_Controller_Abstract::display()此方法在Yaf_Dispatcher::disableView()关闭自动渲染之后显示渲染;

Yaf_Controller_Abstract::forward()此方法将当前的请求转交给另外的方法处理,但会执行完该方法的所有代码,如果需要立即跳转,用return结束执行;

Yaf_Controller_Abstract::getRequest()获取当前请求的实例,返回Yaf_Request_Abstract实例;

1 class IndexController extendes Yaf_Controller_Abstract
2 {
3     public function init()
4     {
5         $request = $this->getRequest();
6         $request->getParams();
7     }
8 }

@4.Yaf_Dispatcher

Yaf_Dispatcher::disableView()关闭自动渲染;在自己要输出一个视图时使用

Yaf_Dispatcher::getInstance()获取当前的Yaf_Dispatcher的实例

1 Yaf_Dispatcher::getInstance()->disableView();//关闭自动渲染,改为主动输出视图;

Yaf_Dispatcher::registerPlugin(Yaf_Plugin_Abstract $plugin)注册一个插件;

Yaf_Dispatcher::getApplication()获取当前的app实例;

@5.Yaf_Application

Yaf_Application::app()返回当前的app实例,Yaf_Dispatcher::getApplication()获取当前的app实例;

Yaf_Application::getConfig()获取当前Yaf_Config_Abstract的实例,也就是获得当前APP的配置;

 1 <?php
 2 $config = array(
 3    "application"=>array(
 4          "directory"=>realpath(dirname(__FILE__)).'/application';      
 5     ) ,  
 6 );
 7 
 8 $application =  new Yaf_Application($config);
 9 print_r($application->getConfig());
10 ?>

@6.Yaf_Request_Http

 Yaf_Request_Http::getPost返回post变量;

1 $data['name'] = Yaf_Request_Http::getPost('name');
2 
3 $data['name'] = $_POST['name'];
4 
5 两者效果一致,小项目用下面的,大项目用到封装,要考虑到安全性,用上面的方法;

 Yaf_Request_Http::getQuery返回get变量;

 1 $_request_http = new Yaf_Request_Http();
 2 $data['id'] = intval($_request_http::getQuery('id'));
 3 
 4 $data['id'] = intval($_GET['id']);
 5 
 6 两者效果一致,原因同上
 7 
 8 //get与post的区别:
 9 1.get从服务器上获取数据,post向服务器传送数据;
10 2.get执行效率高,post安全性高;
11 3.在进行数据查询时建议用get, 进行数据添加、修改、删除时建议用post;

@7.Yaf_Request_Abstract

Yaf_Request_Abstract::getParam($name, $defaultValue)获取当前请求中的路由参数, 路由参数不是指$_GET或者$_POST, 而是在路由过程中, 路由协议根据Request Uri分析出的请求参数.

1 class IndexController extends Yaf_Controller_Abstract
2 {
3     public function indexAction()
4     {
5         echo 'userid:'.$this->getRequest()->getParam('id',0);
6     }
7 }

Yaf_Request_Abstract_getParams获取当前请求中的所有路由参数, 路由参数不是指$_GET或者$_POST, 而是在路由过程中, 路由协议根据Request Uri分析出的请求参数.