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