如何在php路由中传递参数



我需要编辑数据表中的一行,问题是编辑模态,当我使用id时,我单击编辑按钮,模态打开并检索我的表的数据,但我不能编辑数据,除了我可以编辑的数据表的第一行。

当我使用类时,如果我编辑表的最后一行,它将修改第一行,但使用最后一行的数据。

->控制器通过id获取用户并编辑:

$controllers->post('/modif', function (App $app,Request $request) {
try{

$ListeUser  =$app->service('User')->getUser($request->get('id'));
$ListeUser->setNom($request->get('nom'));
$ListeUser->setPrenom($request->get('prenom'));
$ListeUser->setAdresse($request->get('adresse'));
$ListeUser->setLogin($request->get('login'));
$ListeUser->setPassword($request->get('password'));
$ListeUser->setAcces($request->get('acces'));
$ListeUser->setArchive($request->get('archive'));

$app->sauvegarder($ListeUser);
return new Response('sauvegarde',200);

} catch (Exception $ex) {
return new Response($ex->getMessage(),400);
} 
})->bind('modif')->before($this['loginok'])->before($this['isAdmin']);

这是trick中的模态:

{% for user in users %}  
<div class="modal fade" data-user-id="{{ user.id }}" role="dialog" tabindex="-1" id="modalModifCl">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button aria-label="Close" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Modifier Client</h4>
</div>

<!--FORMULAIRE -->
<div class="modal-body">
<!-- APPEL FONCTION -->
<form action="{{app.route('modif',{'id':user.id})}}" class="form-horizontal form3" method="post" >

<input id="idClient" name="id" type="hidden" value="{{user.id}}">

<div class="form-group">
<label class="col-sm-2" for="nom">Nom</label>
<div class="col-sm-10">
<input class="form-control" id="nom" name="nom" placeholder="Nom" type="text" value="{{user.nom}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="prenom">Prénom</label>
<div class="col-sm-10">
<input class="form-control" id="prenom" name="prenom" placeholder="Prénom" type="text" value="{{user.prenom}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="adresse">Adresse</label>
<div class="col-sm-10">
<input class="form-control" id="adresse" name="adresse" placeholder="Adresse" type="text" value="{{user.adresse}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="login">Login</label>
<div class="col-sm-10">
<input class="form-control" id="login" name="login" placeholder="Login" type="text" value="{{user.login}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="password">Mot de passe</label>
<div class="col-sm-10">
<input class="form-control" id="password" name="password" placeholder="Mot de passe" type="password" value="{{user.password}}">
</div>
</div><!-- archive caché-->
<input class="form-control" id="archive" name="archive" placeholder="archive" type="hidden" value="{{user.archive}}"> <!-- acces caché-->
<div class="form-group">
<div class="cols-sm-10">
<select class="form-control" id="acces" name="acces">
<option value="2">
Client Prive
</option>
<option value="3">
Client Pro
</option>
<option value="1">
Admin
</option>
</select>
</div>
</div>
</form>
</div><!--BOUTONS FERMER ET VALIDER DANS FORMULAIRE MODIFIER CLIENT-->
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" type="button">Fermer</button>
<button class="btn btn-primary validerMod" type="button">Valider </button>         
</div>
</div>
</div>
</div>
{% endfor %}               

jQuery:

$(function () {
/* MODAL Modifier client Privé */
$('.btMod').click (function(e){
e.preventDefault();
$('.modal[data-user-id="'+$(this).data('id')+'"]').modal({
show:true,
backdrop:'static'
});
});


/* MODAL BOUTON VALIDER FORMULAIRE MODIFIER CLIENT PRIVE */
$('.validerMod').click(function(e){
e.preventDefault();
$.ajax({
url:$('.form3').attr('action'),
type: $('.form3').attr('method'),
data: $('.form3').serialize()
                                       
}).done(function(data){
$('#modalModifCl').modal('hide');

window.location.href='{{app.route('clientsPrive')}}';
alert("Client modifié avec succès !");                             

}).fail(function(data){
console.log(data.responseText);
});
});
});

编辑:以下是trick中的数据表代码:

<div class="row" style="  display:flex;  margin-left: auto; margin-right:auto; width:100%; margin-bottom: 5vw; margin-top:1vw;
border:1px solid #b1e7e7; background:rgba(102, 204, 255, 0.05);"> 
<div class="col-lg-12" > 

<table id="user" class="display" > 

{%if app.isAdmin %}     
<button id="bt-{{user.id}}" data-id="{{user.id}}" class="btn btn-primary act btClient" style="background:#0088cc; font-size:0.4vw;" title="Nouveau client">
<span class ="glyphicon glyphicon-plus" style="font-size:1vw;"></span></button> 
{%endif%} 

