1

我在我的 MacBook Pro 上开发了一些网站。使用 Cakephp 2.3.8。它工作得很好。但是,我将代码上传到 linux 服务器(在 hostmonster.com 上)。它有一些错误。

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 上的“cake bake”生成的。而且我无法在服务器上运行“蛋糕烘烤”。

4

2 回答 2

0

好像是笔误

不使用

class nailcolor extends AppModel {

class Nailcolor extends AppModel {

所以,使用资本N

于 2013-07-19T04:41:25.030 回答
0

您的模型文件是错误的情况

书中

如果 CakePHP 在 /app/Model 中找不到对应的文件,它会动态地为你创建一个模型对象。这也意味着,如果您的模型文件没有正确命名(即成分.php 或成分.php),CakePHP 将使用 AppModel 的实例而不是您丢失的(从 CakePHP 的角度来看)模型文件。

它应该被命名Nailcolor.php- 从我猜它被称为的问题来看nailcolor.php,Mac OSX 是不区分大小写的(默认情况下),因此可以找到文件,而 linux(区分大小写)不能。书中有更多关于CakePHP 文件命名约定的内容。

您可以使用以下代码验证这是否是问题所在:

if (get_class($this->Nailcolor) === 'AppModel') {
    die("app/Model/Nailcolor.php file not found");
}

如何设置 php.ini 或 cakephp 设置

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

于 2013-07-19T08:29:13.820 回答