【问题标题】:CakePHP pre populate select box based on existing selection on related modelCakePHP 根据相关模型上的现有选择预填充选择框
【发布时间】:2011-03-24 19:56:18
【问题描述】:

我正在尝试在编辑记录时使用现有选择预填充此状态选择框。 在相关模型中。

plan_details/view.ctp

echo $this->Form->input('State',array('empty' => false,'options' => $state));

plan_details_controller 视图函数:

$state = $this->PlanDetail->Plan->State->find('list');
    $this->set(compact('state', $state));
    debug($state);

view.ctp 中的数组输出(如预期):

Array
(
    [1] => Oregon
    [2] => Washington
)

我上面的选择框默认为数组中的1。我需要它默认为已经存在的选定值。

例如,当我添加一条记录和一个选定的 Washington(2) 时,然后在查看我的编辑屏幕时,预选的值应该是值为 2 的华盛顿。

我被困在这个问题上一段时间了。知道我做错了什么吗?

【问题讨论】:

    标签: arrays forms cakephp select


    【解决方案1】:

    如果你正在编辑一个页面,你需要设置 $this->data 来自动填充它。在您的编辑操作中

    if (empty($this->data)) {
         $this->data = $this->PlanDetail->read(null, $id);
    }
    

    这应该在记录中读出来(注意复数)

    $states = $this->PlanDetail->Plan->State->find('list');
    $this->set(compact('states'));
    

    在你的表单中应该是

    echo $this->Form->input('Plan.state_id',array('empty' => false));
    

    我发现您的方法有点令人困惑,但上述方法应该可行。这个表格是用来编辑计划、计划细节还是两者兼而有之

    【讨论】:

    • 我会试试这个,让你知道会发生什么。我正在 PlanDetail 视图页面上编辑计划。如您所知,CakePHP 在烘焙时自然会引入这些类型的关系(假设您的表已正确映射),但我想让结果可编辑。因此,它只是遇到了选择框值的问题。
    • 嗯.. 已经选择的状态仍然没有显示您建议的更新。
    • 所以如果你正在编辑两者,你真的需要通过 $this->data = $this->PlanDetail->read(null, $id); 设置 $this->data $this->data['Plan']['state_id'] 是否已填充?
    • $this->set(compact('states', $states));错了,它要么是 set(compact('states')) 要么是 set('states', $states) 不是两者都
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2012-12-24
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多