Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Crud Laravel
Crud Laravel
Funciones:
6.- crear y configurar las vistas(en una carpeta a parte) – todas dentro de @section('content') menos
el form
LARAVEL/UI
8.- php artisan ui bootstrap –-auth (--auth es para instalar las páginas de login quitar si no se necesita
estas paginas)
11.- en Web.php cambiar HomeController por tu controlador(creado en el paso 2) en una línea creada por
el ui
SOURCE HTML
BOOTSTRAP
@extends('layouts.app') {{-- ESTO SE CREA RECIEN CON EL COMANDO 8 DE LARAVEL/UI -
-}}
TABLA
<table class="table table-light">
<thead class="thead-light">
<tr>
<th>#</th>
<th>Foto</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Apellido Materno</th>
<th>Correo</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
@foreach ($empleados as $empleado)
<tr>
<td>{{$empleado->id}}</td>
<td><img class="img-thumbnail img-fluid" width="50px" height="50px" sr
c="{{asset('storage').'/'.$empleado->Foto}}" alt=""></td>
<td>{{$empleado->Nombre}}</td>
<td>{{$empleado->ApellidoPaterno}}</td>
<td>{{$empleado->ApellidoMaterno}}</td>
<td>{{$empleado->Correo}}</td>
<td><a class="btn btn-warning" href="{{url('/empleado/'.$empleado-
>id.'/edit')}}">
Editar
</a>
<form class="d-inline" action="{{url('/empleado/'.$empleado-
>id)}}" method="post">
@csrf
{{ method_field('DELETE') }}
<input class="btn btn-danger" type="submit" onclick="return co
nfirm('Quieres Borrar?')" value="Borrar">
</form>
</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr>
<th></th>
</tr>
</tfoot>
</table>
FORMULARIO
<div class="form-group">
<label for="Nombre">Nombre</label>
<input type="text" class="form-control" name="Nombre" id="" value="{{$empleado-
>Nombre ?? old('Nombre')}}">
</div>
<div class="form-group">
<label for="ApellidoPaterno">Apellido Paterno</label>
<input type="text" class="form-control" name="ApellidoPaterno" id="" valu
e="{{$empleado->ApellidoPaterno ?? old('ApellidoPaterno')}}">
</div>
<div class="form-group">
<label for="ApellidoMaterno">Apellido Materno</label>
<input type="text" class="form-control" name="ApellidoMaterno" id="" valu
e="{{$empleado->ApellidoMaterno ?? old('ApellidoMaterno')}}">
</div>
<div class="form-group">
<label for="Correo">Correo</label>
<input type="text" class="form-control" name="Correo" id="" value="{{$empleado-
>Correo ?? old('Correo')}}">
</div>
<div class="form-group">
<label for="Foto">Foto</label>
@if (isset($empleado->Foto))
<img class="img-thumbnail img-fluid" width="70px" height="70px" src="{{ asse
t('storage').'/'.$empleado->Foto }}" alt="">
@endif
<input class="form-control" type="file" name="Foto" id="" value="">
</div>
<input class="btn btn-success" type="submit" value="{{$modo}} Datos">
ERRORES CONTROLADOS(ALERTA)
@if (count($errors)>0)
<div class="alert alert-danger" role="alert">
<ul>
@foreach ($errors->all() as $error)
<li> {{$error}} </li>
@endforeach
</ul>
</div>
@endif
ACCIÓN EXITOSA
@if (Session::has('mensaje'))
<div class="alert alert-success alert-dissmissible" role="alert">
{{Session::get('mensaje')}}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endif
PAGINAR(DEBAJO DE TABLA)
{!! $empleados->links() !!} {{-- AGREGAR PARA PAGINAR --}}
FORMULARIO DE EDITAR
<form action="{{url('/empleado/'.$empleado->id)}}" method="post" enctyp
e="multipart/form-data">
@csrf
{{method_field('PATCH')}}
@include('empleado.form',['modo'=>'Editar'])
</form>
FORMULARIO DE CREAR
<form action="{{url('/empleado')}}" method="post" enctype="multipart/form-data">
@csrf
@include('empleado.form',['modo'=>'Crear'])
</form>
SOURCE CONTROLADOR
INDEX
$datos['empleados']=Empleado::paginate(5);
return view('empleado.index',$datos);
CREATE
return view('empleado.create');
STORE
/// ESTO ES VERIFICACION DE DATOS
$campos=['Nombre'=>'required|string|max:100',
'ApellidoPaterno'=>'required|string|max:100',
'ApellidoMaterno'=>'required|string|max:100',
'Correo'=>'required|email',
'Foto'=>'required|max:1000|mimes:jpeg,pbg,jpg'
];
$mensaje=[
'required'=>'EL :attribute es requerido',
'Foto.required'=>'La foto es requerida'
];
$this->validate($request,$campos,$mensaje);
//////////////////////////////////////////////////////
$datosEmpleado= $request->except('_token');
if($request->hasFile('Foto'))
{
$datosEmpleado['Foto']=$request->file('Foto')-
>store('uploads','public');
}
Empleado::insert($datosEmpleado);
return redirect('empleado')->with('mensaje','Empleado agregado con exito
');
EDIT
$empleado=Empleado::findOrFail($empleado->id);
return view('empleado.edit',compact('empleado'));
UPDATE
/// ESTO ES VERIFICACION DE DATOS
$campos=['Nombre'=>'required|string|max:100',
'ApellidoPaterno'=>'required|string|max:100',
'ApellidoMaterno'=>'required|string|max:100',
'Correo'=>'required|email',
];
$mensaje=[
'required'=>'EL :attribute es requerido',
];
if($request->hasFile('Foto'))
{
$campos=[ 'Foto'=>'required|max:1000|mimes:jpeg,pbg,jpg'];
$mensaje=[ 'Foto.required'=>'La foto es requerida'];
}
$this->validate($request,$campos,$mensaje);
//////////////////////////////////////////////////////
$datosEmpleado= $request->except(['_token','_method']);
if($request->hasFile('Foto'))
{
$empleado =Empleado::findOrFail($empleado->id);
Storage::delete('public/'.$empleado->Foto);
$datosEmpleado['Foto']=$request->file('Foto')-
>store('uploads','public');
}
Empleado::where('id','=',$empleado->id)->update($datosEmpleado);
$empleado=Empleado::findOrFail($empleado->id);
//return view('empleado.edit',compact('empleado'));
return redirect('empleado')->with('mensaje','Empleado Editado');
DESTROY
$empleado =Empleado::findOrFail($empleado->id);
if(Storage::delete('public/'.$empleado->Foto))
{
Empleado::destroy($empleado->id);
}
return redirect('empleado')->with('mensaje','Empleado Eliminado');
Route::resource('empleado',EmpleadoController::class)->middleware('auth');
Route::get('/home', [EmpleadoController::class, 'index'])->name('home'); ////Route
::get('/home', [App\Http\Controllers\HomeController::class, 'index'])-
>name('home');
ANEXOS
// php artisan make:request CreateMessageRequest --->este ultimo es nombre del req
uest
// php artisan make:controller nombreController --->este ultimo es nombre del req
uest
// midleware , intercepta peticiones(request) de usuarios (tienen que cumplir con
x requerimientos)
// que es response?
// la funcion .env (donde se guardan las variables de entorno - BD )
// php artisan migrate ////(ejecuta los archivos php para migrar de la ruta: PRU
EBA_LARAVEL_2/database/migrations) up en la funcion de php para migrar
// php artisan rollback ////(down en la funcion de php para migrar)down en la fu
ncion de php para migrar
// php artisan migrate:refresh ////(esto hace rollback y luego migrate)
// php artisan make:migration create_mensajes_tabla ///// la ultima palabra es el
nombre de migration
// php artisan make:migration create_mensajes_tabla --create=mensaje ///// la ult
ima palabra es el nombre de la tabla y tambien crea la migración
//php artisan make:migration add_telefono_tabla_mensaje --table=mensaje ///// la u
ltima palabra es el nombre de la tabla que queremos modificar
// php artisan make:controller MensajeController --resource -->esto ultimo crea la
s funciones necesarias para un crud
// que es la clase pdo
// REST con QUERY BUILDER -->ya esta hecho
// REST Eloquent --> es un ORM--- busca el mismo nombre en plural y en minuscula d
el modelo--> //al hacerun insercion agrega automaticamente el creadted y updated--
> representacion de un tabla(de una BD) en una clase (que esta dentro de unaplicac
ion)
// php artisan make:model Mensaje --->crea un modelo
// se instala nodejs y se utuliza el comando ---> npm install //// tambien para a
ctualizar o si hay algun error --> npm update
//carpetas vendor y node_modules ---> son la dependencias instaladas de laravel y
nodejs--> no se suben al git
// package.json --> donde se define las dependencias de node.js
//npm run dev --> para compilar los css de los archivos app.sass y app.js de la ca
rpeta assest //ruta webpack.mix.js
//npm run watch --> para compilar automaticamnete los css de los archivos app.scss
(sass es un procesador css) y app.js de la carpeta assest //ruta webpack.mix.js
// npm run dev --production /// tambien optimiza (archivos styles en webpack)para
combinar archivos css(sin procesadores graficos)--> directamente de la ruta public
// npm run production --> para minificar los css y js del proyecto
// ('resources/assets/js/app.js', 'public/js') ('resources/assets/sass/app.scss',
'public/css') --> webpack.mix.js --> en estas rutas se debe agregar otras rutas pa
ra combinar archivos
// npm install jquery --save --> instala jquery y lo ultimo es para registrar en
package.json
//php artisan make:model Rol -m --> este ultimo parametro crea tambien la migracio
n
// clase collecions --> trata los arrays
// ruta config/mail.php para configuraciones con el correo
// event --> es algo q ocurrio en la app(eventos son DTO) (el evento y el listener
priemro se registra en el EventServiceProvider)
//listeners --> reacciona al evento(se dispara despues del event)
// php artisan make:seeder UsuarioTablaSeeder (para crear un seeder -> es un tinke
r para llenar datos en BD)
// php artisan db:seed (para ejecutar los seed creados y llenar la BD)
// php artisan db:seed --class=UsuarioTablaSeeder (ultimo nombre->es nombre del
seeder, ejecutar el seed especifico)
// php artisan migrte:refresh --seed (hace el rollback luego la migracion a la BD
y luego el seed(llena la BD))
/// php artisan vendor:publish --tag=laravel-pagination /// publica(muestra en
view) plantillas de paginacion en el proyecto
/// config/cache.php --> aqui se configura
/// metodos de cache Laravel son: put(almacena) get(obtener) has(verifica llave)
forget(quitar llave) flush(vaciar completamente)
/// interfaces no pueden ser instanciadas /// interfaces es solo para verificar q
esten las mismas funciones dentro /// no tienen nada de lógica
/// para injectar una interfaz en toda la aplicacion se debe hacerlo en AppService
Provider en la funcion boot
/// interfaz define metodo para que las clases q lo implementen lo definan tambien
obligatoriamente para intercambiar clases concretas
/// view presenters --> es una capa de itermediacion entre modelo y vista---> log
ica de las vistas fuera de las vistas
/// composer require predis/predis ---> para instalar la libreia de redis en el pr
oyecto
/// redis-cli (en cmd) (ping-->para recibir respuesta del servidor , keys * --> pa
ra ver los tags cache almacenados)
/// php artisan make:job nombre /////crea una clase para ejecutar tareas pesadas y
mandarlos al queue
///php artisan queue:work /////ejecuta la clase creada (Jobs)
///php artisan queue:failed-table ///// crea una migracion (tabla de trabajos[Jobs
] fallidos)
/// php artisan queue:work --tries=1 ///// ejecuta los la clase creada (Jobs) pero
solo con un solo intento
/// php artisan queue:failed ///// para ver los Jobs fallidos
/// php artisan queue:flush ///// para vaciar los datos de la tabla (failed_jobs)
// implementar el ShouldQueue para q el trabajo(funcion) balla al queue
/// php artisan queue:listen ///// para que envie(ejecute el jobs) automaticamente
al queue
/// php artisan queue:listen --tries=1 ///// (ejecuta el jobs) automaticamente al
queuee (solo una vez)
/// para redis(socket) ---> solo se debe implementar la clase ShouldBroadcast en u
n evento y para emitir este evento se debe utilizar(mediante) el queue (ejecutar
php artisan queue:listen)
//// para instalar servidor de la app (npm install -g laravel-echo-server)
/// npm install --save-dev laravel-echo socket.io-client pusher-js (para instalar
las dependenmcias necesarias)
/// npx laravel-echo-server init (para inicializar la configuracion del servidor)
/// npx laravel-echo-server start (para prender el servidor creado)-->en la ruta d
el proyecto
/// laravel-echo-server.json --->("authHost": "http://http://127.0.0.1:8000/") ("
devMode": true,"host": "127.0.0.1","port": "6001")
/// redis-server (para prender el servidor redis-> 1er paso ,luego laravel-echo-
server,luego el queue:listen y final el php artisan serve)
/// php artisan make:test MensajeControllerTest ...> nombre del controlador al
final Test
// los tets unitarios --> se ejecutan clases y metodos de forma aislada
/// test de integracion --> para probar multiples partes de la aplicacion
/// vendor\bin\phpunit tests\Integration\EloquentMensajeTest.php para probar todo
la clase de test
// vendor\bin\phpunit --filter Hola tests\Integration\EloquentMensajeTest.php -->
Hola es nombre de la funcion y lo otro es el path para testear una función
// php artisan migrate --database=mysql_testing ---> (para hacer una migracion en
una BD especifica , previamente configurada en config/database.php connections)
/// test funcional --> es probar el sistema como usuario
/// php artisan make:mail ---> crear un mailable
/// php artisan storage:link ---> para enlazar la carptea storage/app/public con l
a carpeta public
/// php artisan r:l --> para ver todas las rutas del routes/web.php
// php artisan config:clear ///// para todo lo que se trabaja con redis
// php artisan config:cache ///////al cambiar de ruta de proyecto /// y para hace
r migrate a otra base de datos
/// para descargar los repositorios de git (composer install)
/// php artisan key:generate (todos los proyectos laravel lo tiene -> son paras c
ookies)
/// composer create-project laravel/laravel mi-proyecto-laravel 5.5.*(pra crear el
proyecto laravel en una ruta especifica y al final la version de laravel)
/// composer require ---> es para agregar (dependenciasde desarrollo(framework) al
proyecto)--> lo puedes ver en composer.json (require-dev)
/// composer dump-autoload ---> actualiza la información del cargador automático
de clases.
//// php artisan tinker -> para usar funciones laravel en el proyecto
//// factory('App\ModelEjemplo',10)->create() /// {(Factory)->es generador de dat
os de prueba de laravel, Faker/Generator (es una libreria de datos de prueba)} el
primero es el modelo del proyecto y el segundo es el numero de inserciones en la
BD
///CONTRASEÑA DE PRUEBA DE TODOS LOS USURIOS ES secret
/// php artisan vendor:publish --tag=laravel-mail //// para personalizar las pl
antillas de el email
/// php artisan vendor:publish --tag=laravel-notifications //// para personaliza
r las plantillas de el email de las notificaciones
/// php artisan make:notification MensajeEnviado /// para crear la notificacion e
n la carpeta app/notifications
/// php artisan event:generate (esto crea un evento y listener previamente regist
rados en el EventServiceProvider - en la variable protected $listen )
/// npm install --> para instalar las dependencias en la ruta del proyecto --> pa
ra instalar bootstrap , jquery ,vue, laravel-mix
/// resource/assets/js/app.js --> aqui se registra el componente vue a utilizar
//// vue --> son componentes creados para html
//// php artisan vendor:publish --tag=laravel-notification ---> para publicar toda
s las notificaciones que se crea por defecto (auth, etc )
/// Si los paquetes se registran en /bootstrap/cache/packages.php ---> debe esta
r registrado en servisesProviders, en el fasat ->Facade
//// PARA INSTALAR SISTEMA AUTH(make:auth) EN NUEVOS LARAVEL 6 A MAS----_> compose
r require laravel/ui y luego php artisan ui vue --auth (luego npm install && npm r
un dev para agregar los estilos,js a las nuevas paginas)