Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Como procesar formularlo en laravel 4

Estas en el tema de Como procesar formularlo en laravel 4 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola amigos espero me puedan ayudar, Me encuentro iniciando a trabajar con laravel 4 y tengo un formulario hasta ahi sin problemas, el inconveniente es ...
  #1 (permalink)  
Antiguo 05/09/2013, 15:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Como procesar formularlo en laravel 4

hola amigos espero me puedan ayudar,

Me encuentro iniciando a trabajar con laravel 4 y tengo un formulario hasta ahi sin problemas, el inconveniente es para procesar ese formulario , en el input se ingresa un email y tengo que consultar con la base de datos y mostrar en una vista el email y un letro si esta en base o no esta en base

formulario
Código PHP:
Ver original
  1. {{ Form::open(array('url' => 'recuperar')) }}
  2.  
  3. {{ Form::label('correo', 'Correo') }}
  4.                 <!--equivale a <label for="username">Nick</label>-->
  5.  
  6.                 {{ Form::text('correo', Input::old('correo')) }}
  7.                
  8.                
  9.                 {{ Form::submit('Recuperar Contraseña', array("class" => "button expand round")) }}
  10. {{ Form::close() }}


el problema que tengo es para construir en el routes.php
Código PHP:
Ver original
  1. Route::post('recuperar', array('before' => 'csrf', function()
  2. {
  3.     $correo = array(
  4.     "correo"    =>        Input::get("correo")
  5.     );
  6.     //var_dump($correo);
  7.     return View::make("inicio", array("correo" => $correo));
  8. }));


y en la vista tengo
Código PHP:
Ver original
  1. {{ $data->correo }}

obtengo este error
Cita:
Trying to get property of non-object

Última edición por Montes28; 05/09/2013 a las 16:14
  #2 (permalink)  
Antiguo 05/09/2013, 21:54
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como procesar formularlo en laravel 4

amigos he avansado un poco , les comento lo que hice:

en routes.php

Código PHP:
Ver original
  1. Route::post('recuperar', array('before' => 'csrf', function()
  2. {
  3. //obtengo el correo que envien en el input
  4. $data = Input::get('correo');
  5.  
  6. //consulto en la base de datos si el correo pertenece a alguna persona
  7. $data2 = DB::table('users')->where('correoinstitucional', $data)->first();
  8.  
  9. return View::make("inicio", array("data2" => $data2));
  10. }));

en la vista inicio.blade.php
Código PHP:
Ver original
  1. {{ $data2->correoinstitucional  }}

tengo las siguientes pregunta:

si envio el input vacio o con un email que no exista en la base de datos la variable $data2 es NULL como muestro en la vista un aviso de que no se envio el email?
  #3 (permalink)  
Antiguo 07/09/2013, 11:09
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 9 meses
Puntos: 27
Respuesta: Como procesar formularlo en laravel 4

Código PHP:
Ver original
  1. // inicio.blade.php
  2.  
  3. @if($data2)
  4.     El correo es: {{ $data2->correoinstitucional  }}    
  5. @else
  6.         No hay datos
  7. @enif
  #4 (permalink)  
Antiguo 07/09/2013, 22:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como procesar formularlo en laravel 4

eternoaprendiz gracias por responder lo que me indicas funciona perfecto en la vista pero NO en el route.php ,lo que pretendo es en un formulario capturar un email consultar si ese correo existe en la base de datos se envia un correo electronico si no se mostara en pantalla Ese correo no esta registrado en el sistema

este es mi codigo

Código PHP:
Ver original
  1. Route::get('recuperar', function()
  2. {
  3.     return View::make('recuperacion');
  4. });
  5.  
  6.  
  7. Route::post('recuperar', array('before' => 'csrf', function()
  8. {
  9.  
  10.     $data = Input::get('correo');
  11.     $data2 = DB::table('users')
  12.     ->select('email')
  13.     ->where('email', $data)->first();
  14.     //var_dump($data2);
  15.      Mail::send("send-email", $data2, function($message)
  16.     {
  17.         $message->from('[email protected]', 'desde');
  18.         $message->to('[email protected]', 'para')->subject('Recuperación Contraseña');
  19.     });
  20.    
  21.    
  22.     return View::make("inicio", array("data2" => $data2));
  23.  
  24. }));

y obtengo este error
Cita:
Argument 2 passed to Illuminate\Mail\Mailer::send() must be of the type array, object given, called in /var/www/html/volcano/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 183 and defined
  #5 (permalink)  
Antiguo 08/09/2013, 01:30
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 9 meses
Puntos: 27
Respuesta: Como procesar formularlo en laravel 4

Pues usa el "if" en el controlador (en tu caso route).

