1

CakePHP 1.3 アプリで問題が発生しています。コードの問題なのか DB の問題なのかわかりません。

コントローラーの 1 つに非常に単純な関数があり、そのコントローラーにクエリ部分を追加するたびに、次の (腹立たしくまったく役に立たない) エラー メッセージが表示されます。

Missing Controller
Error: InternalError.htmlController could not be found.

Error: Create the class InternalError.htmlController below in file: 
app/controllers/internal_error.html_controller.php

これがモデルForecastZonesです

class ForecastZone extends AppModel {
    var $name = 'ForecastZone';
    var $displayField = 'name';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

    var $belongsTo = array(
        'State' => array(
            'className' => 'State',
            'foreignKey' => 'state_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

    var $hasMany = array(
        'ForecastZonePoly' => array(
            'className' => 'ForecastZonePoly',
            'foreignKey' => 'forecast_zone_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

}

以下は、不可解に失敗するコントローラー関数です。

    function poly($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid forecast zone', true));
        $this->redirect(array('action' => 'index'));
    }
    $this->layout = false;

    $result = $this->ForecastZone->query("SELECT coords FROM forecast_zone_polies WHERE forecast_zone_id = $id;");
    $this->set('forecastZone', $result);
}

このコントローラーアクションを呼び出すたびに、CakePHP epic が失敗します。それは長い間ハングします...そして、「データベースクエリが長すぎました」や「モデルの関連付けが壊れています」などの便利なことを言う代わりに...あきらめて、この完全なBSエラーメッセージが表示されます.

これはパスの問題ではなく、パスは正しいです。$result 変数を削除すると、すべて正常に動作し、適切な「forecastZone が設定されていません」というエラー メッセージが表示されます。この問題の核心は、永遠にかかるクエリと、Cake がエラー メッセージを適切に報告しないことです。

これを解決するのを手伝ってください。非常にイライラします...一言で言えば「ケーキ」ではありません。

編集:私がもともと使用していたことを追加したかった

$this->ForecastZone->read(null,$id);

データを取得しますが、クエリのハングと失敗が発生し続けたため、何かが変わる可能性があることを期待して生のクエリに切り替えました。

編集2:

私が試したその他のこと:この行をコントローラーの上部に追加しました:

var $uses = array('ForecastZone','ForecastZonePolies');

そして、「正しい方法」で物事を行おうとしましたが、それでも失敗しました。うーん!

$result = $this->ForecastZonePolies->find('all',array('conditions' => array('ForecastZonePolies.forecast_zone_id' => $id)));

$result = $this->ForecastZone->ForecastZonePolies->find('all',array('conditions' => array('ForecastZonePolies.forecast_zone_id' => $id)));

これらのどれも機能しません。

4

1 に答える 1

0

まず、app/tmp/logs/error.log と app/tmp/logs/debug.log を確認します。これが本当に内部エラーである場合は、そこで詳細を取得する必要があります。

奇妙な屈折から、Router::parseExtensions('html') を app/config/routes.php に入れて、これがリダイレクトの問題ではないことを確認することをお勧めします。

于 2013-03-11T15:01:40.643 に答える