我有一个名为Category的模型,它有很多费用。我正在尝试生成一个手风琴类型的界面,用户可以在其中扩展类别并编辑费用。我可以生成输入字段,但它们似乎没有处于“编辑”模式,因为它们没有预先填充。
我在网上搜索了一些相关文章,例如这篇文章CakePHP: How to update multiple records at the same time with the Form helper以及此文章CakePHP: Form helper with saveMany() to edit multiple rows at once。我试图模仿他们的代码,但没有成功。
My CategoriesController Index函数看起来像这样......
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要求为此FormHelper设置$ this-> request->数据。但在我在网上找到的例子中,每个人似乎都使用了模型名称的复数,所以我也试过了。
我的分类\ index.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'
)
)
)
)
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
巧合的是,我今天做的几乎完全一样。
要自动填充表单,您需要在视图中的$this->data
中包含您的数据。您可以通过在控制器中分配$this->request->data
来执行此操作。
然后,您需要让您的字段名称完全反映该数组的结构。所以使用你的例子,你可能有:
echo $this->Form->input("$i.Category.category_name");
表示类别字段,
echo $this->Form->input("$i.Expense.$j.expense_id");
代表您的费用字段。