对YII很困惑的两点问题!

1.我分析过YII自动生成的页面元素的ID,是用yw加自增数字的方式命名。访问页面的时候ID中yw后面的数字会自动增加,但如果页面下面还有AJAX请求的数据也包含有由YII自动生成的页面元素的ID,YII就不是接着上面的自增,而是重新从1开始。因为AJAX请求是会使PHP从头开始执行,显然ID中yw后面的数字就是从1开始了。

如果让YII自动生成页面元素的ID,页面内又有用到AJAX的时候,就要注意ID可能会重复的问题。

所以我之前的 http://www.yiiframework.com/forum/index.php?/topic/7925-使用renderdynamic后内容被重复输出。/ 这个帖子就是这个问题。

对于YII生成ID的问题Qiang怎么看?

2.使用YII的过程中遇到有些问题,使程序开发遇到困难。但因为对YII的源代码不熟悉,分析原因有点困难,花了不少时间调试并看YII的源代码才找到问题所在。但我不能确定这算不算BUG(如上面提到的那个问题),因为YII扩展起来非常方便,我只需要把相关的类继承并重写就能解决。对于这些问题,我到底该怎么处理?是在论坛提出来,还是重写相关方法以绕过这个问题?困惑了很久。 <_<

  1. 这种情况下你应该显式指定widget的id属性。

  2. 具体是什么问题呢?

:rolleyes: 第一点清楚了。

第二点,具体的问题是demo blog中,如果把首页设置成页面缓存,而把CMenu使用动态内容




$this->renderDynamic('widget','Menu',array(

			'items'=>array(

				array('label'=>'Home', 'url'=>array('post/index')),

				array('label'=>'About', 'url'=>array('site/page', 'view'=>'about')),

				array('label'=>'Contact', 'url'=>array('site/contact')),

				array('label'=>'Login', 'url'=>array('site/login'), 'visible'=>Yii::app()->user->isGuest),

				array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('site/logout'), 'visible'=>!Yii::app()->user->isGuest)

			),

		),true);



这样动态内容会无效。因为’visible’=>!Yii::app()->user->isGuest,这里的Yii::app()->user->isGuest登录值是1,它会被缓存,登录之后我查看缓存文件里面,它的值仍然是1。所以导致动态内容无效。

这种情况的确比较麻烦。比较简单的做法是在controller里写一个renderMenu的方法,动态生成CMenu。