<!-- TABLE USER -->  
{% for user in users %}  
<tr> 
<td> {{user.id}} </td> 
<td> {{user.nom}} </td>                  
<td> {{user.prenom}} </td> 
<td> {{user.adresse}} </td> 
<td> {{user.login}} </td>                     
<td> {{user.AccesString}} </td>

<!--BOUTONS DANS DATATABLE-->

<td>
{%if app.isAdmin %}    

<!-- Bouton Details client-->
<button style="font-size:0.4vw; background:#0088cc;" class="btn btn-info" title="Détails">
<span class ="glyphicon glyphicon-search" style="font-size:1vw;"></span></button> 

<!-- Bouton Ajouter compte client-->
<button id="bt-{{user.id}}" data-id="{{user.id}}" class="btn btn-primary act btCpCl" style="background:rgba(0, 136, 204, 0.5); font-size:0.4vw;" title="Nouveau compte">
<span class ="glyphicon glyphicon-plus" style="font-size:1vw;"></span></button> 

<!-- Bouton Modif client-->
<button id="bt-{{user.id}}" data-id="{{user.id}}" class="btn btn-primary act btMod" style="background:rgba(0, 136, 204, 0.5); font-size:0.4vw;" title="Nouveau compte">
<span class ="fa fa-pencil" style="font-size:1vw;"></span></button> 

<!-- Bouton Liste des comptes par client-->
<a style="font-size:0.4vw; background:rgba(0, 136, 204, 0.7);" href="{{app.route('listeCp',{id:user.id})}}" class="btn btn-info" title="Liste des comptes">
<span class ="glyphicon glyphicon-th-list" style="font-size:1vw;"></span></a>

{%endif%}
</td>
</tr>
{% endfor%}
</table>
</div>    
</div>

在基于SymfonyLaravel中,您可以在命名路由中传递参数,如

<form 
method="GET" 
action="{{ app.route('getuser',['id' => $id ])}}"
>

...
</form>

问题是运行时user变量不存在

form class="form-horizontal" id="form3" action="{{ app.route('getuser',{'id':user.id})}}" method="get">

一个解决方案是为每个用户创建模式容器

{% for user in users %}
<div class="modal fade" data-user-id="{{ user.id }}" role="dialog" tabindex="-1">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button aria-label="Close" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Modifier Client</h4>
</div><!--FORMULAIRE -->
<div class="modal-body">
<!-- APPEL FONCTION -->
<form action="{{ app.route('getuser',{'id':user.id})}}" class="form-horizontal" method="get" name="form3">
<input name="id" type="hidden" value="">
<div class="form-group">
<label class="col-sm-2" for="nom">Nom</label>
<div class="col-sm-10">
<input class="form-control" name="nom" placeholder="Nom" type="text" value="{{user.nom}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="prenom">Prénom</label>
<div class="col-sm-10">
<input class="form-control" name="prenom" placeholder="Prénom" type="text" value="{{user.prenom}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="adresse">Adresse</label>
<div class="col-sm-10">
<input class="form-control" name="adresse" placeholder="Adresse" type="text" value="{{user.adresse}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="login">Login</label>
<div class="col-sm-10">
<input class="form-control" name="login" placeholder="Login" type="text" value="{{user.login}}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2" for="password">Mot de passe</label>
<div class="col-sm-10">
<input class="form-control" name="password" placeholder="Mot de passe" type="password" value="{{user.password}}">
</div>
</div><!-- archive caché-->
<input class="form-control" name="archive" placeholder="archive" type="hidden" value="{{user.archive}}"> <!-- acces caché-->
<div class="form-group">
<div class="cols-sm-10">
<select class="form-control" name="acces">
<option value="2">
Client Prive
</option>
<option value="3">
Client Pro
</option>
<option value="1">
Admin
</option>
</select>
</div>
</div>
</form>
</div><!--BOUTONS FERMER ET VALIDER DANS FORMULAIRE MODIFIER CLIENT-->
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" type="button">Fermer</button> <button class="btn btn-primary" type="button">Valider</button>
</div>
</div>
</div>
</div>
{% endfor %}

然后,您可以通过调整javascript 来显示正确的模式

$('.btMod').click (function(e){
e.preventDefault();
$('.modal[data-user-id="'+$(this).data('id')+'"]').modal({
show:true,
backdrop:'static'
});
});

侧注

您的代码生成了许多具有相同id的HTML元素,这是不正确的,并且在尝试引用这些id时会使您的JavaScript无法正常工作。我没有在上面的代码中编辑出这些id,但你肯定应该这样做。

最新更新