Está en la página 1de 38

FRAMEWORKS

DANNA LISETH DUEÑAS ANGULO


DIVA LIZE RAMOS TORRES
STEVEN MAURICIO ESCOBAR ARISTIZABAL

FERNEY OSMA

UNIVERSIDAD DEL PACIFICO


INGENIERIA DE SISTEMAS
BUENAVENTURA – VALLE
2019
INTRODUCCIÓN

Las paginas web se han convertido, con el tiempo, en excelentes herramientas de


venta y proyección de cualquier tipo de negocio, tomando cada vez mas importancia
en el desarrollo de estas nuevas tecnologías para la comunicación y es la
herramienta de comunicación a la que todos aseguran un mejor futuro.
Según Wikipedia, una página web “es un documento o información electrónica
capaz de contener texto, sonido, video, programas, enlaces imágenes y muchas
otras cosas, adaptadas para la llamada World Wide Web o (WWW)”.
Existen dos facetas fundamentales en el desarrollo de una página web, el front-end
y el bak-end.
En desarrollo front-end trabaja del lado del cliente, en el navegador, es decir, lo que
el usuario observa y trabaja con tres tecnologías que son HTML, CSS y JavaScript.
El desarrollo back-end trabaja del lado del servidor, detrás del escenario, es decir,
lo que el usuario final no puede observar, existen una gran cantidad de lenguajes
de programación que trabajan del lado del servidor tales como: ASP.NET, PHP,
Ruby, Python, etc.
La tecnología se mueve un ritmo vertiginoso y año tras año aparecen nuevas
herramientas para el desarrollo de Software que nos simplifican el trabajo, debido a
la demanda actual y el poco tiempo para la entrega de proyectos aparecen utilidades
que cubren estos problemas que son muy importantes solucionarlos, un Framework
nos resuelve estos y muchos otros problemas, en este informe se hablará sobre el
lenguaje de programación PHP y el Framework Laravel y se hará un ejemplo
utilizando este maravilloso Framework.
DESARROLLO

PHP es un Lenguaje de programación dinámico que funciona en un servidor que


cuente con soporte para trabajar con PHP, este Lenguaje de Programación es de
código abierto, ha sido usado en casi la mayoría de proyectos que podemos
encontrar en Internet.
Las iniciales PHP significan Personal Hypertext processor, en español significa
Procesador de hipertexto personal.
PHP es un lenguaje de Programación catalogado como código en exceso y un poco
confuso, pero con la llegada de Frameworks como Zend, Yii, Laravel, etc. el orden
y trabajo con PHP mejoró un montón.
COMO funciona PHP
PHP solo puede trabajar en servidores que cuenten con soporte para PHP, estos
servidores cuentan con Sistemas Operativos Linux como Ubuntu SO, los cuales
interpretan comandos escritos con el Lenguaje de Programación PHP, estos
comandos realizan una tarea determina y dan como resultado el renderizado de un
determinado contenido dentro de etiquetas HTML.
Para poder crear código PHP se debe usar las etiquetas <?php aquí va el código
?>
PARA QUE SIRVE PHP

Al ser un Lenguaje Dinámico que solo funciona en servidores, podemos crear tareas
muy complejas y avanzadas como:
 Operaciones CRUD como crear, Leer, Actualizar y Eliminar registros o datos
de una base de datos en el servido
 Controlar sesiones de usuarios
 Gestionar cookies
 Trabajar conversaciones de chat con web Sockets
 Entre otras cosas más
Hoy en día son muchas las empresas que tiene sus aplicaciones web hechas en
PHP en su totalidad o parcialmente, entre las empresas tenemos:
 WordPress CMS
 Joomla CMS
 Facebook
 Moodle CMS
 Entre otras
En ocasiones se necesita realizar aplicaciones web de manera rápida y comenzar
a estructurarla desde cero puede ser muy traumático, para eso están los
Frameworks que son un conjunto de módulos que tienen como objetivos el
desarrollo ágil de aplicaciones mediante la aportación de librerías y/o
funcionalidades ya creadas para ser utilizadas.
Para el desarrollo de este informe se hará una aplicación web utilizando el lenguaje
de programación PHP y Laravel como Framework.
¿QUÉ ES LARAVEL?

Laravel es un marco de trabajo o Framework gratuito (código abierto) que te facilita


el desarrollo de aplicaciones con el lenguaje PHP y bases de datos, Laravel se
enfoca en el desarrollo de aplicaciones limpias y elegantes eliminando el horrible
código sucio, desordenado y mal escrito. Esto último es quizás lo que le dio vida a
PHP, ya que años atrás PHP era considerado si bien un lenguaje de programación
de lado del servidor (Back-end) muy bueno, pero el problema era que su código era
muy desordenado, podrías perderte si no sabias ordenar tu código PHP, pero con
la llegada de Laravel PHP recobro la vida.
PARADIGMA MVC

