Bueno yo lo haría de la siguiente manera, basándome en lo que tienes en tu plantilla twig. Este código iria al final de la plantilla, y se asume que usas jquery 3.*
Código:
{% block javascript %}
{{ parent() }}
<script type="text/javascript">
$("table.table.table-striped.table-bordered.table-hover tbody").on('click', 'a.btn.btn-info.active', function(e){
e.preventDefault();
var anclaGuardar=$(this);
var ocNumeroValor=$(anclaGuardar).parents('tr').find("#oc_numero").val();
$.ajax({
type:'PUT',
url: $(anclaGuardar).attr('href'),
data: {'oc_numero': ocNumeroValor},
beforeSend: function(){
//indocarle al usuario de alguna manera el inicio de la peticion ajax
}
}).done(function(data){
// el parametro data contiene la respuesta del controlador symfony, hacer algo con el parametro.
alert(data);
}).fail(function(jqXHR){
//se ejecuta cuando la peticion falla
alert(jqXHR.responseText);
});
});
</script>
{% endblock %}
Si emplearas jquery inferior a 3, cambiar las promesas done y fail por success y error como lo indica la documentacion de la funcion ajax de jquery.
Ademas, le agregaria una clase xxx a los vinculos que sirven como boton Guardar para que sea mas sencillo poder obtenerlos; asi como a la tabla tambien le pondria un id, con el mismo fin.
En el controlador obtendras los dos parametros desde el objeto $request, es decir el id del registro que forma parte del routing y el valor del campo detexto,enviado como parametro de la peticion ajax. Puedes tsmbien en el controlador veroficar que la peticion se haga via ajax, por el metodo PUT y verificar los permisos del usuario.
Tal vez tenga errores en los selectores, pero esa es la idea de la solución. Espero te sirva de punto de partida. No creo sea necesario tener un formulario para este caso puntual.