本文共 1258 字,大约阅读时间需要 4 分钟。
作者:老王
最近,随着的发布,我又把这个框架捡起来复习了一下,下面记录两个知识点: 一:Form助手 在CakePHP里,Form助手可以说是所有助手里最重要的,也是最复杂的,其中,尤以input方法为甚,比如说文章属于一个目录,那么在录入文章的表单里我们可以这样生成一个目录的下拉菜单: $form->input('category_id'); 当然,仅仅这样还不够,还需要在控制器里提供数据才OK: $this->set('categories', $this->Article->Category->find('list')); 总体来说非常简单,甚至有点奇幻的感觉,这是因为CakePHP在这里做了点小动作,参考form.php文件: if (!isset($options['options']) && in_array($options['type'], $types)) { $view =& ClassRegistry::getObject('view'); $varName = Inflector::variable( Inflector::pluralize(preg_replace('/_id$/', '', $this->field())) ); $varOptions = $view->getVar($varName); if (is_array($varOptions)) { if ($options['type'] !== 'radio') { $options['type'] = 'select'; } $options['options'] = $varOptions; } } CakePHP会把表单元素名字中的_id部分去掉,并转换成复数形式,然后在当前视图变量里查找是否已经有了同名的变量,如果有,且未设置成radio单选标签,就把它当做select下拉菜单。 这里还有一个技巧,就是在渲染select的时候,如果原来的数据库表里有一个名为name或者title的字段,那么会自动被当做下拉菜单的显示部分。 详细介绍参考 二:saveAll方法 saveAll方法可以同时保存一对一,一对多的关系。比如说一个question有多个answer,那么在question的表单里,我们就可以这样设定: echo $form->input('Question.title'); echo $form->input('Answer.0.content'); echo $form->input('Answer.1.content'); echo $form->input('Answer.2.content'); echo $form->input('Answer.3.content'); 经过这样简单的设定后,在question控制器里就可以使用saveAll方法一次性保存所有的数据了: 详细介绍参考 这些知识总是记了忘,忘了记。还是古人说的好:学而时习之,不亦悦乎。转载地址:http://jfpzn.baihongyu.com/