En esta parte del Tutorial de Laravel 5 integraremos un formulario de búsqueda al menú para poder realizar búsquedas entre los comentarios. Las búsquedas podrán ser realizadas por los usuarios autenticados e invitados, si en los resultados de búsqueda de un usuario autenticado aparece algún comentario suyo, entonces, le agregaremos las opciones de editar y eliminar.
El formulario lo integraremos al menú del layout "home.blade.php" ...
<form class="navbar-form navbar-left" role="search" action="{{url('home/searchredirect')}}"> <div class="form-group"> <input type="text" class="form-control" name='search' placeholder="Buscar ..." /> </div> <button type="submit" class="btn btn-default">Buscar</button> </form>
Este formulario será enviado a través del método get. La ruta definida en el action la utilizaremos para manejar el argumento "search" y crear una redirección hacia una ruta amigable.
A continuación crearemos las rutas en routes.php ...
Route::get('home/searchredirect', function(){ /* Nuevo: si el argumento search está vacío regresar a la página anterior */ if (empty(Input::get('search'))) return redirect()->back(); $search = urlencode(e(Input::get('search'))); $route = "home/search/$search"; return redirect($route); }); Route::get("home/search/{search}", "HomeController@search");
Observen como la primera ruta es la que se encuentra en el formulario de búsqueda, obtiene el argumento get "search" y crea una nueva ruta pasándole el valor del argumento, la ruta amigable está conectada al controlador HomeController y a una nueva acción llamada "search".
Agregaremos al controlador HomeController la siguiente clase para trabajar con la tabla "comments":
use App\Comments;
Código de la acción "search" ...
public function search($search){ $search = urldecode($search); $comments = Comments::select() ->where('comment', 'LIKE', '%'.$search.'%') ->orderBy('id', 'desc') ->get(); if (count($comments) == 0){ return View('home.search') ->with('message', 'No hay resultados que mostrar') ->with('search', $search); } else{ return View('home.search') ->with('comments', $comments) ->with('search', $search); } }
Como se puede ver en la acción obtenemos el valor del argumento "search" y guardamos los posibles comentarios en "$comments", la consulta de búsqueda la realizamos a través de la cláusula "LIKE". Si no se encuentran resultados se pasan dos variables a una nueva vista "search", la variable "message" es para mostrar un comentario de que no existen resultados y la variable "search" que guarda el valor de la búsqueda, de lo contrario, se pasan igualmente dos variables a la nueva vista, "comments" que contiene los comentarios y "search" que guarda el valor de la búsqueda.
Finalmente crearemos la vista "search.blade.php" ...
@extends('layouts.home') @section('content') <h3>Resultado de la búsqueda: {{$search}}</h3> @if (isset($message)) <div class='bg-warning' style='padding: 20px'> {{$message}} </div> @endif <hr /> @if (isset($comments)) <?php $modal = 0; foreach($comments as $comment): $user = App\User::select()->where('id', '=', $comment->id_user)->first(); ?> <div class="row"> <div class="col-md-1"> <img src='{{url($user->perfiles)}}' class='img-responsive' style='max-width: 60px' /> <strong>{{$user->name}}</strong> </div> <div class='col-md-6'> {{$comment->comment}} <br /> <i>Fecha: {{$comment->date}} · Hora: {{$comment->time}}</i> @if(isset(Auth::user()->id)) @if($comment->id_user == Auth::user()->id) <hr /> <!-- Botón que abre la ventana modal eliminar --> <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"> Eliminar </button> <!-- Ventana modal para eliminar --> <div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">¿Realmente quieres eliminar este comentario?</h4> </div> <div class="modal-body"> <form method="post" action="{{url('user/deletecomment')}}"> {{csrf_field()}} <input type="hidden" name="id_comment" value="{{$comment->id}}" /> <button type="submit" class="btn btn-danger">Eliminar</button> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button> </div> </div> </div> </div> <!-- Botón para abrir la ventana modal de editar --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"> Editar </button> <!-- Ventana modal editar --> <div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">Editar comentario</h4> </div> <div class="modal-body"> <form method="post" action="{{url('user/editcomment')}}"> {{csrf_field()}} <div class="form-group"> <textarea name="comment" rows="10" class="form-control">{{$comment->comment}}</textarea> </div> <input type="hidden" name="id_comment" value="{{$comment->id}}" /> <button type="submit" class="btn btn-primary">Editar</button> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button> </div> </div> </div> </div> <?php $modal++ ?> @endif @endif </div> </div> <hr /> <?php endforeach ?> @endif @stop
Ahora prueben a realizar búsquedas.
No hay comentarios:
Publicar un comentario