Laravel es un Framework moderno y tiene soporte para Desarrollar aplicaciones


bajo el paradigma MVC (Modelo Vista Controlador) que permite darle un orden a la
estructura de tu proyecto, la mayoría de Frameworks modernos cuentan con este
paradigma y Laravel no es la excepción.
CREANDO LA APLICACIÓN

1. Preparar el entorno de desarrollo

Descargar e instalar el programa Xampp. Este programa que incluye PHP y MySQL.
https://www.apachefriends.org/es/index.html
Descargar e instalar el manejador de dependencias de PHP llamado Composer.
https://getcomposer.org/download/

Descargar e instalar Git (consola de comandos) https://git-scm.com/


Descargar e instalar el IDE o entorno de desarrollo integrado de desarrollo (Visual
Studio Code) https://code.visualstudio.com/

Abrimos la consola de comandos de Git


Accedemos a la dirección https://laravel.com y nos vamos a la sección de
documentación. En esta sección se encuentra toda la documentación referente al
Framework.

Nos situamos en la consola de comandos y escribimos la siguiente línea de


comando

composer global require


laravel/installer
A continuación, comenzara a instalar Laravel en nuestro equipo.
2. Creando nuestro proyecto

Para crear un proyecto en Laravel realizamos dos pasos:


1) Ubicar desde la consola de comandos (git) en donde quiere que este su
proyecto en este caso estará en el escritorio.
2) Escribir el comando en la consola “Laravel new NombreDelPRoyecto” en
este caso el proyecto se va a llamar blog.

Luego de esto comenzara a descargar las dependencias necesarias para crear


el proyecto en Laravel.
Una vez haya terminado de instalar se abre el IDE (Visual Studio Code) y
abrimos la carpeta donde está ubicado el proyecto.
Listo, el proyecto ya ha sido creado de manera satisfactoria.
3. Ejecutando el proyecto

Principalmente hay que habilitar PHP, en este caso se va a habilitar también


MySQL que es el gestor de base de datos.
Luego, abrimos la consola de comando y nos ubicamos en la carpeta raíz del
proyecto y ejecutamos el siguiente comando “php artisan serve”, esto
levantara un servidor local que se ejecuta en el puerto 8000.

Después accedemos a un navegador cualquiera con la siguiente dirección


http://127.0.0.1:8000/ para poder ver nuestro proyecto en ejecución.
El proyecto que voy a realizar será una pagina de blogs o noticias de una persona.
Pero antes de comenzar a codificar se debe esquematizar la base de datos

Ahora, se comienza creando los modelos, factories, controladores y las


migraciones, ejecutando los siguientes comandos “php artisan make:model
Category -a” y “php artisan make:model Post -a”.
Luego, se comienza a editar cada archivo, en la configuración de la migración, del
modelo, del controlador, y del factory.
Primero comenzaremos editando las migraciones, estos archivos están ubicados en
la carpeta database > migrations.

Se comienza a editar el archivo 2014_10_12_create_users_table.php


Luego, se continua con el archivo
2019_10_05_211433_create_categories_table.php
Y por último el archivo 2019_10_05_211516_create_posts_table.php

Ahora toca conectar nuestra aplicación con la base de datos. Para este ejemplo
nuestra base de datos se va a llamar blog, accedemos a la consola o cmd de
Windows y lo ejecutamos como administrador, cuando abra escribimos el
siguiente comando “mysql -u -p”, luego nos pedirá una contraseña, le damos enter
porque no tiene contraseña la base de datos, en caso de que tenga contraseña
debe escribirse.
Debe de salir este mensaje, ahora, escribo el siguiente comando “create database
blog;”, ojo el comando debe terminar en punto y coma “;” este comando me crea
la base de datos.

La base de datos ya está creada, luego nos toca configurar nuestra aplicación
para conectarla a la base de datos, en la carpeta raíz hay un archivo .env, este
archivo contiene las variables de entorno y hay vanos a configurar la conexión a la
base de datos.

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=blog => nombre de la base de datos

DB_USERNAME=root
DB_PASSWORD=clave => clave si no tiene se deja vacío
Ahora nos toca crear las tablas, pero esa tarea nos las hace Laravel, con las
migraciones que se crearon anteriormente. Para ejecutar estar migraciones se
escribe el comando “php artisan migrate”.

