Notas Personales.
- LARAGON 4.0.4
- Laravel 5.7.25
- DOCUMENTACION OFICIAL DE LARAVEL: https://laravel.com/docs/5.7
- Basico.
- Routes.
- Views con blade.
- Controladores.
- Formularios - Validaciones.
- Migraciones.
- Querys.
- Eloquen
- Sesiones
- Mensajes flash o de sesion.
- Autenticacion: login, registro, logout.
- Extras.
- LARAGON
- Crear nueva aplicación en laragon/www marcar:
>laravel new [nombre]
- Acceder: http://nombre.test
- Crear nueva aplicación en laragon/www marcar:
- ARTISAN
>php artisan
se ejecuta dentro de la carpeta app.- Listar todos los comandos de artisan:
>php artisan list
- ver rutas y controladores:
>php artisan route:list
- laravel
- Agregar Archivos .php al framework laravel.
- ir a: composer.json -> autoload y Agregar el archivo en: "files":["NombreProyecto/nombreArchivo.php"]
- resetear el autoload:
#composer dumpautoload
- variables de entorno en .env:
- guardar config BD, urls, API keys, claves.
- GIT lo ignora, por lo que hay que crear otro .env para el local y otro para el servidor.
- APP_ENV: local (local)/ production (servidor-nube) / testing (otra pc cualquiera)
- Agregar Archivos .php al framework laravel.
-
Documentacion: https://laravel.com/docs/5.8/routing
-
definen las rutas URL de las peticiones (GET,POST) y se asocian con un controlador o con una view directamente.
-
cada route se le asigna un nombre, en el codigo se usara este nombre para apuntar a su URL
route('nombre-clave')
-
Responder solo texto:
Route::get('ruta1',function{ return "responder este Texto";})>name('nombre-clave');
-
Responder View:
Route::view('/about','about')->name('about')
-
Captar datos por la url y responder un View. Ej. localhost/subpagina/valor
-
Route::get('/ruta/{variable?}', function ($variable ='valor_predeterminado') { return view('nombre_view',['variable' -> $variable]); })->name('nombre-clave');
-
Responder View pasandole una constante:
Route::view('/ruta','subpagina',['variable' => 'CONSTANTE'])->name('nombre-clave');
-
Responder View pasandole un array:
-
<?php $array = [ ['title'=>'valor1'], ['title'=>'valor2'], ]; Route::view('/ruta','subpagina',compact('array'))->name('nombre-clave');
-
Documentacion: https://laravel.com/docs/5.8/blade#template-inheritance
-
Directorio: 'resources/views/vista.blade.php'
-
datos no escapados:
{{$variable}}
no ejecuta HTML o JS -
datos escapados:
{!!$variable!!}
si ejecuta HTML o JS. Alerta de XSS attacks no implementar inputs -
Comentarios:
{{-- Comentarios --}}
-
Algunas Directivas de control:
`@if(), @elseif(), @else, @endif` `@isset(), @endisset, @empty(), @endempty` `@switch(), @case(), @break, @default, @endswitch` `@for () @endfor @json($array)`
-
Traducción de Texto
@lang(palabras traducida segun locate de laravel)
los busca en la directiva: app/resource/lang/en.json -
Ejemplo de LAYOUT, planilla padre:
-
layout, plantilla padre <html> <head> <title>App Name - @yield('title')</title>` </head> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> </body> </html>
-
-
Ejemplo section Hijo.
-
@extends('layouts.app') @section('title', 'Page Title') @section('sidebar') @parent <p>This is appended to the master sidebar.</p> @endsection @section('content') <p>This is my body content.</p> @endsection
- Documentacion: https://laravel.com/docs/5.7/controllers
- Directorio: app/http/Controlers/
- crear un controlador:
>php artisan make:controller nombreController -h,-i,-r,-api
- listar comandos de make:controller:
php artisan make:controller nombreController -h
- listar routes y controladores:
php artisan route:list
Contiene un unico metodo _invoke
y se ejecuta automaticamente al ser invocado.
- crear controlador
_invoke
:php artisan make:controller nombreController -i
- Route:
Route::get('/subpagina','nombreControlador')->name('nombre-clave');
Maneja los recursos en la BD (Ej.proyectos) puede contener los 7 metodos REST.
- Los 7 metodos REST:
1. INDEX (GET) /recurso - listar recursos
2. CREATE (GET) /recurso/create- formulario para crear nuevo recurso
3. STRORE (POST) /recurso - Guardar el recurso en la BD (creado por CREATE)
4. SHOW (GET) /recurso/{id} - mostrar un recurso por ID
5. EDIT (GET) /recurso/{id}/edit- formulario para editar un recurso existente por ID
6. UPDATE (PUT) /recurso/{id} - guardar los cambios hechos por EDIT
7. DELETE/DESTROY (DELETE)/recurso/{id} - eliminamos un recurso por el ID
-
Crear:
php artisan make::controller nameController -resourse (r)
-
Route, Para invocar varios metodos REST. - Solo invocar las Nombradas (Ej. create,edit)
Route::resource('nombreDelRecurso','nombreController')->only([create,edit])
- Invocar todas Exepto las nombradas (Ej. index,show)
Route::resource('nombreDelRecurso','nombreController')->except([index,show])
-
Tambien se puede invocar un método a la ves. respetando los Metodos REST.
Route::get('/subpagina','nameController@index')->name('clave-name');
Route::post('view', 'MessageController@store')->name('nombre-post');
Route::put();
Route::patch();
Route::delete();
Para manejar las API (interfaces) del sistema. Puede contener los metodos REST Exepto CREATE y EDIT.
* crear:
>php artisan make::controller nameController -api
* Route:
- Solo invocar las Nombradas (Ej. create,edit)
Route::apiResource('nombreDelRecurso','nombreController')->only([create,edit])
- Invocar todas Exepto las nombradas (Ej. index,show)
Route::apiResource('nombreDelRecurso','nombreController')->->except([index,show])
- Tambien se puede invocar un metodo a la ves. respetando los Metodos REST.
Documentacion: https://laravel.com/docs/5.8/validation#introduction
- Formularios - Validaciones:
-
Vistas:
- Utilizar
@csrf
(si no, lanza error 401, es por seguridad) - los atributo "name" de los inputs Siempre se deberan DEFINIR!
- hacer un formulario:
<form method="POST" action="{{route('nombre-post')}}">
- mostrar el error en html en caso de break:
{!!$errors->first('name','<small>:message</small><br>')!!}
- mantener valores en caso de Break:
value="{{old('subject')}}
- Editar Mensajes, Directorio: app/resources/lang/ Español En: "Github lang"".
- Utilizar
-
crear ruta:
- con route:
Route::post('viewName', 'Controllername@store')->name('nombre-post');
Debe tener mismo nombre y ser el mismo metodo. (una a la ves) - con resource:
Route::resource('/projects','ProjectController')->only(['index','show','create','store']);
(varias a la ves)
- con route:
-
En Controlador:
php artisa make:controller...
- leer datos:
$name = Request('name');
request()->validate([...]);
llenar validaciones- funcionamiento del validate: validate break the function y activara a
$errors
- funcionamiento del validate: validate break the function y activara a
- Para Guardar en la BD, MODELO:
- Ver: ORM - Eloquent, CRUB - Store.
-
Docmentacion: https://laravel.com/docs/5.8/migrations#introduction
Crear, Manipular la BD con control de Versiones. En DOWN()
se revierte lo del UP()
.
-
Crear base de datos y especificarla en .env
-
Generar archivo de migracion: 2.1 Genera archivo de migracion para crear tabla "users"
php artisan make:migration create_users_table --create=users
Crea: Schema::create('nombre_tabla_plural', function (Blueprint $table) { ... });2.2 Genera archivo de migracion para modificar la tabla "users" sin Eliminar DATOS.
php artisan make:migration add_votes_to_users_table --table=users
opciones:alter_in_users_table
oadd_phone_to_users_table
. Crea: Schema::table('nombre_tabla_plural', function (Blueprint $table) { ... }); -
comandos:
3.1 Comandos: En (Schema::create - DEFINE) y (Schema::table - AGREGA):
$table->integer('numero')->default($value); // Crea integer, define valor por defecto.
$table->integer('numero')->unsigned(); // crea integer, no negativos.
$table->string('email',100)->unique(); // crea String con max 100 y asignar indexes unique.
$table->decimal('variable', 5, 2); // crea decimal, range: 999.99 to -999.99.
$table->double('variable', 5, 2)->autoIncrement();// crea double auto-imcrementable.
$table->float('variable', 5, 2)->nullable(); // crea double, null-enable.
$table->text('description')->charset('utf8') // crea text, con utf8
$table->boolean('confirmed')->first(); // crea boolean y colocarlo de primero en la tabla
$table->char('name', 100)->comment('my comment'); // crea un char, con comentario.
$table->timestamp('tiempo')->useCurrent(); // timestamp, con current por defecto.
$table->timestamps(); // crea nullable, create_at y update_at
$table->bigIncrements('id'); // auto incremental, primary-key, unsigned, bigint
$table->Increments('id'); // auto incremental, primary-key, unsigned, int
$table->rememberToken(); // recordar datos de entrada del usuario.
$table->engine = 'InnoDB';
$table->charset = 'utf8';
$table->foreign('user_id')->references('id')->on('users'); //asigna clave foranea
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade');
3.2 Comandos: En (Schema::table - ACTUALIZAR - MODIFICAR Columnas):
$table->string('email',40)->change(); //cambiar max legth
$table->string('name', 50)->nullable()->change(); //Cambiar max legth y nulleable.
$table->renameColumn('from', 'to'); //Cambiar nombre de la columna
$table->renameIndex('from', 'to'); //Cambiar nombre del Index
$table->string('phone')->after('email'); //mover la columna para despues
$table->primary('id'); //cambiar a primary key.
$table->unique('email'); //cabiar a unique index.
$table->index('state'); //cambiar a indice simple
Schema::rename($from, $to); //renombrar tabla
3.3 Comandos para ELIMINAR:
Schema::dropIfExists('flights'); //eliminar tabla
$table->dropColumn('votes'); //eliminar una columna
$table->dropColumn(['votes', 'avatar', 'location']); //eliminar varias columnas
$table->dropTimestamps(); //eliminar creat_at y update_at
$table->dropRememberToken(); //eliminar remember_token
$table->dropPrimary('users_id_primary'); //eliminar primary_key
$table->dropUnique('users_email_unique'); //eliminar unique
$table->dropIndex('geo_state_index'); //eliminar index
$table->dropForeign('NOMBRETABLA_ID_foreign'); //eliminar clave foranea
- Manejo/ejecucion de las migraciones:
>php artisan migrate
-> Ejecuta los metodos UP de todas las migraciones.>php artisan migrate:rollback
-> Ejecuta los metodos DOWN de las ultimas migraciones ejecutadas. (retrocede un paso)>php artisan migrate:rollback --step=2
-> retroceder 2 pasos>php artisan migrate:reset
-> Ejecuta los metodos DOWN de todas las migraciones.>php artisan migrate:fresh
-> Ejecuta RESET and MIGRATE. (aplica cambios hechos en los UP() pero se destruyen todos los datos!)
Documentacion: https://laravel.com/docs/5.8/queries
Documentacion: https://laravel.com/docs/5.8/eloquent
ORM (objeto mapeo relacional) Datos de BD <-> clase/objeto
-
Por cada tabla Crear una clase-modelo:
>php artisan make:model NombreModelo
(usar singular y camello de la tabla) direccion: app/NombreModelo.php -
Definir el modelo-Eloquen (dentro del modelo):
protected $table = 'my_flights';
// define la tabla de la DB que representa.protected $primaryKey = 'flight_id';
// define el primary_keypublic $incrementing = false;
// indicar que el primary_key no es auto_incrementableprotected $keyType = 'string';
// indicar que el primary_key es un Stringpublic $timestamps = false;
// indicar que no se usa created_at y updated_at -
Importar clase-modelo dentro del controlador:
use App/NombreModelo;
-
Implementar CRUB con REST en el controlador: ACTUALIZAR con .TXT
-
Index() - Listar recursos:
$tabla = NombreModelo::all();
// me trae todas las filas y columnas de la tabla.$tabla = NombreModelo::get();
-
Show() - Seleccion por id, Especifico:
html-href: {{route("ruta",objRow)}}
- controler 2 formas:
2.1.
Route::resource('/projects','ProjectController')->only(['index','show']);
//id pasa automaticamente. 2.2.Route::get("/linkControler/{objRowid}",'nameController@show')->name('name.show')
$project = Project::findOrfail($id);
-
Create() - Formulario creacion de recurso:
return view('recurso.create');
-
Store() - guardar datos: (Ver Primero: formulario y validaciones con blade)
-
Antes de Insertar un atributo en la BD hay que permitirle Manualmente la Asignacion Masiva "Fillable" de cada atributo, Para asi reafirmar solo los atributos a introducir por el formulario y proteger los introducidos por el sistema. En modelo-class Definir:
protected $fillable = ['atributo1','atributo2'...];
-
Guardar con create.
-
Project:: create([ 'title' => $request->get('title'), 'description' => $request->get('description'), ]);
-
-
- Documentacion: https://laravel.com/docs/5.7/session
- Configuraciones: app/config/sesion.php
- drive: tipo de archivo donde se almacenaran estos datos:
- directorio archivo de sesiones: app/storage/framework/sessions
-
Documentacion: https://laravel.com/docs/6.x/responses#redirecting-with-flashed-session-data
-
Es una forma sencilla de mostrar mensajes de notificacion (flash, que desaparecen) despues de alguna peticion del usuario.
-
el mensaje se guarda en la sesion, cuando redireccionamos a una view podemos mostrar el mensaje.
-
Ventajas de uso: al refrescar no pide repetir acción y borra el mensaje, no es obligatorio usar pagina nueva y se procesa el mensaje con blade.
-
Notificaciones para los REST: store,update y destroy.
-
Pasos:
- redireccionar a la view donde queremos mostrar el mensaje.
return back()->with('keyStatus','Mensaje');
return redirect()->with('keyStatus','Mensaje');
- con
with('key','mensaje')
guarda el mensaje en session en el key. - con las directivas de blade procesamos el mensaje.
@if (session('MensajeStatus'))
- hay mensaje?{{session('MensajeStatus')}}
- mostrar mensajes - se puede mostrar el menesaje en el layout.
-
Documentacion: https://laravel.com/docs/5.7/authentication
-
comando make:auth en laravel6 https://www.youtube.com/watch?v=cjIMSNQ27Mg
-
profundizar en autenticacion de usuarios: https://aprendible.com/series/autenticacion
-
Pasos:
-
implementar COMANDO:
>php artisan make:auth
automatiza el login,registro y Reestablecimiento de contraseñas. -
Ofrece la siguiente Estructura:
- agrega el comando en
auth:routes();
en routes/web.php, este contiene las routas mencionadas a continuarion. - agrega los controladores en: controllers/Auth/
- agrega el comando en
-
Login, cierre de sesion: controller: LoginController routes: GET /login // para mostrar el formulario de LOGIN POST /login // donde se envia el formulario del login POST /logout // para cerrar sesiones view: /views/auth/login.blade.php /views/layouts/app.blade.php
-
formulario de registro: controller: RegisterController Routes: GET /register // para mostrar el formulario de REGISTRO POST /register // donde se envia el formulario de REGISTRO View: /views/auth/register.blade.php /views/layouts/app.blade.php
-
Configurar Re-direccionamiento:
/home
: Acceso solo a usuarios autentificados "luego de login"/
: raiz, acceso publico. Para este ejemplo, no utilizaremos ninguna ruta/home
, por lo tanto, se mostrara solo la ruta raiz/
para usuarios invitados como autentificados.-
Se elimina la ruta
/home
y el controladorHomeController
Agregados por elmake:Auth
-
Por defecto, luego de registrar al usuario se "inicia sesion" al usuario automáticamente y re-direcciona a
/home
. Se cambiara el re-direccionamiento a/
enRegisterController.php
-
Por defecto, se re-direcciona a
/home
luego de hacer "login" se cambia a la ruta/
enLoginController
. -
Por defecto, a los usuarios autentificados las rutas
/register
y/login
re-direccionan a/home
cambiar a/
en:Controller/Middleware/RedirectIfAuthenticated
. -
para manejar sesiones en UI con blade se manejan los comandos:
-
`{{auth()->user-name }}` // acceder a datos de usuario autentificado `@auth` evitar error.
@auth
// ejecuta comandos si, se esta autentificado.@guess
// ejecuta comandos si, NO se esta autentificado.@else
// el contrario -
Cerrar session:
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
-
deshabilitar registro o login ej.
auth::routes(['register' => false]);
-