【问题标题】:Embedding a form in a partial with a foreach statement使用 foreach 语句在部分中嵌入表单
【发布时间】: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


【解决方案1】:

已解决:我刚刚通过操作和记录 ID 传递了每个记录的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2023-03-31
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多