Ahora nuestras tablas ya están creadas y listas para guardar información.


Después, se comienza a editar los modelos, los modelos están ubicados en la
carpeta app.
Comenzamos primero con el modelo de Users

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable


{
use Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];

/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];

/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];

/**
*
*/
public function potst(): HasMany
{
return $this->hasMany(Post::class, 'user_id');
}
}
Después editamos la clase Post

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Post extends Model


{
protected $fillable = [
'title', 'category_id', 'description', 'user_id'
];

/**
*
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}

/**
*
*/
public function category():BelongsTo
{
return $this-> belongsTo(Category::class, 'category_id');
}
}
Y por último editamos la clase Category

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Category extends Model


{
protected $fillable = [
'name'
];

/**
*
*/
public function post(): HasMany
{
return $this->hasMany(Post::class, 'category_id');
}
}

Una vez terminado de editar las clases, vamos a crear la autenticación del usuario,
Laravel a partir de su versión 6 separo la funcionalidad del front-end a un nuevo
paquete de Composer llamado laravel\ui, asi que primero toca instalarlo
escribiendo en la terminal de comando “composer require laravel\ui”

Luego ejecutamos el siguiente comando “php artisan ui bootstrap --auth” para


agregar las rutas de autenticación y estilo de Bootstrap.
Luego la consola nos manda un mensaje diciendo que tenemos que ejecutar el
comando “npm install && npm run dev” para instalar algunos paquetes y poder
compilarlo, pero voy a saltar este paso, porque tocaría instalar node, simplemente
voy a agregar los cdn’s de Bootstrap en línea.
Primero voy a la dirección https://getbootstrap.com/ y click en Get started

Luego copio los siguientes enlaces y los pego en el archivo app.blade.php que está
ubicado en la carpeta resources > view > layouts > app.blade.php.
Dentro de la etiqueta head y debajo del comentario “Styles” pegar el link copiado,
esto le dará el estilo al sitio
<!-- Styles -->
<link rel="stylesheet" href="https://stackpath.bootstra
pcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="
sha384-
ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2
MZw1T" crossorigin="anonymous">

Y por último agregamos los archivos .js para la interactividad del sitio. Estos enlaces
van antes de cerrar la etiqueta body

<script src="https://code.jquery.com/jquery-
3.3.1.slim.min.js" integrity="sha384-
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi
6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pop
per.js/1.14.7/umd/popper.min.js" integrity="sha384-
UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHN
Dz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstr
ap/4.3.1/js/bootstrap.min.js" integrity="sha384-
JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B
07jRM" crossorigin="anonymous"></script>
</body>
Ahora la interfaz de usuario tendrá un cambio radical.

Laravel incorpora su propio gestor de plantillas llamado blade estos archivos se


compilan y generan un html que puede ser leído por el navegador web.
Una vez configurado los estilos(css) y la interactividad del sitio(js) se procede a
editar las plantillas(.blade) y crear un conjunto de vistas que me ayuden a gestionar
el contenido del sitio.
se crea un usuario, para ver su comportamiento

Una vez se crea la cuenta la aplicación nos redirige a una página autenticada
Creamos las rutas de nuestra aplicación editando el archivo routes > web.php
use App\Post;
Route::get('/', function () {
$posts = Post::with('user')->get();
return view('welcome')->with('posts', $posts);
});
Auth::routes();
// rutas para el crud de categorias
Route::resource('categories', 'CategoryController');
// rutas para el crud de posts
Route::resource('posts', 'PostController');
Route::get('/home', 'HomeController@index')->name('home');
Al crear las rutas de tipo resource automáticamente laravel crea las rutas para
crud.

Luego modificamos el archivo app.blade.php y agregamos dos ítems de menú en


el navbar, pero con el condicional que solo se muestren cuando el usuario tenga la
sesión iniciada.
@guest
@else
<li class="nav-item">
<a
class="nav-link"
href="{{ route('categories.index') }}">
{{ __('Categorias') }}
</a>
</li>
<li class="nav-item">
<a
class="nav-link"
href="{{ route('posts.index') }}">
{{ __('Publicaciones') }}
</a>
</li>
@endif
Ahora ya tenemos nuestros dos menús activos en el navbar, ahora se van a editar
los controladores para hacer las operaciones crud y luego se van a crear las vistas
de cada sección (categorías y publicaciones).
<?php
// Controlador de las categorías
namespace App\Http\Controllers;

use App\Category;
use Illuminate\Http\Request;

class CategoryController extends Controller


