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分析出的請求參數.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM