博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记录两个CakePHP知识点
阅读量:3604 次
发布时间:2019-05-20

本文共 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/

你可能感兴趣的文章
java里VO是什么?
查看>>
AOP
查看>>
JDK和JRE的区别
查看>>
zookeper正式集群搭建(非伪集群)
查看>>
linux定时备份mysql(可用)
查看>>
linux使用链接下载文件
查看>>
maven配置阿里云仓库
查看>>
idea生成mybatis实体的方法
查看>>
idea逆向工程mybatis
查看>>
oracle纯url连接字符串
查看>>
oracle自动提交事务以及手动
查看>>
几分钟学会密码学(一)——维吉尼亚密码
查看>>
vulhub环境搭建+靶场使用
查看>>
Nginx 配置错误导致漏洞
查看>>
Webmin 远程命令执行漏洞
查看>>
Nginx越界读取缓存漏洞(CVE-2017-7529)
查看>>
DNS域传送漏洞——vulhub漏洞复现 007
查看>>
利用21端口的思路
查看>>
木马工作原理——病毒木马 002
查看>>
DHT11使用详解
查看>>