{

public function index()


{
$categories = Category::all();

return View('category.index')
->with('categories', $categories);
}

public function create()


{
return View('category.create');
}

public function store(Request $request)


{
Category::create($request->all());

return redirect()->route('categories.index');
}

public function show(Category $category)


{
//
}

public function edit(Category $category)


{
return View('category.edit')
->with('category', $category);
}

public function update(Request $request, Category $category)


{
$category->fill($request->all());
$category->update();

return redirect()->route('categories.index');
}

public function destroy(Category $category)


{
$category->delete();

return redirect()->route('categories.index');
}
}
<?php
// Controlador de las publicaciones
namespace App\Http\Controllers;

use App\Category;
use App\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class PostController extends Controller


{
public function index()
{
$posts = Post::all();
return View('post.index')->with('posts', $posts);
}

public function create()


{
$categories = Category::all();
return View('post.create')->with('categories', $categories);
}

public function store(Request $request)


{
$post = new Post($request->all());
$post->user_id = Auth::user()->id;
$post->save();
return redirect()->route('posts.index');
}

public function show(Post $post)


{
//
}

public function edit(Post $post)


{
$categories = Category::all();

return View('post.edit')
->with('post', $post)
->with('categories', $categories);
}

public function update(Request $request, Post $post)


{
$post->fill($request->all());
$post->update();
return redirect()->route('posts.index');
}

public function destroy(Post $post)


{
$post->delete();
return redirect()->route('posts.index');
}
}
@extends('layouts.app') {{-- Vista que muestra todas las categorías --}}

@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">
<div class="clearfix">
<h6 class="float-left">Categorias</h6>
<a
href="{{ route('categories.create') }}"
class="btn btn-sm btn-primary float-right">
Crear categoria
</a>
</div>
</div>
<div class="card-body">
<table class="table">
<thead>
<tr>
<th>Codigo</th>
<th>Nombre</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach ($categories as $category)
<tr>
<td>{{ $category->id }}</td>
<td>{{ $category->name }}</td>
<td>
<a href="{{ route('categories.edi
t', $category) }}" class="btn btn-sm btn-info">Editar</a>
<button
class="btn btn-sm btn-danger"
onclick='event.preventDefault(
);
document.getElementBy
Id("category{{$category->id}}").submit();'>
Eliminar
</button>
<form id="category{{$category-
>id}}" action="{{ route('categories.destroy', $category) }}" method="POST"
style="display: none;">
@csrf
@method('DELETE')
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
{{-- Vista que muestra el formulario para crear la categoría --}}

@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">
<h6
class="float-left">
Crear categoría
</h6>
</div>
<div class="card-body">
<form
method="POST"
action="{{route('categories.store')}}">
@csrf
<div class="form-group">
<label>Nombre de la categoria</label>
<input
class="form-control"
name="name" type="text" required />
</div>
<div class="form-group">
<button
class="btn btn-block btn-primary"
>Crear categoria</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
{{-- Vista que muestra el formulario para editar la categoría --}}

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">
<h6
class="float-left">
Editar categoria - {{ $category->name }}
</h6>
</div>
<div class="card-body">
<form
method="POST"
action="{{route('categories.update', $ca
tegory)}}">
@csrf
@method('PUT')
<div class="form-group">
<label>Nombre de la categoria</label>
<input
class="form-control"
name="name" type="text"
required
value="{{ $category->name }}" />
</div>
<div class="form-group">
<button
class="btn btn-block btn-primary">
ACtualizar categoría
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app') {{-- Vista que muestra todas las publicaciones --}}

@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-10">
<div class="card">
<div class="card-header">
<div class="clearfix">
<h6 class="float-left">Publicaciones</h6>
<a href="{{ route('posts.create') }}" class="btn btn
-sm btn-primary float-right">Crear publicación</a>
</div>
</div>
<div class="card-body">
<table class="table">
<thead>
<tr>
<th>Codigo</th>
<th>Titulo</th>
<th>Categoria</th>
<th>Fecha de creación</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach ($posts as $post)
<tr>
<td>{{ $post->id }}</td>
<td>{{ $post->title }}</td>
<td>{{ $post->category->name }}</td>
<td>{{ $post->created_at }}</td>
<td>
<a href="{{ route('posts.edit', $po
st) }}" class="btn btn-sm btn-info">Editar</a>
<button
class="btn btn-sm btn-danger"
onclick='event.preventDefault();
document.getElementById
("post{{$post->id}}").submit();'>
Eliminar
</button>
<form id="post{{$post-
>id}}" action="{{ route('posts.destroy', $post) }}" method="POST" style="dis
play: none;">
@csrf
@method('DELETE')
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
{{-- Vista que muestra el formulario para crear una publicación --}}
@extends('layouts.app')

