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或是其它的…
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动作的参数而已。 查看详细内容…
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\中。
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
);
如此而已…
CakePHP SQLite数据库使用方法及PHP SQLite配置方法
Godaddy主机空间CakePHP .htaccess编写方法
CakePHP的框架默认的.htaccess不能完美支持Godaddy主机空间。也不是Godaddy空间的Htaccess有问题,而是我们没有写好.htaccess。您可以参考如下代码来配置您的CakePHP项目。 查看详细内容…
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):
- # 不重写subdirectory目录
- <IfModule mod_rewrite.c>
- RewriteEngine On
- RewriteBase /
- RewriteCond %{REQUEST_URI} ^/subdirectory/(.*)$
- RewriteRule ^.*$ - [L]
- </IfModule>
- <IfModule mod_rewrite.c>
- RewriteEngine on
- RewriteBase /
- RewriteRule ^$ app/webroot/ [L]
- RewriteRule (.*) app/webroot/$1 [L]
- </IfModule>
很多站长会将自己的网站加上一个Google网站管理员工具,假如用CakePHP开发的项目,也需要对主目录的.htaccess加以修改。代码如下: 查看详细内容…
CakePHP requestAction使用方法
CakePHP中View层有一个方法为:$this->requestAction(url)。望文生意,此方法可以解释为:请求Action。使用此方法可以大大的减少项目中的冗余代码。
比如我们有一个商品管理的Controller为StoreController,一个文章管理的Controller为PostController。以前当文章中需要调用最新的商品时我们可能会这样写:
- class PostController extends AppController {
- var $name = "Post";
- var $uses = array("Post", "Store");
- var $layout = '';
- var $paginate = array(
- "limit" => 10,
- "order" => array("Post.created DESC"),
- );
- function index() {
- $this->set("posts", $this->paginate());
- // 调用最新的商品
- $this->set("newStores",
- $this->Store->findAll(
- array("Store.display" => 1),
- null,
- array("Store.created DESC"),
- 10
- )
- );
- }
- }
这样项目中的冗余代码会变的很多,不利于管理。合理的利用requestAction是最明智的选择。
使用requestAction后$uses可以不用加载Model: Store,认真看一下代码就明白了。 查看详细内容…
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快速开发框架之一。
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… 查看详细内容…
