Модель ATK4 не найдена при переходе в онлайн - PullRequest
1 голос
/ 19 сентября 2011

Я занимаюсь разработкой веб-сайта с использованием ATK4, фреймворка php с jquery .

Я разработал это на своем ноутбуке, используя localhost / test1 в качестве каталога и с локальной базой данных php.

Если я перевожу все каталоги в оперативный режим и импортирую базу данных php на мой веб-хостинг, большинство страниц работают, но на одной, на одной из страниц появляется ошибка, указывающая

Неустранимая ошибка: класс "model_TaskType" не найден в /homepages/4/d184034614/htdocs/paperless/atk4/lib/AbstractObject.php в строке 131

Строка, указанная в AbstractObject.php, является частью функции add.

Модель присутствует, и на localhost работает точно такой же код. Другие страницы также имеют модели и, кажется, работают нормально. Таблица имеет одинаковую структуру в обеих базах данных.

Модель не имеет прямой ссылки на странице, которая имеет проблему, это 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);

}
}

Может быть, я упустил что-то очевидное, есть идеи, почему это хорошо работает на локальном хосте, но не работает на моем веб-хосте?

Ответы [ 3 ]

1 голос
/ 19 сентября 2011
 Class 'model_TaskType' not found in 

вы всегда должны использовать точную прописную букву.

если у вас есть Model_TaskType, он должен быть Model_TaskType при добавлении в CRUD.

также это место:

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

должно быть:

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

В вдовах, капитализация имени файла не имеет значения, где, как в Linux, это так.

1 голос
/ 07 января 2012

в моем опыте с 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');

ищет и загружает два файла (не в определенном порядке), 1-й из: /Model/Table.php и 2-й из: /Model/UserAccess.php

один развам удобна эта концепция разделения папок, разработка в ATK4 будет намного проще.

У меня самого есть /lib/Model/ и /lib/Form/ и даже /lib/Form/Field/, так как я также перехожу в поле.уровень.Последний будет выглядеть примерно так:

class Form_Field_GraduatedSlider extends Form_Field

0 голосов
/ 19 сентября 2011

ОК, кажется немного странным, но это то, что я нашел.

У меня есть модель под названием 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);
 }

У меня есть модель под названием 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, так что я предполагал, что все поля будут добавлены к Задаче

Я избавился от ошибки, продублировав addField для tasktype_id в ScrumwallTask, даже если он уже определен в родительской задаче.

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

Это исключенное поведение для наследования моделей? Что действительно сбивает с толку, так это то, что он работал нормально на локальном хосте (Windows 7)!

...