@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-9">
<div class="card">
<div class="card-header">
<h6 class="float-
left">Crear publicación</h6>
</div>
<div class="card-body">
<form method="POST" action="{{ route('posts.
store') }}">
@csrf
<div class="form-group">
<label>Titulo</label>
<input class="form-
control" name="title" type="text" required />
</div>
<div class="form-group">
<label>Categoria</label>
<select name="category_id" class="fo
rm-control">
<option>Seleccione una opcion</optio
n>
@foreach ($categories as $catego
ry)
<option value="{{ $category-
>id }}">{{ $category->name }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label>Descripción</label>
<textarea class="form-
control" name="description"></textarea>
</div>
<div class="form-group">
<button class="btn btn-block btn-
primary">Crear publicación</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
{{-- Vista que muestra el formulario para editar una publicación --}}
@extends('layouts.app')
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-9">
<div class="card">
<div class="card-header">
<h6 class="float-left">Crear publicación</h6>
</div>
<div class="card-body">
<form
method="POST"
action="{{route('posts.update', $post) }}">
@csrf
@method('PUT')
<div class="form-group">
<label>Titulo</label>
<input class="form-
control" name="title" type="text" value="{{ $post->title }}" required />
</div>
<div class="form-group">
<label>Categoria</label>
<select name="category_id" class="form-control">
<option>Seleccione una opcion</option>
@foreach ($categories as $category)
@if($category->id == $post->category_id)
<option value="{{ $category-
>id }}" selected>{{ $category->name }}</option>
@else
<option value="{{ $category-
>id }}">{{ $category->name }}</option>
@endif
@endforeach
</select>
</div>
<div class="form-group">
<label>Descripción</label>
<textarea class="form-
control" name="description">{{$post->description}}

</textarea>
</div>
<div class="form-group">
<button class="btn btn-block btn-
primary">Crear publicación</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
Se les agrega el middleware a los controladores de las categorías y las
publicaciones, este middleware se coloca en el constructor de la clase.

// PostController.php
public function __construct()
{
$this->middleware('auth')->except('show');
}

// CategoryController.php
public function __construct()
{
$this->middleware('auth');
}

Por último, modificamos la página principal listando todas las publicaciones creadas.

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-10">
@foreach ($posts as $post)
<div>
<a href="{{ route('posts.show', $post) }}">
<h2>{{ $post->title}}</h2>
</a>
<span class="text-muted">
<i>Publicado por</i>
{{$post ->user->name}} –
{{$post->created_at->diffForHumans()}}
</span>
</div>
@endforeach
</div>
</div>
</div>
@endsection

Y en la pantalla veríamos algo como esto.


Listo, ahora el blog está listo.
CONCLUSIÓN

En este informe se observó como se desarrolla una ampliación desde cero utilizando
el Framework Laravel utilizando sus componentes.
Gracias a su interfaz de línea de comando (CLI) Laravel te permite crear archivos
con estructuras predefinidas en cuestión de segundo, lo que ayuda
exponencialmente la productividad del desarrollo.
Laravel al traer soporte para varios gestores de base de datos te evita de que tu
aplicación contenga consultas especificas para cierto gestor de base de datos,
además Laravel te permite crear una base de datos relacional directamente desde
el Framework gracias a su sistema de migraciones.
Al optar por un modelo MVC (Modelo-Vista-Controlador) Laravel fomenta a ser un
poco mas ordenado, separando los procesos del back-end y el front-end.
Laravel al ser un Framework genera muchos archivos y requiere de mucha
configuración lo cual no es recomendable para utilizarlo para proyectos demasiados
pequeños, ya que ocuparía paquetes que no se utilizarían.
WEBGRAFÍA

colectiva, N. (5 de 10 de 2019). Nube colectiva. Obtenido de


http://blog.nubecolectiva.com/que-es-laravel-tu-primera-aplicacion-con-
laravel/
colectiva, N. (5 de 10 de 2019). Nube colectiva. Obtenido de
http://blog.nubecolectiva.com/que-es-un-framework-historia-y-mas-detalles/
Colectiva, N. (5 de 10 de 2019). Nube Colectiva. Obtenido de
http://blog.nubecolectiva.com/que-es-php-y-otros-detalles/
MVP, C. (6 de 10 de 2019). Campus MVP. Obtenido de
https://www.campusmvp.es/recursos/post/Desarrollador-web-Front-end-
back-end-y-full-stack-Quien-es-quien.aspx
Otwell, T. (5 de 10 de 2019). Laravel. Obtenido de https://laravel.com/docs/6.x

También podría gustarte