如何限制ATK4中引用模型中的列表

时间:2011-09-23 01:00:49

标签: php frameworks atk4

我有一个名为Task的模型就像这样定义(字段不相关而已被删除)

  <?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下拉列表中的选项限制为仅为用户团队定义的那些任务类型。我尝试在TaskType模型中添加一个addCondition,引用我之前记忆的会话变量

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

并且还使用直接调用登录使用的值

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

但这导致在Grid中显示Tasktype很好

enter image description here

但在Ajax对话框中为Edit和Add留空。

enter image description here

如果我从TaskType Model中删除addCondition行,它会显示列表中的所有值,但我总是希望将其限制为子集。

由于这是推荐的模型,而不是CRUD所基于的模型,有关如何使其按预期工作的任何建议?

我尝试了Roman的建议,即拥有一个TaskType模型和一个新模型,该模型是TaskType_Team,其中包含addCondition,就像这样

类Model_TaskType_Team扩展Model_TaskType {       function init(){         父::的init();

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

我需要创建一个名为TaskType的子目录undel模型,否则它没有找到新模型,但最终结果是相同的。我认为这与我之前遇到的另一个问题有关,即Ajax对话框失去了对$ p-&gt; api的访问权限,因此没有显示限制(这就是为什么它在同一页面上的网格工作正常而不是ajax对话框,但我不想使用stickyGet来解决这个问题以保证安全性(不希望能够修改URL以查看其他团队数据)和会话变量($ p-&gt; auth-&gt; memorize和$ p-&gt ; auth-&gt;召回)在这种情况下也似乎不起作用 - 任何进一步的建议?

1 个答案:

答案 0 :(得分:1)

请记住,您可以像这样扩展您的模型。事实上,这在大型项目中经常使用。

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