在添加期间,CRUD忽略$ display_field

时间:2012-05-01 08:20:42

标签: php frameworks atk4

我发现CRUD和hasOne()的问题,其中$ display_field在“add”表单中被忽略。如果引用的模型具有“名称”字段,则会正确填充CRUD的“添加”表单中的下拉菜单。但是,如果hasOne()模型使用$ display_field参数,我希望Add表单显示指定的字段,但它不会。它只显示引用模型的“名称”字段或“id”,而不是$ display指定的字段。但是,添加条目后,将使用正确的$ display_field显示条目。所以问题出现在Add操作中。

例如:

作者

class Model_Author extends Model_Table {

public $table='author';

function init(){
  parent::init();
  $this->addField('long_name');
  $this->addField('DOB');

  }
}

class Model_Book extends Model_Table {

public $table='book';

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

 $this->addField('title');
 $this->hasOne('Author', 'author_id', 'long_name');
 }

}

CRUD页面。

class page_manager extends Page {

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

$tabs=$this->add('Tabs');

$crud=$tabs->addTab('Book')->add('CRUD');
   } 
 }

当您选择“添加”按钮时,“作者”字段将显示作者表中作者的ID号。但是,添加Book条目后,将使用正确的字段(即long_name)显示现有条目。

干杯

1 个答案:

答案 0 :(得分:0)

我确实经历过相同的行为并且同意期望作为显示字段的hasOne()的第三个参数应该覆盖模型$ title_field。

我隔离了原因并找到了改进的方法。打开文件atk4 / lib / Field / Reference.php并在函数getModel()中添加行以设置显示字段,如下所示:

  function getModel(){
        if(!$this->model)$this->model=$this->add($this->model_name);
        if($this->display_field) $this->model->title_field=$this->display_field;
        return $this->model;
    }

这里的工作正如您所期望的那样,hasOne()将决定在CRUD的ADD形式中显示哪个字段。但是,我无法监督任何副作用或可能是其他地方添加此display_field。