【问题标题】:CRUD ignores $display_field during AddCRUD 在添加期间忽略 $display_field
【发布时间】:2012-05-10 20:02:17
【问题描述】:

我发现 CRUD 和 hasOne() 存在问题,其中 $display_field 在“添加”表单中被忽略。如果引用的模型具有“名称”字段,则正确填充 CRUD 的“添加”表单中的下拉菜单。但是,如果 hasOne() 模型使用 $display_field 参数,我希望 Add 表单显示指定的字段,但事实并非如此。它只会显示引用模型的“name”字段或“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)将用于显示现有条目。

干杯

【问题讨论】:

  • 这看起来像一个错误。请在此处举报:github.com/atk4/atk4/issues
  • 好的,我已将问题添加到 git hub。干杯。
  • Model_Author 中缺少的$title_field 不是这里的问题吗?
  • 您的权利,设置 $title_field 将解决问题,但它是一种解决方法。我希望 hasOne() 中的 $display_field 参数能够覆盖这种行为。你怎么看?

标签: php frameworks atk4


【解决方案1】:

我确实遇到了同样的行为,并同意期望 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。

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多