Tengo un formulario en Twig que es para hacer cambio de contraseña. Ese formulario tiene un action
que es una página PHP donde hago los procesos que quiero ejecutar para los cambios de contraseñas. Pero cuando doy el botón submit
del formulario me direcciona a la página PHP procesar
pero me sale error porque me dice que no encuentra esa ruta. ¿Entonces también tengo que agregar esa página en el routing? ¿Y si agrego en el routing también tiene que tener el controlador y todo lo demás?
Respuestas
Mi pregunta sería: ese código PHP que mencionas, ¿debe estar en un archivo PHP separado de la aplicación Symfony y es "intocable"? ¿O podrías integrar ese código PHP en la aplicación Symfony como servicio?
@javiereguiluz
Lo que hace la página PHP es obtener los datos via POST para hacer validaciones para hacer el cambio de contraseña, está incluido en la aplicación.
@piocarluis
Si el código PHP que mencionas es pequeño, te serviría con crear un controlador muy sencillo. Así que respondiendo a tu pregunta, sí que debes crear una ruta y un controlador para asociar la URL procesar
con el código que quieres ejecutar.
@javiereguiluz
Yo tengo ya un formulario creado, entonces como le paso la información de los input a el controlador de procesar
para ahí en ese controlador hacer las validaciones mediante if para hacer el update de mi tabla
@piocarluis
En tu controlador tienes que añadir un objeto de tipo Request
para que Symfony te inyecte automáticamente el objeto que representa a la petición. Después, usa el metodo get
para obtener el valor:
use Symfony\Component\HttpFoundation\Request; public function miControladorAction(Request $request) { // si tu petición usa GET $valor = $request->query->get('nombre_variable'); // si tu petición usa POST $valor = $request->request->get('nombre_variable'); }
@javiereguiluz
Listo, lo implementaré espero salga, cualquier duda lo vuelvo a molestar.
@piocarluis
Yo tengo un controlador que me dirige a una pagina cambioContrasena.html.twig
. Ahí tengo un formulario HTML que he creado de esta manera:
<body > <form method="post" name="cambioContrasena" action="procesarCambioContrasena.php"> <p> <h2 class="titulo">Cambio de Contraseña {{ app.session.get('id') }}</h2></p> <hr/> <table width="325" border="0"> <tr> <td class="labelBold1">Contraseña actual</td> <td><label for="txtContrasenaActual"></label> <input type="password" name="txtContrasenaActual" id="txtContrasenaActual" /></td> </tr> <tr> <td class="labelBold1">Contraseña nueva</td> <td><label for="txtContrasenaNueva"></label> <input type="password" name="txtContrasenaNueva" id="txtContrasenaNueva" /></td> </tr> <tr> <td class="labelBold1">Confirmar contraseña</td> <td><label for="txtConfirmarContrasena"></label> <input type="password" name="txtConfirmarContrasena" id="txtConfirmarContrasena" /></td> </tr> <tr> <td> <input type="hidden" name="idUsuario" id="idUsuario" value="{{app.session.get('id')}}"/></td> </tr> <tr> <td align="right"><input type="submit"></td> </tr> </table> <p> </p> </form> </body>
¿Cómo envío los datos por el metodo POST al controlador procesarCambioContrasenaAction
que sería donde recibo los datos mediante el ejemplo que me puso arriba? Mi pregunta es cómo direcciono los datos al controlador que procesa el cambio de contraseña, porque en el formulario tengo un action="procesarCambioContrasena.php"
@piocarluis
Lo primero es asociar una URL al controlador. Eso se puede hacer de muchas maneras, pero una de las más sencillas es añadir la anotación @Route
, con lo que también podrás dar un nombre a la ruta:
use Symfony\Component\HttpFoundation\Request; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class DefaultController extends Controller { /** * @Route("/", name="cambiar_contrasena") */ public function indexAction(Request $request) { $passwordAnterior = $request->request->get('txtContrasenaActual'); $passwordNuevo = $request->request->get('txtContrasenaNueva'); // cambiar la contraseña ... return $this->redirectToRoute('homepage'); } }
Después, en tu plantilla ya puedes decirle al formulario que envíe los datos a la URL asociada a una determinada ruta. Para ello, usa la función path
de Twig:
<form method="post" name="cambioContrasena" action="{{ path('cambiar_contrasena') }}"> ... </form>
@javiereguiluz