Está en la página 1de 12

CRUS – LARAVEL

1.- composer créate-proyect laravel/laravel Proyecto

2.- php artisan make:model Alumno –mcr

3.- .env -> configurar BD y configurar archivo recién creado en Database/migrations

4.-php artisan migrate

5.- configurar controlador recién creado

Funciones:

- index ->solo muestra datos

- create -> trae los datos para mostrar(instanciados)

- store -> guarda los datos del create

- edit -> trae los datos para mostrarlos

- update -> guarda los datos del edit

- show -> muestra los detalles (un en específico) de un dato en index

6.- crear y configurar las vistas(en una carpeta a parte) – todas dentro de @section('content') menos
el form

- create.blade -> formulario instanciado

- edit.blade -> formulario trae los datos

- index.blade -> tabla

- form.blade -> formulario

LARAVEL/UI

7.- composer require laravel/ui

8.- php artisan ui bootstrap –-auth (--auth es para instalar las páginas de login quitar si no se necesita
estas paginas)

9.- npm install

10.-npm run dev

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">&times;</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');

 WEB.PHP (genera todas las rutas del controlador-creado automaticamente)

Route::resource('empleado',EmpleadoController::class)->middleware('auth');

 WEB.PHP (redireccionar login a index de Controlador)


Route::group(['middleware' => 'auth'], function () {
    Route::get('/',[EmpleadoController::class,'index'])->name('home');
});

 WEB.PHP (quita el register y reset de contraseña del view de login)


Auth::routes(['register'=>false,'reset'=>false]);///Auth::routes();

 WEB.PHP (direcciona el home al index cuando esta logeado)

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)

También podría gustarte