system
(system)
March 14, 2009, 5:34am
1
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下都正常的(文件都在的)。不知道会是什么问题。
谢谢!~~
system
(system)
March 14, 2009, 11:30am
3
啊。你来了。正想问你这个问题。因为按照你对models的写法,文件都是首字母大写的,但是好像yii在读取的时候会自动按照小写来读取的。我以为这是yii的一个设置。
因为linux服务器区分大小写,现在把models里面的文件名首字母大写改成了小写,就能找到了。我都改下,试试看是不是都正常。不过我还是不清楚你将models文件命名为大写的原因(class名称是小写的)。autoload不是会读取models下所有的php文件么?
system
(system)
March 14, 2009, 11:38am
4
model中的class名称和文件名应该一样对吧?我好像在调用models的地方有些地方有大小写了。我在继续找找。
qiang
(Qiang Xue)
March 14, 2009, 11:42am
5
类的文件名必须和类名完全一样(包括大小写)。autoload并不是把所有models的文件都读进来,这样开销太大了。autoload一个目录的本质是把该目录加到php inlcude_path里。
system
(system)
March 14, 2009, 1:01pm
6
都改好了。。还有些文件没有读取权限,所以没法跑。呵呵。谢谢强~
不过非常奇怪的一个问题,之前一直好好的下订单的时候自动扣除分数,现在不扣除了。@@ 这是代码:
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));
}
qiang
(Qiang Xue)
March 14, 2009, 1:14pm
7
是因为$naming->save(false)返回值是false?你查下数据库,确定naming是否保存成功。
system
(system)
March 14, 2009, 1:49pm
9
public function actionDeduct()
{
$user=user::model()->findByAttributes(array('usernum'=>Yii::app()->user->getState('usernum')));
$user->userpts = $user->userpts-100;
$user->save();
}
直接这么跑一个action也不扣分了。。。
system
(system)
March 15, 2009, 6:12am
11
.。。。。我把save();改成save(false);就可以了。这是啥原因呢。@@
qiang
(Qiang Xue)
March 15, 2009, 11:43am
12
说明验证没有通过。你可以print_r($user->errors)看看是什么错误。
save(false)表示不用验证就来保存。
system
(system)
March 15, 2009, 12:52pm
13
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)呢?多些指教了。:)
system
(system)
March 15, 2009, 1:28pm
14
是不是应为用了if ($naming->validate('naming'))这个判断在前面,所以后面的save就不需要再次去判断表单提交的东西了,直接用save(false)就可以了。然后因为是直接的数据库操作,而不是通过表单进行的,所以也是需要save(false)来做这个数据库操作,而用save()的话就会因为要找相应的表单进行validation所以就不会对数据库进行操作。不知道这么理解对不对。