运行问题

Hi 强,

我把自己做好的一个测试项目放到linux服务器下去了。遇到了以下问题:

1.文件权限问题,因为没找到如何设置各个文件夹的文档。所以根据报错信息,最后将protected下的runtime改成了777,程序可以继续运行了。

2.解决1后,报错YiiBase::include(zyzs.php) [<a href='yiibase.include'>yiibase.include</a>]: failed to open stream: No such file or directory。zyzs应该是我的其中一个model的名称,这些在windows下都正常的(文件都在的)。不知道会是什么问题。

谢谢!~~

大小写有没有问题?

啊。你来了。正想问你这个问题。因为按照你对models的写法,文件都是首字母大写的,但是好像yii在读取的时候会自动按照小写来读取的。我以为这是yii的一个设置。

因为linux服务器区分大小写,现在把models里面的文件名首字母大写改成了小写,就能找到了。我都改下,试试看是不是都正常。不过我还是不清楚你将models文件命名为大写的原因(class名称是小写的)。autoload不是会读取models下所有的php文件么?

model中的class名称和文件名应该一样对吧?我好像在调用models的地方有些地方有大小写了。我在继续找找。

类的文件名必须和类名完全一样(包括大小写)。autoload并不是把所有models的文件都读进来,这样开销太大了。autoload一个目录的本质是把该目录加到php inlcude_path里。

;D都改好了。。还有些文件没有读取权限,所以没法跑。呵呵。谢谢强~

不过非常奇怪的一个问题,之前一直好好的下订单的时候自动扣除分数,现在不扣除了。@@ 这是代码:

 public function actionNaming() 


    {


       $naming = new naming;


          $user=user::model()->findByAttributes(array('usernum'=>Yii::app()->user->getState('usernum')));


       $userpts=$user->userpts;


      


        if(isset($_POST['naming']))


        {               


            $naming->setAttributes($_POST['naming'], 'naming');


            $naming->userpts=$userpts;


            if ($naming->validate('naming')) {                


                    if ($naming->save(false)){


                    $user->userpts = $user->userpts-100;


                    $user->save();


                    $this->redirect(array('showorder'));


                    }


            }


        }


       


       $this->render('naming',array('naming'=>$naming,'user'=>$user));   


        


    }  

是因为$naming->save(false)返回值是false?你查下数据库,确定naming是否保存成功。

数据库显示保存成功的。 ???

 public function actionDeduct() 


    {


       $user=user::model()->findByAttributes(array('usernum'=>Yii::app()->user->getState('usernum')));


                    $user->userpts = $user->userpts-100;


                    $user->save();               


                    


        


    } 

直接这么跑一个action也不扣分了。。。

是很奇怪。你修改一下其它值,看看能不能保存?

.。。。。我把save();改成save(false);就可以了。这是啥原因呢。@@

说明验证没有通过。你可以print_r($user->errors)看看是什么错误。

save(false)表示不用验证就来保存。

 public function actionNaming() 


    {


       $naming = new naming;


       $user=user::model()->findByAttributes(array('usernum'=>Yii::app()->user->getState('usernum')));


       $userpts=$user->userpts;


        if(isset($_POST['naming']))


        {               


            $naming->setAttributes($_POST['naming'], 'naming');


            $naming->userpts=$userpts;


            if ($naming->validate('naming')) {


                                                      


                    if ($naming->save(false)){ 


                    print_r($user->errors); 


                    break;


                    $user->userpts = $user->userpts-100;


                    $user->save();


                    


                    $this->redirect(array('showorder'));


                    }


            }


        }


       


       $this->render('naming',array('naming'=>$naming,'user'=>$user));   


        


    }  

这样的话,出来的是

Array ( ) 
就没了。

我看之前yii自带的一些列子是用save()来做存储的判断的,但是yiiskeleton这个例子里面则用了save(false),我不清楚他的用意以及应该在何种情况用save()何种情况用save(false)呢?多些指教了。:)

是不是应为用了if ($naming->validate('naming'))这个判断在前面,所以后面的save就不需要再次去判断表单提交的东西了,直接用save(false)就可以了。然后因为是直接的数据库操作,而不是通过表单进行的,所以也是需要save(false)来做这个数据库操作,而用save()的话就会因为要找相应的表单进行validation所以就不会对数据库进行操作。不知道这么理解对不对。

对!