Código PHP:
Ver original
  1. $data = Input::get('correo');
  2.     $data2 = DB::table('users')
  3.     ->select('email')
  4.     ->where('email', $data)->first();
  5.  
  6. if ($data2) {
  7.           Mail::send("send-email", $data2, function($message)
  8.           .....
  9. }
  10.  
  11. return View::make("inicio", array("data2" => $data2));

La vista inicio.blade.php siempre se mostrará, pero en función de "data2" mostrará un mensaje u otro.

El correo solo se envía si $data2 no está vacío.

No tiene más misterio. Es simple programación, no tiene nada que ver con Laravel.
  #6 (permalink)  
Antiguo 08/09/2013, 07:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como procesar formularlo en laravel 4

eternoaprendiz gracias por responder , hice lo que me indicas pero obtengo un error

Código PHP:
Ver original
  1. Route::get('recuperar', function()
  2. {
  3.     return View::make('recuperacion');
  4. });
  5.  
  6.  
  7. Route::post('recuperar', array('before' => 'csrf', function()
  8. {
  9.     $data = Input::get('correo');
  10.     $data2 = DB::table('users')
  11.     ->select('email')
  12.     ->where('email', $data)->first();
  13.  
  14.  if ($data2) {
  15.            
  16.      Mail::send("send-email", $data2, function($message)
  17.     {
  18.         $message->from('[email protected]', 'desde');
  19.         $message->to('[email protected]', 'para')->subject('Recuperación Contraseña');
  20.     });
  21.    
  22.     }
  23.    
  24.     return View::make("inicio", array("data2" => $data2));
  25.  
  26. }));

este es el error que obtengo
Cita:
Argument 2 passed to Illuminate\Mail\Mailer::send() must be of the type array, object given, called in /var/www/html/volcano/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 183 and defined
  #7 (permalink)  
Antiguo 08/09/2013, 10:56
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 9 meses
Puntos: 27
Respuesta: Como procesar formularlo en laravel 4

Argument 2 passed to Illuminate\Mail\Mailer::send() must be of the type array, object given

El segundo parámetro de send() debe ser un array, que contiene los datos para el contenido del correo. El funcionamiento es equivalente al de View:

Código PHP:
Ver original
  1. View::make(PLANTILLA, DATOS) -> DATOS = array("variable" => "valor", ...)
  2.  
  3. Mailer::send(PLANTILLA, DATOS) -> DATOS = array("variable" => "valor", ...)

Así que si quieres pintar en el "body" del correo la dirección email del usuario, tendrías que hacer algo así:

Código PHP:
Ver original
  1. Mailer::send('send-email', array('correo' => $data2->email))
  2.  
  3. // send-email.blade.php
  4.  
  5. Tu correo es {{ $correo }}
  #8 (permalink)  
Antiguo 08/09/2013, 12:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como procesar formularlo en laravel 4

eternoaprendiz gracias por responder , hice lo que me indicas pero sigue sin funcionar

Código PHP:
Ver original
  1. Route::get('recuperar', function()
  2. {
  3.     return View::make('recuperacion');
  4. });
  5.  
  6.  
  7. Route::post('recuperar', array('before' => 'csrf', function()
  8. {
  9.  
  10.     $data = Input::get('correo');
  11.     $data2 = DB::table('users')
  12.     ->select('email')
  13.     ->where('email', $data)->first();
  14. if ($data2) {
  15.            
  16.      
  17.       Mail::send("send-email", array('correo' => $data2->email));
  18.    
  19.     }
  20.    
  21.     return View::make("inicio", array("data2" => $data2));
  22.  
  23. }));

y este es el error que obtengo
Cita:
Missing argument 3 for Illuminate\Mail\Mailer::send(), called in /var/www/html/volcano/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 180 and defined
que estoy haciendo mal?

Última edición por Montes28; 08/09/2013 a las 12:56
  #9 (permalink)  
Antiguo 08/09/2013, 13:46
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 9 meses
Puntos: 27
Respuesta: Como procesar formularlo en laravel 4

http://laravel.com/docs/mail#basic-usage

Como lo tenías antes estaba bien:

Código PHP:
Ver original
  1. Mail::send("send-email", $data2, function($message)
  2.     {
  3.         $message->from('[email protected]', 'desde');
  4.         $message->to('[email protected]', 'para')->subject('Recuperación Contraseña');
  5.     });

Pero $data2 debe ser un array como el segundo parámetro de View::make. Lee la documentación y trata de comprender lo que dice, no te limites a copiar y pegar.


Cita:
The Mail::send method may be used to send an e-mail message:

Mail::send('emails.welcome', $data, function($message)
{
$message->to('[email protected]', 'John Smith')->subject('Welcome!');
});
The first argument passed to the send method is the name of the view that should be used as the e-mail body. The second is the $data that should be passed to the view, and the third is a Closure allowing you to specify various options on the e-mail message.
  • El primer argumento es una vista (plantilla blade) que se usará en el cuerpo del correo.
  • El segundo argumento es un array que se le pasa a la vista.
  • El tercer argumento es una función anómina que permite configurar varias opciones del correo.
  #10 (permalink)  
Antiguo 08/09/2013, 14:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como procesar formularlo en laravel 4

eternoaprendiz gracias por responder , solo tengo una pregunta y la siguiente:

el remitente lo tengo en $data2 y en un array
Código PHP:
Ver original
  1. array('correo' => $data2->email)

como lo coloco en el siguiente codigo en la parte de destinatario?

Código PHP:
Ver original
  1. Mail::send("send-email",  array('correo' => $data2->email), function($message)
  2.     {
  3.         $message->from('[email protected]', 'desde');
  4.         $message->to('destinatario', 'para')->subject('Recuperación Contraseña');
  5.     });
  #11 (permalink)  
Antiguo 08/09/2013, 15:35
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 9 meses
Puntos: 27
Respuesta: Como procesar formularlo en laravel 4

Esa es una buena pregunta.

Código PHP:
Ver original
  1. $destinatario = $data2->email;
  2.  
  3. Mail::send("send-email",  array('correo' => $data2->email), function($message) use ($destinatario)
  4.     {
  5.         $message->from('[email protected]', 'desde');
  6.         $message->to($destinatario, 'para')->subject('Recuperación Contraseña');
  7.     });

Fíjate que la variable $destinatario está inicializada fuera de la función anónima.

Para poder usar la variable dentro de la función, añadimos, tras function($message) use($otras_variables).

Otro ejemplo:

Código PHP:
Ver original
  1. $dato = 10;
  2.  
  3. $buscar = function() {
  4.         echo $dato; // Error: variable no definida
  5. }
  6.  
  7. $buscar = function() use($dato) {
  8.         echo $dato; // 10
  9. }

Etiquetas: laravel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:22.