laravel 5.6 request y formularios

podemos usar la funcion request en nuestras vistas

<h1>{{ request()->url()}}</h1>
   <header>
    <?php
        function activeMenu($url){
        return request()->is($url) ? 'active':'';
        }
    ?>
<nav>

<a href="{{ route('home') }}"  class ="{{ activeMenu('/') }}">home</a>
<a href="{{ route('saludo','israel') }}"  class ="{{ activeMenu('saludo/israel') }}">saludo</a>

</nav>

donde

 request()->url() devuelve la url actual
request()->is($url) verifica si el parametro corresponde a la url actual


formularios

<form method="POST" action="contactar">
<label for="nombre">
nombre
<input type="text" name="nombre">
</label>
<label for="email">
email
<input type="text" name="email">
</label>
<label for="mensaje">
mensaje
<textarea name="mensaje"></textarea>
</label>

<input type="submit" name="enviar" value="enviar">

</form>

entonces en web.php

Route::post('contactar', ['as'=>'contactar','uses'=>'PagesController@contactar']);


en el controller podemos inyectar el valor del request a traves del constructor

protected $request;

public function __construct(Request $request){
  $this->request = $request;
}

public function contactar() {
  return $this->request->all(); //trae los datos del formulario
}

nota: por ahora para evitar restricciones de midleware
vamos a app/http/middleware/verifyCsrfToken.php

/**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
        'contactar'
    ];

en la vista se mostrarn en formato json los datos enviados por el formulario

{"nombre":"rene","email":"rene@mail.com","mensaje":"kekekeke","enviar":"enviar"}

en el controlador
el request se puede inyectar a la funcion a traves de un parametro,
entonces borramos el constructor

public function contactar(Request $request) {
  return $request->all();
}

y el resultado sera el mismo.

...
en el siguiente codigo:

if($request->has('nombre')){//verifica si existe el campo
  return 'tiene nombre: '.$request->input('nombre');
}else{
  return 'no existe el campo nombre';
}


 $request->has('nombre'))//verifica si se ha enviado un campo llamado 'nombre'
$request->input('nombre') // obtiene el valor del campo 'nombre'


para validar los campos de un formulario podemos hacerlo en el controlador 
armando una estructura de reglas que si no se cumplen me regresa a la vista

por ejemplo:

$this->validate($request,
      ['nombre'=>'required',
        'email' =>'required | email',
       'mensaje' => 'required | min:5'
                ]
     );

y en la vista

<label for="nombre">
  nombre
  <input type="text" name="nombre" value="{{ old('nombre') }}">
  {!! $errors->first('nombre','<span  class=error>:message</span>') !!}
 </label>
 <label for="email">
  email
  <input type="text" name="email" value="{{ old('email') }}">
  {!! $errors->first('email','<span  class=error>:message</span>') !!}
 </label>
 <label for="mensaje">
  mensaje
  <textarea name="mensaje">{{ old('mensaje') }}</textarea>
  {!! $errors->first('mensaje','<span  class=error>:message</span>') !!}
 </label>

donde
old('nombre')
imprime el ultimo valor ingresado en el campo, asi no lo pone en blanco si regresa a la vista por algun error. Notese que para el textarea la sentencia se pone dentro de los tags

{!! $errors->first('email','<span  class=error>:message</span>') !!}

imprime el mensaje de error bajo el formato 
<span  class=error>:message</span> 
notar que se usa {!! para que interprete el html


Cambiar el lenguaje de los mensajes:

en resources/lang

crear la carpeta con el lenguaje que queremos usar por ejemplo 'es' (por default existe 'en' (english))
y los archivos que necesitamos.

estos archivos los podemos obtener desde aqui https://github.com/caouecs/Laravel-lang/tree/master/src


y en config/app.php

buscar la linea 
'locale' => 'en',
y cambiarla por
'locale' => 'es',



crear un objeto Form request para manejar la validacion

en la consola

php artisan make:request ContactoRequest

se creara en app/http/requests/

el archivo ContactoRequest.php

editamos la funcion rules y le agregamos las mismas reglas de validacion que teniamos:

  public function rules()
    {
        return [
            'nombre'=>'required',
            'email' =>'required | email',
            'mensaje' => 'required | min:5'
        ];
    }

y en el controller ya las podemos quitar y el parametro que inyectamos de Request
ahora debe ser del tipo ContactoRequest

use App\Http\Requests\ContactoRequest;

class PagesController extends Controller
{
public function contactar(ContactoRequest $request) { return $request->all(); }

nota: en ContactoRequest.php

editar el metodo authorize para que devuelva true
public function authorize() { return true; }



No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable