手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP Framework

Yii : using multiple radio button

Yii在使用CHtmlRadio的时候,如果参数不正确,会隐藏一个form,导致如果radio的值有3个时,永远只能提交第一个和最后一个
太纠结了。仔细看看,确实 是有一个隐藏FORM,导致本来应该是3个radio的button,变成了6个。

找了一下资料,看了一下源码,果然。。。。有一个hidden。

PHP代码
  1. /** 
  2.  * Generates a radio button for a model attribute. 
  3.  * If the attribute has input error, the input field's CSS class will 
  4.  * be appended with {@link errorCss}. 
  5.  * @param CModel $model the data model 
  6.  * @param string $attribute the attribute 
  7.  * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special 
  8.  * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) 
  9.  * A special option named 'uncheckValue' is available that can be used to specify 
  10.  * the value returned when the radio button is not checked. By default, this value is '0'. 
  11.  * Internally, a hidden field is rendered so that when the radio button is not checked, 
  12.  * we can still obtain the posted uncheck value. 
  13.  * If 'uncheckValue' is set as NULL, the hidden field will not be rendered. 
  14.  * @return string the generated radio button 
  15.  * @see clientChange 
  16.  * @see activeInputField 
  17.  */  
  18. public static function activeRadioButton($model,$attribute,$htmlOptions=array())  
  19. {  
  20.     self::resolveNameID($model,$attribute,$htmlOptions);  
  21.     if(!isset($htmlOptions['value'])) 
  22.         $htmlOptions['value']=1; 
  23.     if(!isset($htmlOptions['checked']) && self::resolveValue($model,$attribute)==$htmlOptions['value']) 
  24.         $htmlOptions['checked']='checked'; 
  25.     self::clientChange('click',$htmlOptions); 
  26.  
  27.     if(array_key_exists('uncheckValue',$htmlOptions)) 
  28.     { 
  29.         $uncheck=$htmlOptions['uncheckValue']; 
  30.         unset($htmlOptions['uncheckValue']); 
  31.     } 
  32.     else 
  33.         $uncheck='0'; 
  34.  
  35.     $hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false); 
  36.     $hidden=$uncheck!==null ? self::hiddenField($htmlOptions['name'],$uncheck,$hiddenOptions) : ''; 
  37.  
  38.     // add a hidden field so that if the radio button is not selected, it still submits a value 
  39.     return $hidden . self::activeInputField('radio',$model,$attribute,$htmlOptions);  
  40. }  


太纠结了。居然用unCheckValue设置一下才OK:

PHP代码
  1. echo CHtml::radioButton('btn', false, array(  
  2.     'value'=>'1',  
  3.     'name'=>'btnname',  
  4.     'uncheckValue'=>null  
  5. ));   
  6. CHtml::radioButton('btn', false, array(  
  7.     'value'=>'2',  
  8.     'name'=>'btnname',  
  9.     'uncheckValue'=>null  
  10. ));   
  11.    
  12. //如果是activeForm,就得这么用
  13. echo $form->radioButton($model'name'array(  
  14.     'value'=>1,  
  15.     'uncheckValue'=>null  
  16. ));  
  17. echo $form->radioButton($model'name'array(  
  18.     'value'=>2,  
  19.     'uncheckValue'=>null  
  20. ));  

果然纠结。。。NND

Tags: yii

ZendFramework

Zend 2.0的框架改动与1比实在是太大了,当然抛开Namespace不说,即使是应用和架构,都有了一部分调整。
Zend实在太庞大了。用来开发项目不一定是首选。以前都是当成类库来用的,毕竟他实现了几乎目前所需要用到的一切功能,甚至GData之类的接口都全了,你还能奢求什么?
要赶时髦?openID和oauth也有,要实用?连pdf库都有,发邮件、本地化、命令行,应有尽有,不是类库是什么?
不过2.0就不太一样。我随便看了一个DB类,和以前的操作都有点不太一样了。或许是一下子没有适应过来那种newZend_Db_TableGateway之类的调用方式吧
手册在这里:http://packages.zendframework.com/docs/latest/manual/en
下载在这里:http://packages.zendframework.com/

还有一个相对比较实用的wiki:http://framework.zend.com/wiki/display/ZFDEV2/Home
可以看看。2.0的架构和代码还是值得学习的。

Tags: zend, yii

yii 连接 mssql遇到的一些问题

1、yii在linux下面连接mssql时,connectString一般是dblib:xxxxx,而不是mssql,这是因为用freetds的原因
2、用gii生成mssql的数据表结构时,如果表的字段是类似"Post Time"(即,字段中间有空格),则直接会报错
3、当生成好Model时,使用xxx::model()->findAll()时,如果最初的表结构里有允许某个字段为空,即允许isnull的话,在数据库中,该字段无值时是NULL,findAll就会报错:

