我在MacBook Pro上开发了一些网站。使用Cakephp 2.3.8。它工作得很好。 但是,我将代码提升到linux服务器(在hostmonster.com上)。它有一些bug。
Mac的环境: osx 10.8.4 PHP 5.3.15与Suhosin-Patch(cli)
服务器环境: linux 2.6.32 PHP 5.3.26(cgi-fcgi)
并且代码是相同的。
1,错误:在非对象上调用成员函数find()
controller:
$kinds = $this->Nailcolor->Kind->find('list'); //it not work on server,but on my mac is ok.
model:
class nailcolor extends AppModel {
public $validate = array( ... )
public $belongsTo = array(
'Kind' => array(
'className' => 'Kind',
'foreignKey' => 'kind_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
}
2,
debug($this->Nailcolor->find('first', $options));
结果在mac
上array(
'Nailcolor' => array(
'id' => '1',
'kind_id' => '2',
'name' => 'aaaa',
'color' => 'aaaaa',
'naila' => 'aaaa',
'nailb' => 'aaaaa',
'nailc' => 'ccc',
'naild' => 'ccc',
'naile' => 'ccc',
'nailm' => 'aqaa',
'description' => '',
'created' => '2013-07-16 15:16:56',
'modified' => '2013-07-16 15:16:56'
),
'Kind' => array( /*if run on server,not had "kind". */
'id' => '2',
'name' => 'kkkk',
'description' => '',
'created' => '2013-07-16 15:15:44',
'modified' => '2013-07-16 15:15:44'
)
)
结果在服务器上:
array(
'Nailcolor' => array(
'id' => '3',
'kind_id' => '4',
'name' => 'aaaa',
'color' => '0203',
'naila' => 'aaa',
'nailb' => 'aaa',
'nailc' => 'aaaaa',
'naild' => 'aaaaaaa',
'naile' => 'aaaaaa',
'nailm' => 'aaaaaaaaa',
'description' => '',
'created' => '2013-07-18 02:51:29',
'modified' => '2013-07-18 02:51:29'
)
)
所以在服务器上的view.ctp上不起作用。
<?php echo $this->Html->link($nailcolor['Kind']['name'], array('controller' => 'kinds', 'action' => 'view', $nailcolor['Kind']['id'])); ?>
为什么????如何设置php.ini或cakephp设置????我想在我的Mac和服务器上获得相同的结果。
上方的代码是通过我的mac上的“蛋糕烘烤”生成的。 我不能在服务器上运行“蛋糕烘烤”。
答案 0 :(得分:0)
似乎,这是一个错字
不使用
class nailcolor extends AppModel {
但
class Nailcolor extends AppModel {
所以,请使用Capital N
答案 1 :(得分:0)
来自the book:
如果找不到/ app / Model中的相应文件,CakePHP将为您动态创建一个模型对象。这也意味着如果您的模型文件未正确命名(即ingredient.php或Ingredients.php),CakePHP将使用AppModel的实例而不是您缺少的(从CakePHP的角度来看)模型文件。
它应该被命名为Nailcolor.php
- 从我猜它被称为nailcolor.php
的问题,Mac OSX是一个不区分大小写(默认情况下),因此可以找到该文件,而linux(区分大小写)不能。书中有更多关于CakePHP's file naming conventions的信息。
您可以使用以下代码验证这是否存在问题:
if (get_class($this->Nailcolor) === 'AppModel') {
die("app/Model/Nailcolor.php file not found");
}
没有设置来修改此行为,因为它是从操作系统继承的(或者更准确地说是从存储文件的磁盘格式)。