zoukankan      html  css  js  c++  java
  • yaf函数方法及使用

    @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分析出的请求参数.

  • 相关阅读:
    《ACM国际大学生程序设计竞赛题解I》——6.8
    数据结构篇
    从SG函数浅谈解决博弈问题的通法
    动态规划的泛式解题思路
    bzoj1057: [ZJOI2007]棋盘制作
    bzoj3884: 上帝与集合的正确用法
    bzoj1564: [NOI2009]二叉查找树
    bzoj4347: [POI2016]Nim z utrudnieniem
    bzoj1131: [POI2008]Sta
    bzoj1566: [NOI2009]管道取珠
  • 原文地址:https://www.cnblogs.com/eyeSpace/p/3784461.html
Copyright © 2011-2022 走看看