XML/HTML代码
  1. CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 4004 General SQL Server error: Check messages from the SQL Server [4004] (severity 16) [(null)]. The SQL statement executed was: SELECT TOP 1 * FROM [dbo].[DatabaseLog] [t]  

4、无论是mysql还是sqlserver,当在components中设置columnCase值的时候,都会报错,这是因为在 MysqlSchema中都是采用了大小写敏感的方式(如$column['IsIdenfy'])之类的,当大小写敏感后,如果在attributes 中设置了PDO的ATTR_CASE,都会报错

Tags: yii, mssql

yii:Apache and Nginx configurations

yii的urlmanager可以让项目在访问的时候隐藏index.php,也可以以更优雅的urlrewrite方式来显示,但这一切需要一些配置,在apache上的配置上就相对比较简单,直接参考wordpress的官方配置就完了,但其实很久以来,一直都没有人写过nginx下的配置。大家都是在根据wordpress配置来更改的,比如lnmp项目中,就是:

XML/HTML代码
  1. location / {  
  2. if (-f $request_filename/index.html){  
  3.                 rewrite (.*) $1/index.html break;  
  4.         }  
  5. if (-f $request_filename/index.php){  
  6.                 rewrite (.*) $1/index.php;  
  7.         }  
  8. if (!-f $request_filename){  
  9.                 rewrite (.*) /index.php;  
  10.         }  
  11. }  

不过,这两天在看官方guide的文档,原来这些问题,官方已经提供方案了:http://yii.neatcn.com/doc/guide/1.1/en/quickstart.apache-nginx-config#nginx

1. Apache

Yii is ready to work with a default Apache web server configuration. The .htaccess files in Yii framework and application folders restrict access to the restricted resources. To hide the bootstrap file (usually index.php) in your URLs you can add mod_rewrite instructons to the .htaccess file in your document root or to the virtual host configuration:

XML/HTML代码
  1. RewriteEngine on  
  2.   
  3. # if a directory or a file exists, use it directly  
  4. RewriteCond %{REQUEST_FILENAME} !-f  
  5. RewriteCond %{REQUEST_FILENAME} !-d  
  6. # otherwise forward it to index.php  
  7. RewriteRule . index.php 

2. Nginx

You can use Yii with Nginx and PHP with FPM SAPI. Here is a sample host configuration. It defines the bootstrap file and makes yii catch all requests to unexisting files, which allows us to have nice-looking URLs.

XML/HTML代码
  1. server {  
  2.     set $host_path "/www/mysite";  
  3.     access_log  /www/mysite/log/access.log  main;  
  4.   
  5.     server_name  mysite;  
  6.     root   $host_path/htdocs;  
  7.     set $yii_bootstrap "index.php";  
  8.   
  9.     charset utf-8;  
  10.   
  11.     location / {  
  12.         index  index.html $yii_bootstrap;  
  13.         try_files $uri $uri/ $yii_bootstrap?$args;  
  14.     }  
  15.   
  16.     location ~ ^/(protected|framework|themes/\w+/views) {  
  17.         deny  all;  
  18.     }  
  19.   
  20.     #avoid processing of calls to unexisting static files by yii  
  21.     location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {  
  22.         try_files $uri =404;  
  23.     }  
  24.   
  25.     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
  26.     #  
  27.     location ~ \.php {  
  28.         fastcgi_split_path_info  ^(.+\.php)(.*)$;  
  29.   
  30.         #let yii catch the calls to unexising PHP files  
  31.         set $fsn /$yii_bootstrap;  
  32.         if (-f $document_root$fastcgi_script_name){  
  33.             set $fsn $fastcgi_script_name;  
  34.         }  
  35.   
  36.         fastcgi_pass   127.0.0.1:9000;  
  37.         include fastcgi_params;  
  38.         fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;  
  39.   
  40.         #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI  
  41.         fastcgi_param  PATH_INFO        $fastcgi_path_info;  
  42.         fastcgi_param  PATH_TRANSLATED  $document_root$fsn;  
  43.     }  
  44.   
  45.     location ~ /\.ht {  
  46.         deny  all;  
  47.     }  
  48. }  

Using this configuration you can set cgi.fix_pathinfo=0 in php.ini to avoid many unnesessary system stat() calls.

Tags: yii, apache, nginx, wordpress, urlrewrite

Yii数据库迁移工具

其实早就想写这样的文章来介绍这个玩意,不过一来项目中没有用到这个东西,二来官方的文档也是英文的,自己也没有仔细看就没有介绍。
官方的文档其实写的很详细了,不过因为真没用到它,也就没有发言权。
不过这两天在闲逛 ,倒是看到了一些文章:

  1. 小试Yii框架下的数据迁移功能
  2. yiichina的中文版介绍 :http://www.yiichina.com/api/CDbMigration
  3. 官方的手册:http://www.yiiframework.com/doc/guide/1.1/en/database.migration

这些文章还是可以看看的,关键问题是这些配置改了之后,难道会自动更新model文件吗?哎。

Tags: yii, migrate