好吧,这听起来很容易,但对我来说,这真是令人困惑。我一直在处理一个表单来编辑一个已经存在的数据库条目。一些字段是根据连接表中的记录创建和填充的。
这听起来有点粗略,所以我将尝试说明它。我有一个名为 Content 的表和一个名为 Files 的表,其中包含文件名和位置。我根据提供的内容 ID 获取文件名,然后表单创建字段,然后用文件名填充这些字段。
public function setFiles($files) {
$i = 0;
foreach ($files as $file) {
$i++;
$fieldname = "encloseditemname{$i}";
$this->addElement('text', $fieldname, array('required' => true,
'label' => 'Enclosed item name (test)',
'value' => $file['file_url'],
));
}
}
这工作得很好,但现在我想添加一个按钮,允许我删除一个文件。所以我认为应该做的是fileDeleteAction()
在控制器中创建一个,然后让按钮重定向到该操作,让它删除数据库中的条目,然后用表单呈现视图。
让动作呈现不同的视图,然后它是标准视图,不是问题。编写代码以删除数据库中的条目,也不是问题。使用 addElements 方法作为工厂创建一个重定向到删除操作的按钮......巨大的问题。这就是我走多远。
$this->addElement('button', "deleteencloseditem{$i}", array( ??? ));
如何让此按钮重定向到删除操作,而不会干扰表单底部的提交按钮,该按钮用于提交表单并调用控制器中的 editAction。
我已经研究过使用一些 javascript 来检测按下了哪个按钮,但我还没有使用 javascript,并且无法找出如何找出按下了哪个按钮,因为按钮名称和 id 取决于 setFiles 函数因此可以介于deleteencloseditem1
并deleteencloseditem5000
取决于它推送到表单中的文件名的数量。
我怎样才能完成这项工作?任何提示或建议都非常感谢:)