2015-07-12 133 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。我建議你在呈現表單頁面的源代碼後再看看;並確保這兩項行動是正確的。