Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Incluir PHP en Symfony2

20 de julio de 2015

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

#1

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

20 julio 2015, 16:29
#2

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

20 julio 2015, 16:34
#3

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

20 julio 2015, 16:43
#4

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

20 julio 2015, 16:49
#5

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

20 julio 2015, 16:53
#6

Listo, lo implementaré espero salga, cualquier duda lo vuelvo a molestar.

@piocarluis

20 julio 2015, 16:54
#7

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>&nbsp;</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

20 julio 2015, 18:10
#8

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

20 julio 2015, 20:23