Cakephp 2.3.8无法在linux服务器上运行,但在我的macbookpro上运行oK

时间:2013-07-19 02:50:26

标签: php cakephp

我在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上的“蛋糕烘烤”生成的。 我不能在服务器上运行“蛋糕烘烤”。

2 个答案:

答案 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");
}

如何设置php.ini或cakephp设置

没有设置来修改此行为,因为它是从操作系统继承的(或者更准确地说是从存储文件的磁盘格式)。

相关问题