Editando vista

Lo primero que vamos a ver es como crear Posts, para ello tenemos la vista edit-post.blade.php la cual la vamos usar simultáneamente para crear o modificar un post, vamos a ver como crearlo primero. Nos vamos al PostController y vamos al método llamado getEditpost($id = null):

public function getEditpost($id = null) {
       return "Editar Post, ID para saber cual es.";
}

 

Por el momento vemos que le podemos pasar como parámetro una ID, la cual será la ID de un post en concreto, vamos a utilizar esa ID, y si no nos pasan ninguna ID es que no queremos editar ningún post, si no que lo queremos crear. Para crear un post este método no tiene que hacer nada en particular, solo retornar la vista edit-post para ver el formulario:

public function getEditpost($id = null) {
   
   if ($id == null)
       return view('edit-post');
}

 

Una vez tengamos este código, vemos que si vamos a la ruta post/editpost nos retorna la vista:

Vamos a seguir editando el método getEditpost, para que si hay una ID nos retorne ese post en concreto y poder editarlo. Vamos a hacer uso del modelo Post para buscar el post con esa ID en concreto y pasar los datos del post a la vista

public function getEditpost($id = null) {
   
   if ($id == null)
       return view('edit-post');
   else {
       $data['post'] = Post::find($id);
       if($data['post'] == null)
           return 'El post no existe';
       
       return view('edit-post', $data);
   }
}

 

Para poder usar el modelo Post debemos «impotar» la clase, para ello nos fijamos en las primeras lineas del archivo, donde hay el namespace y unos use, use se usa para incluir clases a nuestro archivo, para incluir la clase Post debemos hacer uso del use y el directorio del Modelo:

use App\Models\Post;

 

Una vez tengamos configurado el controlador de la vista, vamos a configurar la vista por si tenemos que mostrar el post o crear uno de nuevo:

<form action="{‌{ url('post/savepost') }}" method="POST">
   {‌!! csrf_field() !!}
   @if(isset($post))
       <input type="hidden" name="post_id" value="{‌{ $post->id }}">
   @endif
   
   <label for="title">Título</label>
       <input type="text" name="title" id="title" class="form-control" placeholder="Título..." value="{‌{ isset($post) ? $post->title : '' }}">
   <label for="publish_date">Fecha de publicacion</label>
       <input type="date" name="publish_date" id="publish_date" class="form-control" placeholder="" value="{‌{ isset($post) ? $post->publish_date : '' }}">
   <label for="resume">Resumen</label>
       <textarea type="text" name="resume" id="resume" class="form-control" placeholder="Resumen..." rows="3" maxlength="300">{‌{ isset($post) ? $post->resume : '' }}</textarea>
   <label for="description">Descripción</label>
       <textarea type="text" name="description" id="description" class="form-control" placeholder="Descripcion..." rows="7">{‌{ isset($post) ? $post->description : '' }}</textarea>
   <label for="title">Publicado?</label>
       <select name="status" id="status" class="form-control">
           <option value="0" {‌{ (isset($post) && $post->status == 0)  ? 'selected' : '' }}>NO</option>
           <option value="1" {‌{ (isset($post) && $post->status == 1)  ? 'selected' : '' }}>SI</option>
       </select>
   <input type="submit" class="btn btn-success" value="Guardar">
</form>

 

Senzillamente añadimos:

  1. Si existe un post (es decir estamos editando un post) ponemos un campo oculto en el formulario para identificar el post.
  2. En los valores de los input añadimos un IF inline el cual si existe un post nos printa el texto para editar los campos.

Guardando / Creando post

Una vez configurada la vista, vamos a guardar el post o crear uno de nuevo, para ello tenemos el método postSavepost (method=POST en el formulario, recordad!). Lo primero que hay que hacer es diferenciar si es un nuevo post o estamos editando uno, para ello tenemos el campo oculto post_id, al estar haciendo uso de formularios y datos, tenemos que incluir una clase llamada Input.

use Input;

 

La clase Input tiene un método llamado all(), el cual nos retorna un array de todos los datos enviados por esa petición, en este caso por Post:

Input::all();

 

Si enviamos el formulario retorna:

(_token es una string que utiliza laravel internamente para validar las peticiones)

Ya tenemos los datos que recibimos por POST, ahora tenemos que hacer uso del modelo Post para crear el post en la BD:

public function postSavepost() {
   $input = Input::all();
   $post = new Post();
   $post->title = $input['title'];
   $post->resume = $input['resume'];
   $post->description = $input['description'];
   $post->publish_date = $input['publish_date'];
   $post->status = $input['status'];
   $post->save(); // Guarda el objeto en la BD
   return "Post guardado";
}

 

Hacemos la prueba, rellenamos el formulario y se nos crea el post:

Vamos a la url https://www.magarrent.com/blog/public/post/editpost/1 para ver si podemos editar el post con esa ID y si los campos que nos rellena son correctos:

Bien, ahora hemos hecho la parte para crear el Post, pero nos falta poder guardar el que estamos editando, para ello, tenemos que saber si estamos editando o no un post, si recibimos el post_id o no, si recibimos el post_id, tenemos que hacer lo mismo que para crear el post, lo único que va a cambiar es que no crearemos un objeto nuevo si no que cogeremos el existente:

public function postSavepost() {
   $input = Input::all();
   if(isset($input['post_id'])) {
       $post = Post::find($input['post_id']);
   } else {
       $post = new Post();
   }
   $post->title = $input['title'];
   $post->resume = $input['resume'];
   $post->description = $input['description'];
   $post->publish_date = $input['publish_date'];
   $post->status = $input['status'];
   $post->save(); // Guarda el objeto en la BD
   return "Post guardado";
}

 

Eliminando Posts

Una vez hemos aprendido a crear y modificar Posts, eliminarlos es muy senzillo, solo tenemos que buscar el post, comprobar que existe y eliminarlo:

public function getDeletepost($id) {
   $post = Post::find($id);

   if($post == null)
       return "No existe este post";
   else
       $post->delete();
}

 

Solo tenemos que acceder a la ruta https://www.magarrent.com/blog/public/post/deletepost/1 para eliminarlo.