【发布时间】:2012-01-05 16:09:40
【问题描述】:
目标: 列出一组记录,每个记录旁边都有一个复选框以及“删除”输入。如果用户选中一个或多个复选框,则提交操作将获取每个复选框的 id 并删除相应的记录。
我知道此功能是在后端提供的,但我正在尝试向已登录的前端用户提供该功能。
更新:我现在可以正确呈现小部件,但仍然难以捕获所选复选框的 ID。我们将不胜感激。
索引页面:
<h1>Jobs</h1>
<?php include_partial('list', array('saved_jobss' => $saved_jobss, 'form' => $form)) ?>
//I'm not sure if I can even pass two objects??
索引操作:
public function executeIndex(sfWebRequest $request)
{
$userId = sfContext::getInstance()->getUser()->getId();
$this->saved_jobss = Doctrine_Core::getTable('saved_jobs')->getSavedJobs($userId);
$this->form = new Saved_JobsForm();
}
部分页面名为:_list
<table class="sortable">
<thead>
<tr>
<th>Delete</th>
<th>Company:</th>
<th>Job name:</th>
<th>Job No.</th>
<th>Saved:</th>
</tr>
</thead>
<tbody>
<?php foreach ($saved_jobss as $saved_jobs): ?>
<tr>
<td>
<?php echo $form['id']->renderRow() ?>
<td>
<a href="
<?php
$jobId = $saved_jobs->getJobId();
echo 'job/'.$saved_jobs->getJob($jobId);
?>
">
<?php
$jobId = $saved_jobs->getJobId();
echo $saved_jobs->getJobCompany($jobId);
?>
</a>
</td>
<td>
<?php
$jobId = $saved_jobs->getJobId();
echo $saved_jobs->getJobName($jobId);
?>
</td>
<td>
<?php
echo $saved_jobs->getJobId();
?>
</td>
<td><?php echo date("M-j-y", strtotime($saved_jobs->getCreatedAt())) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<input type="submit" value="Delete" />
</form>
行动:
public function executeSubmit(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod('post'));
$params = $request->getPostParameters();
$this->redirect('saved_jobs/deleteConfirmation?'.http_build_query($params));
}
表单类:
class Saved_JobsForm extends BaseSaved_JobsForm
{
public function configure()
{
$this->widgetSchema['id'] = new sfWidgetFormInputCheckbox();
$this->widgetSchema->setLabel('id', false);
}
}
我对使用 javascript 的想法进行了修改,但不确定这是否可行。任何帮助,或正确方向的一点将不胜感激。提前致谢。
【问题讨论】:
-
首先,您可以根据需要将尽可能多的对象传递给部分..
-
好的,小部件工作正常,现在我只是难以捕获列表中已检查记录的 ID 以传递给我的参数字符串。
-
你为什么使用这个 Saved_JobsForm ?您应该只列出您的工作并创建一个删除操作。如果你担心 CSRF,你有一个很好的方法 ($request->checkCSRFProtection()) 来再次检查它的 BaseForm 就足够了。
-
好吧,如果我按照您建议的方式进行操作(可能是正确的做法)。但是,与其从头开始,不如学习如何从选中的复选框中捕获记录 ID。
-
你不能多次渲染一个小部件!
标签: symfony1 symfony-1.4