cakephp controller中设置viewVars时的陷阱
要从controller传递变量到view,需要使用set method。基本的用法是
$this->set('categories',$categories);
更顺手的写法是
多个变量时可以这样写
$this->set('categories',$categories);
$this->set('category',$category);
也可以这样写
更顺手的写法是
因为set会检查输入的参数来做不同的应对:
function set($one, $two = null) {
$data = array();
if (is_array($one)) {
if (is_array($two)) {
$data = array_combine($one, $two);
} else {
$data = $one;
}
} else {
$data = array($one => $two);
}
foreach ($data as $name => $value) {
if ($name === 'title') {
$this->pageTitle = $value;
} else {
if ($two === null && is_array($one)) {
$this->viewVars[Inflector::variable($name)] = $value;
} else {
$this->viewVars[$name] = $value;
}
}
}
}
我不用framework时也会在写一个类似的method来实现这种灵活的变量传递。但需要注意的是cakephp中有这个步骤
陷阱就在这里。当我们使用compact来给set传递一个array参数时,将被设置的变量名会被作一些额外的处理。
set(compact(‘category’))是完全没问题的,在view中可以得到$category。但如果set(compact(‘category_id’)),在view中得到的变量叫做$categoryId,而非$category_id。
如果我们要在view中得到的变量名为$category_id,就只能老老实实的写
$this->set('category_id',$category_id);
Related posts:
- CakePHP 实例教程: Categories Acts as Tree Tree是CakePHP 1.2的核心Behaviors之一,可以用来轻易的实现无限极分类,并呈现树状列表。 图片来源:Tree traversa,WIKIPEDIA 基础实例 建立数据表 CREATE TABLE `categories` (...
- Alpha’s Categories Widget for wordpress 近来用Wordpress做一个小站,需要象Joomla一样能按Section展示多组分类。下了一个Breukie’s Categories Widget插件达成了这一功能。但当我随后升级到Wordpress 2.8的时候,这个插件却不能完好的支持。看了一下源码,原来Wordpress 2.8变更了Widgets的实现方法。于是只好自己动手,写了这个增强的Categories Widget插件:Alpha’s Categories Widget。 利用Alpha’s Categories...
- Joomla JPromoter and JReviews Hack “JPromoter”:joomlaequipment.com/content/view/4/19/ 是一个Joomla的SEF entention,用于把形如 @/index.php?option=com_content&task=view&id=9&Itemid=75@ 这样的地址转换成 @/the-news/latest-news/curabitur-convallis-laoreet.html@ 。 就像wordpress旧时的一些版本一样,这种转换不支持中文。需要自己做一些修改。 h3. 安装JPromoter...
- cakephp 1.2 theme var $view = 'Theme';//themes directory var $theme = 'teline';//theme...
- cakephp 1.2 bake Ruby on rails的用户多数会在第一时间爱上它的命令行操作。cakephp也内建了一个简单的baker,可以用来执行新项目创建、配置数据库文件以及MVC的分别生成。 下载cakephp解压之后,可以在cake/console目录下找到cake.bat。建议把这个目录添加到系统PATH。 p(clipnote). windows下添加目录到系统path的操作:桌面,我的电脑,右键,属性,高级,环境变量,系统变量,PATH,编辑。 h3. 创建一个新的项目 cmd进入到你希望放置新项目的目录 cake...


27. 七, 2009 






No comments yet... Be the first to leave a reply!