1

MacBook Pro.use Cakephp 2.3.8 でいくつかの Web サイトを開発しています。それはとてもうまくいきます。しかし、コードを Linux サーバー (hostmonster.com) にアップしました。バグがありました。

Mac の環境: osx 10.8.4 PHP 5.3.15 with 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));

マックでの結果

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

モデル ファイルの大文字と小文字が間違っています

から:

/app/Model に対応するファイルが見つからない場合、CakePHP は動的にモデル オブジェクトを作成します。これは、モデル ファイルの名前が正しくない場合 (つまり、component.php または Ingredients.php)、CakePHP は (CakePHP の観点から) 欠落しているモデル ファイルではなく、AppModel のインスタンスを使用することも意味します。

名前を付ける必要があります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 に答える