2015-07-12 132 views
0

我使用Twig和两个foreach每个为每个居民创建一个表单。一个将居民设置为活动状态,另一个将其设置为非活动状态。一个应该发布到urlFor intake.post和另一个urlFor discharge.post。我遇到的问题是,当我提交排出岗位时,它会张贴到进入岗位。如果任何人都可以解释为什么这会很好。多个表单并提交提交到错误的形式

{% extends 'Templates/default.php' %} 

{% block title %}All Residents{% endblock %} 

{% block content %} 
<h2>All active Residents</h2> 
<div> 
{% if residents is empty %} 
    <p>No active residents</p> 
{% else %} 
    {% for resident in residents if resident.active %} 
     <div class="row"> 
      <form action="{{ urlFor('discharge.post') }}" method="post" autocomplete="off"> 
       <div class="col-sm-4"> 
        {{ resident.resident_id }} 
        {% if resident.getResFullName %} 
         <a href="{{ urlFor('Resident.profile', {resident: resident.id}) }}">({{ resident.getResFullName }})</a> 
        {% endif %} 
       </div> 

       <div class="col-sm-1"> 
        <input type="hidden" name="id" value="{{ resident.id }}"> 
        <input type="hidden" name="resident_id" value="{{ resident.resident_id }}"> 
        <p><div> 
         <button type="submit" class="btn btn-default" value="discharge"> 
          Discharge 
         </button> 
        </div></p> 
       </div> 
      </form> 
     </div>    
    {% endfor %}    
{% endif %} 
</div> 
<h2>Residents for intake.</h2> 
<div> 
{% for resident in residents if not resident.active %} 
    <div class="row"> 
     <form action="{{ urlFor('intake.post') }}" method="post" autocomplete="off"> 
      <div class="col-sm-4"> 
       {{ resident.resident_id }} 
       {% if resident.getResFullName %} 
        <a href="#">({{ resident.getResFullName }})</a> 
       {% endif %} 
      </div> 

      <div class="col-sm-1"> 
       <input type="hidden" name="id" value="{{ resident.id }}"> 
       <p><div> 
        <button type="submit" class="btn btn-default" value="intake"> 
         Intake 
        </button> 
       </div></p> 
      </div> 
     </form> 
    </div> 

{% endfor %}  
</div> 
{% endblock %} 

这是如果需要

<!DOCTYPE html> 
<html lang="en"> 
<head> 
     <meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta name="description" content=""> 
<meta name="author" content=""> 

    <title>Rocmnd | {% block title %}{% endblock %}</title> 

<!-- Bootstrap Core CSS --> 
<link href="css/bootstrap.min.css" rel="stylesheet"> 

<!-- Custom CSS --> 
<link href="css/simple-sidebar.css" rel="stylesheet"> 

<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 
<!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 
<!--[if lt IE 9]> 
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> 
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> 
<![endif]--> 

</head> 

<body> 


{% include 'templates/partials/navigation.php' %} 
<div id="wrapper"> 

    <!-- Page Content --> 
    <div id="page-content-wrapper"> 
     <div class="container-fluid"> 
      <div class="row"> 
       <div class="col-lg-12"> 
        {% include 'templates/partials/messages.php' %} 

        {% block content %}{% endblock %} 

       </div> 
      </div> 
     </div> 
    </div> 
    <!-- /#page-content-wrapper --> 

</div> 
<!-- /#wrapper --> 

<!-- jQuery --> 
<script src="js/jquery.js"></script> 

<!-- Bootstrap Core JavaScript --> 
<script src="js/bootstrap.min.js"></script> 

     <!-- Menu Toggle Script --> 

<script> 
$("#menu-toggle").click(function(e) { 
    e.preventDefault(); 
    $("#wrapper").toggleClass("toggled"); 
}); 
</script> 


</body> 
</html> 

两个PHP文件都进

<?php 

$app->get('/Resident/all', function() use($app) { 

$app->render('Resident/all.php'); 

})->name('intake.resident'); 

$app->post('/Resident/all', function() use($app) { 

$request = $app->request; 

$ResidentId = $request->post('id'); 

$resident = $app->resident 
    ->where('id', $ResidentId) 
    ->where('active', false) 
    ->first(); 

    if (!$resident){ 
     $app->flash('global', 'There was a problem activating this resident. '); 
     $app->response->redirect($app->urlFor('home')); 

    } else { 
     $resident->activateAccount(); 

     $app->flash('global', 'Resident is now active.'); 
     $app->response->redirect($app->urlFor('home')); 
    } 


$app->render('Resident/all.php'); 


})->name('intake.post'); 

和放电的PHP页面如default.php

<?php 

$app->get('/Resident/all', function() use($app) { 

$app->render('Resident/all.php'); 

})->name('discharge.resident'); 

$app->post('/Resident/all', function() use($app) { 

$request = $app->request; 

$ResidentId = $request->post('id'); 
$residentNumber = $request->post('resident_id'); 

$app->resident->where('id', $ResidentId)->update([   
    "active" => false, 
    "discharge_date" => NOW 
]); 

$app->numbers->where('number', $residentNumber)->update(array(
    "active" => false 
)); 

$app->flash('global', 'Resident has been discharged.'); 
$app->response->redirect($app->urlFor('home')); 

$app->render('Resident/all.php', [ 

]); 

})->name('discharge.post'); 

回答

0

当两个同一页上的表单有不同的行为离子,他们的意见书应落在他们相应的行动。这很可能是你的Twig特定的代码实际上证实了变量{{urlFor('discharge.post')}}到吸引URL。我建议你在呈现表单页面的源代码后再看看;并确保这两项行动是正确的。