jueves, 26 de abril de 2018

Crear un blog personal con Laravel - Parte 5

   



Creacion de un Blog Personal Con Laravel 5.6

Guardar una publicación de blog

Ahora necesitamos un controlador más para nuestras publicaciones de blog. Entonces, crea un archivo en la carpeta app/http/controller/, que se llamara ArticuloContoller.php. El código final del controlador debe ser el siguiente:

(Puedes crear el contralador usando el comando php artisan make:controller ArticuloController)


<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Articulo;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use View;
class ArticuloController extends Controller
{
//
public function getIndex(){
$articulos = Articulo::with('Autor')-> orderBy('id', 'DESC')->paginate(5);
return View::make('index')->with('articulos',$articulos);
}
public function getAdmin(){
return View::make('agregarArticulo');
}
public function crearArticulo(){
Articulo::create(array(
'titulo' => Input::get('titulo'),
'contenido' => Input::get('contenido'),
'idAutor' => Auth::user()->id
));
return Redirect::route('index');
}
}

Asignando publicaciones de blog a los usuarios

La función crearArticulo() procesa la nueva solicitud de creación de publicación de blog en la base de datos. Como puede ver, podemos obtener la identificación del autor con un método mencionado anteriormente:

Auth::user()->id

Con este método, podemos asignar al usuario actual el articulo creado. Como verá, tenemos un nuevo método en la consulta:

Articulo::with('Autor')->

Si lo recuerda, hemos definido una función pública Autor() en nuestro modelo de Artículos:


public function Autor(){

        return $this->belongsTo('App\User','idAutor');

    }

El método belongsTo() es una función Eloquent para crear relaciones entre tablas. Básicamente, la función necesita una variable requerida y una variable opcional. La primera variable (requerida) define el Modelo objetivo. La segunda variable opcional es definir la columna fuente de la tabla del modelo actual. Si no define la variable opcional, la clase Eloquent busca en la columna thetargetModelName_id de nombre de destino. En la tabla de publicaciones, almacenamos los ID de los autores en la columna_id_original, no en la columna denominada ID_usuario. Debido a esto, necesitamos definir una segunda variable opcional en la función. Con este método, podemos pasar nuestras publicaciones de blog y toda la información de sus autores al archivo de plantilla. Puede pensar en el método como una especie de método de unión SQL.

Cuando queremos utilizar estas funciones de relación en consultas, podemos llamarlas fácilmente de la siguiente manera:

Libro::with('Categoria')->with('Autor')->get();

Es fácil administrar los archivos de plantilla blade con menos variables. Ahora solo tenemos una variable para pasar el archivo de plantilla, que se combina con todos los datos necesarios. Por lo tanto, necesitamos el segundo archivo de plantilla para enumerar nuestras publicaciones de blog. Esta plantilla funcionará en la interfaz de nuestro blog.

Listado de Articulos

Laravel pasa datos al archivo de plantilla como una matriz. Entonces, necesitamos usar el ciclo para analizar los datos en el archivo de la plantilla. También podemos usar un bucle foreach en los archivos de plantilla. Entonces crea un archivo index.blade.php en la capeta de vistas que se encuentra en la ruta ruta resourses/views el nombre del archivo sera  index.blade.php. El código debería verse de la siguiente manera.

resourses/views/index.blade.php
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Blog CesarGI</title>
</head>
<body>
<div>
<header>
<h1>
<a href="/">Mi Blog Cesar GI</a>
</h1>
<p>Bienvenidos a mi primer Blog</p>
</header>
<nav>
<ul>
<li><a href="/">INICIO</a></h4></li>
<li><a href="/admin">ADMIN</a></h4></li>
<li><a href="/logout">CERRAR SESION</a></h4></li>
</ul>
</nav>
<section id="principal">
<section id="contenido">
@foreach($articulos as $articulo)
<article>
<h2>{{$articulo->titulo}}</h2>
<p>{{$articulo->contenido}}</p>
<p>
<small>Posted by
<b>{{$articulo->Autor->name}}</b> at
<b>{{$articulo->created_at}}</b>
</small>
</p>
</article>
@endforeach
</section>
{{$articulos->links()}}
</section>
<!--FOOOTER-->
<footer>
<section id="seccion-footer">
<section >
<aside>
<h4>DERECHOS RESERVADOS PARA "CESAR GI" AUTOR DE <br>
<a href="http://www.codigojavalibre.com/">WWWW.CODIGOJAVALIBRE.COM</a></h4>
</aside>
</section>
</section>
</footer>
<!--FIN FOOOTER-->
</div>
</body>
</html>

