【问题标题】:Pre-select value in edit view in CakePHP when using virtual fields使用虚拟字段时在 CakePHP 的编辑视图中预选值
【发布时间】:2015-03-26 13:06:17
【问题描述】:

我有一个简单的编辑表单,可以毫无问题地预先选择选定的值。但是有一个选择输入字段包含来自类ContactPerson 的对象。我想在视图中显示prenamelastname,所以我创建了一个名为fullname 的虚拟字段。问题是我打开视图时 CakePHP 没有预先选择它。

ContactPerson 类:

id
prename
lastname
fullname (virtual field for prename . " " . lastname)

控制器中的编辑方法:

$contact_persons = $this->Product->ContactPerson->find('list', array('fields' => array('id','fullname'), 'order' => array('fullname' => 'asc'), 'conditions' => array("not" => array ( "fullname" => ' '))));
$this->set(compact('contact_persons'));

查看:

echo "<div class='control-group'>";
echo $this->Form->label('contact_person_id', 'Contact Person:', 'control-label');
echo "<div class='controls'>";
echo $this->Form->input('contact_person_id', array('class' => 'select-input', 'empty' => 'Choose Contact Person', 'options' => $contact_persons));
echo "</div>";
echo "</div>";

由于我为 ContactPersons 使用了一个虚拟字段,因此它不会在编辑视图中预先选择它。如何告诉 CakePHP 在使用虚拟字段时必须预先选择特定对象?

【问题讨论】:

    标签: php html cakephp model-view-controller


    【解决方案1】:

    将此添加到您的 ContactPerson 模型中:

    public $displayField = 'fullname';
    

    Cake 使用显示字段来确定使用哪个字段来填充由表单助手生成的选择列表类型查找。如果您不设置 displayField,它将使用 id。

    -- 对于从相关模型中提取的字段

    未经测试,但我认为您应该能够为您的 Product 模型动态设置 displayField - 这是您在这种情况下使用的模型。

    将以下内容添加到您的控制器:

    $this->Product->displayField = 'fullname';
    

    就在您进行查找之前。您需要在控制器方法中执行此操作,因为您可能有其他 Product 方法不会从 ContactPerson 中提取数据。

    【讨论】:

    • 谢谢西蒙,但这并没有解决问题。
    • 抱歉 - 我刚刚注意到您正在从相关模型中提取产品。更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2023-03-29
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多