1

jqueryを使用したphpフレームワークであるATK4を使用してWebサイトを開発しています。

localhost / test1をディレクトリとして使用し、ローカルのphpデータベースを使用して、ラップトップでこれを開発しました。

すべてのディレクトリをオンラインに移動してphpデータベースをウェブホストにインポートすると、ほとんどのページが機能しますが、1つでは、ページの1つでエラーが発生します。

致命的なエラー:クラス'model_TaskType'が/homepages/4/d184034614/htdocs/paperless/atk4/lib/AbstractObject.phpの131行目に見つかりません

AbstractObject.phpで参照されている行は、add関数の一部です。

モデルが存在し、まったく同じコードがローカルホストで機能しています。他のページにもモデルがあり、正常に機能しているように見えます。テーブルは、両方のデータベースでまったく同じ構造になっています。

モデルは、問題のあるページで直接参照されていません。参照されているモデルへのrefModelです。ローカルホストに表示されないパスの問題がここにありますか?

TaskTypeモデルは、このクラスのように見えますModel_TaskType extends Model_Table {public $ entity_code ='vscrum_tasktype'; public $ table_alias ='ty';

function init(){
    parent::init();

    $this->addField('id')->mandatory(true);
    $this->addField('name')->mandatory(true);
    $this->addField('budget_code')->mandatory(true);
    $this->addField('colour_desc')->refModel('model_Colour');
    $this->addField('project_id');
    $this->addField('team_id');
    $this->addField('company_id');

    $this->addCondition('team_id',$this->api->getTeamID());
  }

}

問題のあるページに追加されたタスクモデルは次のようになります。

  class Model_Task extends Model_Table {
  public $entity_code='vscrum_task';
  public $table_alias='tk'; 

function init(){
    parent::init();

//  debug causes error in Ajax in ATK v4.1.1
//  $this->debug(true);
$this->addField('id')->system(true)->visible(false);
$this->addField('story_id')->system(true)->visible(false);
$this->addField('backlog_ref')->system(true)->visible(false);
$this->addField('sprint_id')->system(true)->visible(false);
$this->addField('team_id')->system(true)->visible(false);
$this->addField('status')->defaultValue('I')->visible(false);
$this->addField('task_desc')->mandatory(true)->visible(true);
$this->addField('points')->mandatory(true)->defaultValue(1)->datatype('numeric');
    $this->addField('member_id')->mandatory(true)->refModel('model_Member');

    // join colour
    $this->addRelatedEntity('ty','vscrum_tasktype','tasktype_id','left');

    //tasktype
    $this->addField('tasktype_id')->refModel('model_TaskType')->mandatory(true);

}
}

たぶん私は何か明らかなことを見逃しました、なぜこれがローカルホストではうまくいくが私のウェブホストでは壊れるかという考えはありますか?

4

3 に答える 3

1
 Class 'model_TaskType' not found in 

常に正確な大文字を使用する必要があります。

Model_TaskTypeがある場合、CRUDに追加するときはModel_TaskTypeである必要があります。

また、この場所:

$this->addField('tasktype_id')->refModel('model_TaskType')->mandatory(true);

する必要があります:

$this->addField('tasktype_id')->refModel('Model_TaskType')->mandatory(true);

未亡人では、ファイル名の大文字化は違いを生じませんが、Linuxの場合は違いがあります。

于 2011-09-19T10:19:11.037 に答える
1

ATK4(v4.1.3)での私の経験では、このエラーは大文字と小文字の区別とフォルダー検索宣言の問題である可能性が高いです。

ATK4 PathFinderはすべてのクラスの読み込みを担当するためadd()、オブジェクトのように、Model_UserAccess特にさまざまな場所を検索します。Model/UserAccess.php次にinclude()ファイルを検索し、そのModel_UserAccess中のクラスをインスタンス化しますreturn new Model_UserAccess()

PathFinderは、アンダースコアのすべてのインスタンスを変更し、それに応じて場所_/トラバースします。

したがって、次のような宣言があります。

class Model_UserAccess extends Model_Table

そしてそれを追加します:

$m = $this->add('Model_UserAccess');

2つのファイル(順不同)を検索してロードします。1番目は:から/Model/Table.php、2番目は:からです。/Model/UserAccess.php

このフォルダー分離の概念に慣れれば、ATK4での開発ははるかに簡単になります。

私自身もフィールドレベルまで再定義しているので、そしてさらにはa/lib/Model/を持っています。後者は次のようになります。/lib/Form//lib/Form/Field/

class Form_Field_GraduatedSlider extends Form_Field

于 2012-01-07T06:04:11.863 に答える
0

OK、少し奇妙に思えますが、これは私が見つけたものです。

Tableを拡張するTaskというモデルがあります。

class Model_Task extends Model_Table {
public $entity_code='vscrum_task';
    public $table_alias='tk';

function init(){
  parent::init();
  $this->addField('id')->system(true)->visible(false);
  $this->addField('story_id')->system(true)->visible(false);
  $this->addField('backlog_ref')->system(true)->visible(false);

  $this->addField('status')->defaultValue('I')->visible(false);
  $this->addField('task_desc')->mandatory(true)->visible(true);

      $this->addField('member_id')->mandatory(true)->refModel('model_Member');

      // join colour
      $this->addRelatedEntity('ty','vscrum_tasktype','tasktype_id','left');

      //tasktype
      $this->addField('tasktype_id')->refModel('model_TaskType')->mandatory(true);
 }

Taskを拡張するScrumwallTask​​というモデルがあります

class Model_ScrumwallTask extends Model_Task {

function init(){
  parent::init();

  $this->addField('status')->defaultValue('I')->system(true);
      $this->addField('colour_desc')->datatype('text')->calculated(true);
      $this->addField('status')->visible(true);

    }

function calculate_colour_desc(){
        return $this->api->db->dsql()
            ->table('vscrum_colour')
            ->where('id=ty.colour_id')
            ->field('colour_desc')
            ->select();
    }
}

ScrumwallTask​​はparent::initを呼び出すので、すべてのフィールドがタスクに追加されると想定しました

親タスクですでに定義されているにもかかわらず、tasktype_idのaddFieldをScrumwallTask​​に複製することで、エラーを取り除きました。

$ this-> addField('tasktype_id')-> refModel('Model_TaskType');

モデルの継承に期待される動作ですか?本当に紛らわしいのは、ローカルホスト(Windows 7)で正常に機能したことです。

于 2011-09-19T05:36:17.500 に答える