CakePHP form radio使用方法及radio丢失数据的解决办法

CakePHP有着一系列强大的Helper,比如:Html,Javascript, Form (Form是在1.2后才从Html Helper中分离出来的)。当然您也可以自己写Helper来简化CakePHP项目中对View层的操作。

其中Form(表单)Helper中有一个方法为“radio”,其使用方法如下 View层:

$form->radio($fieldName, $options = array(), $attributes = array());

$fieldName为字段名称,比如:News.title

$options Radio项数组,比如:array('1" => "Radio1")。这样生成的单选按钮名字为Radio1值为1的单选按钮。

$attributes Radio按钮的属性,比如:array('legend" => false):去除Legend边框;array('value" => 1):选中值为1的单选按钮;array('separator" => " '):单选按钮间用空格分隔…

用CakePHP form radio生成的单选按钮很容易造成Radio值丢失,也就是在Post数据的时候,明明选中了某个间选按钮了。可是传过来的数据却是空的。这种情况多发生在用$form->radio多次生成相同FieldName的单选按钮的情况下。

在做一个淘宝网手机的项目中就出现过这种情况。后台管理那里出现的,现在也不便展示,如果您希望看就看看前台吧:http://www.xgto.cn

相应的解决办法:

当使用$form->radio()生成的单选按钮,CakePHP默认会加入一个Hidden域形如:<input type="hidden" name="data[News][title]" id="NewsTitle_" value="" />

解决办法相对简单,去除第二次,第三次…使用Radio时生成的Hidden域即可。避免生成Hidden域CakePHP并没有提供开关控制(具有研究所知)。

简单的字符串操作去除即可。str_replace或是其它的…

版块:Cake文档 Tags: , 时间:2009-10-08 评论:(0)

CakePHP去除Controller和Action完美优化Url地址

近来好像写有关CakePHP的文章比较多一些。搞的多了,难免会虚伪一下。这次刚写了一个小网站,顺便把新研究出来的有关CakePHP的知识共享一下。

这次程序方面没做太多的研究,主要考虑了一下网站优化,更确切的说是有关CakePHP Url地址的优化。

参考网站:中药材百科 - http://www.yaocai123.com

设置Url的文件为:app\config\routes.php

首页就不多说了,没有更改routes.php文件。

由栏目层说起:

中药材大全http://www.yaocai123.com/zhongyao/

中药种植http://www.yaocai123.com/zhongzhi/

中药处方http://www.yaocai123.com/chufang/

这三个地址,如果是用常规的CakePHP来写的话为三个Controller。分别为:zhongyao, zhongzhi, chufang。而现在这个项目只用到了一个Controller - MedicineController。在Routes.php中只需要要Controller和Action的名字隐藏掉,而貌似Controller的zhongyao只是MedicineController Index动作的参数而已。 查看详细内容…

版块:Cake文档 Tags: , , , 时间:2009-09-29 评论:(0)

CakePHP Cache缓存的使用方法

注:测试的CakePHP版本为当前最新的稳定版本-CakePHP 1.2.5。

本来想将网站的首页Cache一下。结果按照CakePHP官方文档测试了半天也没能成功。研究代码也一无所获。所以就放弃了。将几个对MySQL数据库操作大的Element缓存了一下。

CakePHP Element Cache缓存使用方法(View层代码,Element层也可以使用):

$this->element('ElementName', array('cache" => "+1 Hours'));

将ElementName缓存1小时。缓存文件会以文本的方式存入App\tmp\cache\views\中。

版块:Cake文档 时间:2009-09-26 评论:(0)

CakePHP findAll获取随机数据记录

为了使搜索引擎每天都认为我的网站更新了一次。特意为网站首页加了一个缓存,缓存时间为一天。提取一条新闻,并摘取300个左右的字显示在主页某一块中。我管它叫做(随机消息)

用Sql语句可以直接写如下语句来获取随机记录:

SELECT * FROM table_name ORDER BY rand() LIMIT 5;

CakePHP获取随机记录要变通一下,研究了一下CakePHP生成SQL语句才搞明白。原来只需要这样:

$this->{ModelName}->findAll(
null,
array('ModelName.id', "rand() as oo") ,
array('oo'),
5
);

如此而已…

版块:Cake文档 Tags: , , 时间:2009-09-24 评论:(0)

CakePHP SQLite数据库使用方法及PHP SQLite配置方法

很荣幸做了晨阳集团的网站,用到的cakephp+sqlite。说起sqlite我还真的不是很懂,不过cakephp很强大,不用我去写数据驱动即可以完美的使用它。Show一下吧:http://www.chenyang.com。

类似的项目还有很多,比如:优酷网在线看电视剧 - http://www.9966.info,也是用的CakePHP程序,不过数据库为MySQL。

简要的说一下晨阳集团吧:晨阳集团是国内数一数二的水性漆生产企业,曾经参与过2008年奥运工程。年交税过亿的私人企业。

好了,切入正题:主要记录一下PHP环境中如何开启(配置)SQLite数据库支持查看详细内容…

版块:Cake文档 Tags: , 时间:2009-09-12 评论:(0)

Godaddy主机空间CakePHP .htaccess编写方法

CakePHP的框架默认的.htaccess不能完美支持Godaddy主机空间。也不是Godaddy空间的Htaccess有问题,而是我们没有写好.htaccess。您可以参考如下代码来配置您的CakePHP项目查看详细内容…

版块:Cake文档 Tags: , , 时间:2009-04-13 评论:(0)

CAKEPHP .htaccess不重写某子目录或文件

CakePHP框架会把urls重写对自己的友好的urls,适合MVC项目的实施。假如有某一目录不需要CakePHP重写,假如没有重新定义.htaccess将无法访问此目录。假如配置环境为php fastCGI可能会出现:No input file specified.错误。

这时可以自己为.htaccess加一段代码,告诉服务器不转发此子目录即可,这时需要注意的是,此子目录的名称不能为CakePHP Controller的名称(name值)。

修改网站主目录中.htaccess如下(本人使用的CakePHP版本为,最新的CakePHP稳定版:1.2.2.8120 Stable):

CakePHP不重写某目录.htaccess
  1. # 不重写subdirectory目录
  2. <IfModule mod_rewrite.c>   
  3.     RewriteEngine On   
  4.     RewriteBase /   
  5.     RewriteCond %{REQUEST_URI} ^/subdirectory/(.*)$   
  6.     RewriteRule ^.*$ - [L]   
  7. </IfModule>   
  8.   
  9. <IfModule mod_rewrite.c>   
  10.     RewriteEngine on   
  11.     RewriteBase /   
  12.     RewriteRule    ^$ app/webroot/    [L]   
  13.     RewriteRule    (.*) app/webroot/$1 [L]   
  14. </IfModule>  

很多站长会将自己的网站加上一个Google网站管理员工具,假如用CakePHP开发的项目,也需要对主目录的.htaccess加以修改。代码如下: 查看详细内容…

版块:Cake文档 Tags: , 时间:2009-04-13 评论:(1)

CakePHP requestAction使用方法

CakePHP中View层有一个方法为:$this->requestAction(url)。望文生意,此方法可以解释为:请求Action。使用此方法可以大大的减少项目中的冗余代码。

比如我们有一个商品管理的Controller为StoreController,一个文章管理的Controller为PostController。以前当文章中需要调用最新的商品时我们可能会这样写:

PostController 代码如下
  1. class PostController extends AppController {   
  2.     var $name = "Post";   
  3.     var $uses = array("Post""Store");   
  4.     var $layout = '';   
  5.   
  6.     var $paginate = array(   
  7.         "limit"  => 10,   
  8.         "order" => array("Post.created DESC"),   
  9.     );   
  10.   
  11.     function index() {   
  12.         $this->set("posts"$this->paginate());   
  13.   
  14.         // 调用最新的商品   
  15.         $this->set("newStores",   
  16.             $this->Store->findAll(   
  17.                 array("Store.display" => 1),   
  18.                 null,   
  19.                 array("Store.created DESC"),   
  20.                 10   
  21.             )   
  22.         );   
  23.     }   
  24. }  

这样项目中的冗余代码会变的很多,不利于管理。合理的利用requestAction是最明智的选择

使用requestAction后$uses可以不用加载Model: Store,认真看一下代码就明白了。 查看详细内容…

版块:Cake文档 Tags: , 时间:2009-04-01 评论:(0)

CakePHP1.2.*稳定版终于发布了

继CakePHP 1.2.0.7692稳定版发布后没几天CakePHP 1.2.1.8004稳定版也发布了。这发布的间格比较短,不知是否前个稳定版本出现比较严重的BUG。由于金融危机的影响,近来公司没进几个单子,1.2.0.7692版本也没有体验一下。

昨天粗略的看了一下1.2.1.8004稳定版,感觉CakePHP真的越来越强大了。

就我的了解,1.2.*稳定版相对于1.1.*稳定版增加的功能或是改动大致如下:

1. Form的管理从Html Helper中分离到Form Helper,也就是说你不能再用$html->input了;
2. I18n,I10n的多语言组件的加入;
3. 增加Auth权限验证组件,从此Caker们可以脱离OthAuth,ObAuth组件了;
4. 增加Paginator,这个没有试用,看了下手册介绍,感觉功能大大的;
5. Rss,Email,Xml的加入;
6. 载入自己的DB PDO
7. 增加memcache,Xcache,使我的能够很方便的实现负载均衡
8. 由于只是初体验,大概就体验到这些,8 9 10 … 以后再补充。

总之,我看好CakePHP,它是一个真正的PHP快速开发框架之一。

版块:Cake文档 Tags: 时间:2009-01-19 评论:(0)

Zend Framework VS CakePHP Framework

众所周知:Zend Framework与CakePHP Framework是两个现在非常流行的PHP框架之一,有着其各自的优点与用途。关于Zend Framework与CakePHP Framework的比较一位国处人士在他的博客中写道(原文地址-en):

Zend Framework是由Zend Technologies基于PHP5开发的一个的面向网络应用的开源框架。它的目的即是让开发变得简单。同样,CakePHP也是一个面向网络应用的开源框架,但它不仅仅能运行于PHP5环境,PHP4中它照样完美,它是由Cake Software Foundation公司在Ruby on Rails思想下开发的。

您可以用Zend Frameword迅速的创建一个可靠的测试程序。它能够使用现在非常有名的APIs,例如:Google, Amazon, Yahoo!, Flickr… 查看详细内容…

版块:Cake文档 Tags: , 时间:2008-12-12 评论:(0)