读《Yii 1.1应用程序开发实例》 笔记 1
2015-06-19 13:49
651 查看
书地址:http://www.yiibook.com/book/yii1.1_application_development_cookbook
继承Ccomponent类可以省去
get 和 set的前缀
使用Yii::import导入类是相当的明智:
默认的,导入不是立即包含一个类。
没被使用的类不会被包含。
它不会再三的加载一个类,因此你可以放心的导入同一个类很多次。
我们来看看application.apis.lyrics.LyricsFinder:
路径别名
application是一个标准别名,指向你应用程序的protected文件夹,它被翻译成文件系统路径。下表显示了更多的标准的别名:
apis.lyrics 被转义成apis/lyrics 并且被附加到从小应用程序application中获取的路径;LyricsFinder是个我们想要导入的类名。
如果LyricsFinder需要一些额外的类处于目录中 ,我们可以使用Yii::import(‘application.apis.lyrics.*’)来导入整个目录。 注意* 并不包含子文件夹,因此如果你需要lyrics/includes, 你应该添加另外一条导入语句Yii::import(‘application.apis.lyrics.includes.*).
为了性能,当你使用一个单独的类时,使用明确的路径而不是*比较好。
Yii有一组集合组件类,主要为内部用途使用。虽然未在权威指南里描述,却对应用开发很有帮助:
Lists: CList, CTypedList
Maps: CMap, CAttributeCollection
Queue: CQueue
Stack: CStack
你可以使用Yii::app()->getRequest()访问你应用中的请求组件,我们来回顾下最有用的一些方法和它们的用途。 这些方法返回当前URL的不同部分。在下面的表格中,我们用粗体字样标记了返回的部分。
允许我们确保请求类型的方法是getIsPostRequest, getIsAjaxRequest, and getRequestType。
例如,我们可以使用getIsAjaxRequest来根据请求类型响应不同的内容:
在上面的代码中,如果请求是通过AJAX,我们就渲染了一个没有布局的视图。
尽管PHP为POST和GET都提供了超全局变量,但Yii的对应方法则允许我们省略一些额外的检查:
getCookies方法。它返回一个CCookieCollection类实例,这个实例允许我们处理cookies。因为CCookieCollection继承自CMap,所以我们可以使用一些原始的PHP方法:
继承Ccomponent类可以省去
get 和 set的前缀
// 继承Ccomponent类是必需的 class MyClass extends CComponent { private $property; public function getProperty() { return $this->property; } public function setProperty($value) { $this->property = $value; } } $object = new MyClass(); $object->property = 'value'; // 和 $object->setProperty('value'); 一样 echo $object->property; // 和 $object->getProperty(); 一样</span>
使用Yii::import导入类是相当的明智:
默认的,导入不是立即包含一个类。
没被使用的类不会被包含。
它不会再三的加载一个类,因此你可以放心的导入同一个类很多次。
<span style="white-space:pre"> </span>// 导入一个类 Yii::import('application.apis.lyrics.LyricsFinder'); $finder = new LyricsFinder();
我们来看看application.apis.lyrics.LyricsFinder:
路径别名
application是一个标准别名,指向你应用程序的protected文件夹,它被翻译成文件系统路径。下表显示了更多的标准的别名:
Alias | Path |
---|---|
application | path_to_webroot/protected |
system | path_to_webroot/framework |
zii | path_to_webroot/framework/zii |
webroot | path_to_webroot |
ext | path_to_webroot/protected/extensions |
如果LyricsFinder需要一些额外的类处于目录中 ,我们可以使用Yii::import(‘application.apis.lyrics.*’)来导入整个目录。 注意* 并不包含子文件夹,因此如果你需要lyrics/includes, 你应该添加另外一条导入语句Yii::import(‘application.apis.lyrics.includes.*).
为了性能,当你使用一个单独的类时,使用明确的路径而不是*比较好。
使用Yii核心集合组件
Yii有一组集合组件类,主要为内部用途使用。虽然未在权威指南里描述,却对应用开发很有帮助:Lists: CList, CTypedList
Maps: CMap, CAttributeCollection
Queue: CQueue
Stack: CStack
你可以使用Yii::app()->getRequest()访问你应用中的请求组件,我们来回顾下最有用的一些方法和它们的用途。 这些方法返回当前URL的不同部分。在下面的表格中,我们用粗体字样标记了返回的部分。
getUrl | http://yiibook.local/test/index?var=val |
getHostInfo | http://yiibook.local/test/index?var=val |
getPathInfo | http://yiibook.local/test/index?var=val |
getRequestUri | http://yiibook.local/test/index?var=val |
getQueryString | http://yiibook.local/test/index?var=val |
例如,我们可以使用getIsAjaxRequest来根据请求类型响应不同的内容:
class TestController extends CController { public function actionIndex() { if(Yii::app()->request->isAjaxRequest)s $this->renderPartial('test'); else $this->render('test'); } }
在上面的代码中,如果请求是通过AJAX,我们就渲染了一个没有布局的视图。
尽管PHP为POST和GET都提供了超全局变量,但Yii的对应方法则允许我们省略一些额外的检查:
class TestController extends CController { public function actionIndex() { $request = Yii::app()->request; $param = $request->getParam('id', 1); // 等价于 $param = isset($_REQUEST['id']) ? $_REQUEST['id'] : 1; $param = $request->getQuery('id'); // 等价于 $param = isset($_GET['id']) ? $_GET['id'] : null; $param = $request->getPost('id', 1); // 等价于 $param = isset($_POST['id']) ? $_POST['id'] : 1; } }
getCookies方法。它返回一个CCookieCollection类实例,这个实例允许我们处理cookies。因为CCookieCollection继承自CMap,所以我们可以使用一些原始的PHP方法:
class TestController extends CController { public function actionIndex() { $request = Yii::app()->request; // 获取cookie $cookie = $request->cookies['test']; if($cookie) // 打印 cookie 值 echo $cookie->value; else { // 创建一个cookie实例 $cookie=new CHttpCookie('test','I am a cookie!'); $request->cookies['test'] = $cookie; } } }
如果你有很多cookie值要处理,并且想精简所提供的代码,你可以使用像这样的助手方法: class Cookie { public static function get($name) { $cookie=Yii::app()->request->cookies[$name]; if(!$cookie) return null; return $cookie->value; } public static function set($name, $value, $expiration=0) { $cookie=new CHttpCookie($name,$value); $cookie->expire = $expiration; Yii::app()->request->cookies[$name]=$cookie; } } 在你把这份代码放到protected/components/Cookie.php后,你将可以这样做: class TestController extends CController { public function actionIndex() { $cookie = Cookie::get('test'); if($cookie) echo $cookie; else Cookie::set('test','I am a cookie!!'); } }
相关文章推荐
- PHPStorm tips
- PHP隐藏控件作用
- php JSON数据格式化方法
- php yii 出现Undefined index: Cid
- php session 阻塞 过期不自动清除session文件
- JS学习笔记(三):HTML通过ajax请求获取并显示php中的内容
- 预定义变量 - PHP手册笔记
- 引用 - PHP手册笔记
- 异常处理 - PHP手册笔记
- 命名空间 - PHP手册笔记
- 类与对象 - PHP手册笔记
- 函数 - PHP手册笔记
- PHP学习之[第07讲]PHP5.4 文件操作函数 之 图片计数器的实例
- 流程控制 - PHP手册笔记
- PHP自动生成表单代码分享
- 运算符 - PHP手册笔记
- PHP实现中文圆形印章特效
- PHP学习之[第06讲]数组、多维数组和数组函数
- Cannot modify header information - headers already sent by (output started at D:\PHP\xampp\htdocs\
- PHP 常用的header头部定义汇总