<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">
<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