Vamos a repasar el código. Hemos utilizado un bucle foreach dentro del archivo de plantilla para analizar todos los datos de los  artículos del blog. Además, vemos el uso combinado de datos de autor en el ciclo foreach. Como puede recordar, obtenemos la información del autor con el método belongsTo () en el lado del modelo. El análisis completo de datos relacionales se realiza dentro de una matriz, que se denomina nombre de función de relación. Por ejemplo, si tuviéramos una segunda función de relación, que se llama Categorías(), la consulta sería algo así como en el lado del controlador:

$libros = Libro::with('Autor')-> with('Categoria')->orderBy('id', 'DESC')->get();

El ciclo foreach se vería de la siguiente manera:


@foreach($libros as $libro)

<article>
<h2>{{$libro->titulo}}</h2>
<p>Autor: <b>{{$libro->Autor->name}}</b></p>
<p>Categoria: <b>{{$libro->Categoria->name}}</b></p>
</article>

@endforeach


Paginar el contenido

El método get () de Eloquent, que hemos utilizado en el lado del controlador en la consulta Eloquent, recupera todos los datos de la base de datos con una condición dada. A menudo necesitamos paginar el contenido para una interfaz fácil de usar y tener menos cargas de páginas y optimizaciones. La clase Eloquent tiene un método útil para hacer esto rápidamente, que se llama paginate(). Este método obtiene los datos paginados y genera enlaces de paginación en la plantilla con solo una línea de código. Abra el archivo app/controllers/ArticuloController.php y cambie la consulta de la siguiente manera:


$articulos = Articulo::with('Autor')-> orderBy('id', 'DESC')->paginate(5);

El método paginate() pagina los datos con el valor numérico dado. Por lo tanto, en cada paginación apareceran 5 publicaciones de artículos. También tenemos que cambiar nuestra plantilla para mostrar enlaces de paginación. Abra app/views/index.blade.php y agregue el siguiente código después del bucle foreach:

{{$articulos->links()}}

La sección en la plantilla, que tiene el ID como "principal", debería verse de la siguiente manera:


<section id="principal">
<section id="contenido">
@foreach($articulos as $articulo)
<article>
<h2>{{$articulo->titulo}}</h2>
<p>{{$articulo->contenido}}</p>
<p>
<small>Posted by
<b>{{$articulo->Autor->name}}</b> at
<b>{{$articulo->created_at}}</b>
</small>
</p>
</article>
@endforeach
</section>
{{$articulos->links()}}
</section>

La función links () generará enlaces de paginación automáticamente, si hay suficientes datos para paginar. De lo contrario, la función no muestra nada.

Terminando


En este tutorial, hemos creado un blog simple con las funciones incorporadas de Laravel y el controlador de base de datos Eloquent. Hemos aprendido cómo paginar los datos y el mecanismo de relación de datos básicos de Eloquent. También hemos cubierto el mecanismo de autenticación integrado de Laravel. En los siguientes capítulos, aprenderemos cómo trabajar con tablas más complejas y datos relacionales.


Y listo tendría su blog básico, para iniciar sesión usamos el usuario que creamos en la migracion:
Emal: admin@gmail.com
Password: admin

Espero les guste y seguiré avanzando este blog hecho en Laravel.

Indice del mini curso



Cesar GI

About Cesar GI

Lo que me importa es poder enseñar lo poco que se, por que asi como yo aprendo leyendo gracias a las personas que comparten sus conocimiento yo tambien quiero ayudar a la comunidad en español aportando lo poco que he aprendido hasta el momento.