Как я могу ограничить список в ссылочной модели в ATK4 - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть модель с именем Задача, определенная следующим образом (поля, не относящиеся к вопросу, удалены)

  <?php
  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('task_desc')->mandatory(true)->visible(true);
     $this->addField('tasktype_id')->mandatory(true)->refModel('Model_TaskType');
     $this->addField('team_id')->system(true)->visible(false);

и тип задачи refModel определен следующим образом (поля, не относящиеся к вопросу, удалены)

<?php
    class 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('team_id');

        }   
     }

У меня есть CRUD, который основан на задаче и теперь (благодаря помощи Jancha и Romans по stackoverflow) работает нормально.

Я хочу ограничить параметры в раскрывающемся списке для TaskType, чтобытолько те типы задач, которые определены для команды пользователя.Я попытался поместить addCondition в модель TaskType, ссылаясь на переменную сеанса, которую я ранее запомнил

  $this->addCondition('team_id',$p->api->recall('team_id'));

, а также используя прямой вызов значения для вошедшего в систему использования

  $this->addCondition('team_id',$p->api->auth->get('team_id'));

, ноэто приводит к отображению штрафа типа задачи в сетке

enter image description here

, но оставляет его пустым для редактирования и добавления в диалоговом окне Ajax.

enter image description here

Если я удаляю строку addCondition из модели TaskType, она показывает все значения в списке, но я всегда хочу, чтобы это ограничивалось подмножеством.

Поскольку это упомянутая Модель, а не Модель, на которой основан CRUD, есть ли какие-либо предложения о том, как заставить это работать так, как ожидалось?

Я попробовал предложение Романа иметь модель, котораяэто TaskType и новая модель, расширенная от той, которая является TaskType_Team с добавленным в нем addCondition следующим образом:

Класс Model_TaskType_Team extends Model_TaskType {function init () {parent :: init ();

    $this->addCondition('team_id',$p->api->auth->get('team_id'));
  }

, для которого мне нужно было создать подкаталог undel Model с именем TaskType, в противном случае он не нашел новую модель, но конечный результат тот же.Я думаю, что это связано с другой проблемой, которая у меня ранее была, когда диалог Ajax теряет доступ к $ p-> api и поэтому не отображает ограничение (и именно поэтому он отлично работает для сетки на той же странице, что и в ajaxдиалоговое окно, но я не хочу использовать stickyGet для решения этой проблемы в целях безопасности (не хочу иметь возможность изменять URL-адрес для просмотра данных других команд) и переменных сеанса ($ p-> auth-> memorize и $ p-> auth->Напомним) также не кажется работой в этом случае - какие-либо дополнительные предложения?

1 Ответ

1 голос
/ 23 сентября 2011

Помните, что вы можете расширить свои модели таким образом.На самом деле, это очень часто используется в более крупных проектах.

class Model_TaskType_Team extends Model_TaskType {
    function init(){
        parent::init();
        $this->addCondition('team_id',$this->api->auth->get('team_id'));
    }
}
...