无法让表单助手预先填充多个记录



我有一个名为Category的模型,它有很多费用。 我正在尝试生成一个手风琴类型的界面,用户可以在其中展开类别并编辑费用. 我可以生成输入字段,但它们似乎没有处于"编辑"模式,因为它们没有预先填充。

我在网上搜索并找到了一些相关的文章,例如这篇 CakePHP:如何使用表单助手同时更新多条记录,还有这篇 CakePHP:带有 saveMany() 的表单助手一次编辑多行。 我试图模仿他们的代码,但没有成功。

我的类别控制器索引函数看起来像这样...

public function index($project_id) {
    $data = $this->Category->find('all', array(
        'conditions'=>array('Category.project_id' => $project_id),
        'order'=>array('Category.category_name')
    ));
    $this->set('categories', $data);
    $this->request->data = $data;
}

我读过cakephp2需要设置$this->request->data才能使FormHelper工作。 但是在我在网上找到的示例中,每个人似乎都使用模型名称的复数形式,所以我也尝试了。

我的类别\索引.ctp 看起来像这样。 我还没有到"手风琴"阶段. 我只是想在屏幕上获取预先填充的输入框。

$i=0;
foreach ($categories as $category)
{
    echo $this->Form->input("Category.$i.category_id");
    echo $this->Form->input("Category.$i.category_name");
    $j=0;
    foreach($category['Expense'] as $expense)
    {
        echo $this->Form->input('Expense.' . $j . '.expense_id');
        echo $this->Form->input('Expense.' . $j . '.expense_name');
        echo $this->Form->input('Expense.' . $j . '.dollar_amount');
        echo $this->Form->input('Expense.' . $j . '.sqft_amount');
        $j++;
    }
    $i++;
}

此代码似乎正在正确迭代,因为它吐出正确的输入字段。 现在最大的问题只是让田地预先填充。 它似乎没有处于"编辑"模式,我担心当我尝试保存数据时,这将是一个问题。

另外,我已经尝试过在顶部有和没有$this->form->create('Category')。 这似乎没有区别。

$categories数组看起来像这样...

array(
    (int) 0 => array(
        'Category' => array(
            'category_id' => '1',
            'category_name' => 'Category 1',
            'category_index' => '1',
            'project_id' => '1'
        ),
        'Project' => array(
            'project_id' => '1',
            'project_name' => '131 Anndale Dr',
            'project_sqft' => '1700',
            'project_cost' => '318',
            'project_cost_per_sqft' => '0'
        ),
        'Expense' => array(
            (int) 0 => array(
                'expense_id' => '2',
                'expense_name' => 'Nails',
                'category_id' => '1',
                'dollar_amount' => '50',
                'sqft_amount' => '1',
                'expense_index' => '2'
            ),
            (int) 1 => array(
                'expense_id' => '1',
                'expense_name' => 'Wood',
                'category_id' => '1',
                'dollar_amount' => '99',
                'sqft_amount' => '1',
                'expense_index' => '1'
            )
        )
    ),
    (int) 1 => array(
        'Category' => array(
            'category_id' => '3',
            'category_name' => 'Category 2',
            'category_index' => '2',
            'project_id' => '1'
        ),
        'Project' => array(
            'project_id' => '1',
            'project_name' => '131 Anndale Dr',
            'project_sqft' => '1700',
            'project_cost' => '318',
            'project_cost_per_sqft' => '0'
        ),
        'Expense' => array(
            (int) 0 => array(
                'expense_id' => '3',
                'expense_name' => 'Bed',
                'category_id' => '3',
                'dollar_amount' => '99',
                'sqft_amount' => '2',
                'expense_index' => '1'
            ),
            (int) 1 => array(
                'expense_id' => '4',
                'expense_name' => 'Chair',
                'category_id' => '3',
                'dollar_amount' => '70',
                'sqft_amount' => '1',
                'expense_index' => '2'
            )
        )
    )
)

任何帮助将不胜感激。 谢谢!!

巧合的是,我今天一直在做几乎完全相同的事情。

为了自动填充表单,您需要将数据$this->data在视图中。您可以通过在控制器中分配给$this->request->data来执行此操作。

然后,您需要让您的字段名称准确反映该数组的结构。因此,使用您的示例,您可能有:

echo $this->Form->input("$i.Category.category_name");

对于类别字段,以及

echo $this->Form->input("$i.Expense.$j.expense_id");

用于您的费用字段。

相关内容

  • 没有找到相关文章

最新更新