Laravel 1 Flashcards
Cómo se crea un proyecto en laravel con composer?
En la terminal:
composer create-project laravel/laravel nombre-del-proyecto
Qué es artisan?
Es una linea de comandos creada para poder trabajar con laravel. Nos da comandos pre-establecidos. Para usarla siempre se pone php antes.
Ej. en la terminal:
php artisan comando-a-usar
Cómo hacemos para ejecutar el server con artisan?
php artisan serve
Cómo funcionan las vistas (views) con Laravel?
Laravel usa blade:
Es un motor de plantillas que permite abrir directivas en vez de <?php ?> en el html.
Estas directivas funcionan entre bloques del tipo
@if(condicion) codigo @endif
y entre {{}} para imprimir cosas:
<h2> {{ $obj->name }} </h2>
Dónde se encuentras las rutas (routes) de mi aplicación?
Se encuentran en la carpeta “routes” en el archivo web.php
Cómo hacemos para usar en model desde el controlador?
Arriba de todo hay que poner:
use App\Models\Category;
y despues para usarlo tengo que llamarlo con mayuscula (en este ejemplo haría Category) y para usar un método de la clase de ese objeto lo llamo con :: (doble dos puntos).
Ejemplo:
Quiero un array de todas las categorias, entonces hago:
$categories = Category::all();
y ahora tengo un array de todas las categorias en $category.
Cómo levanta el router un request y que necesita para hacerlo?
1) Primero necesito llamar arriba a los controllers y al Router. Eso lo hago así:
use Illuminate\Support\Facades\Route; use App\Http\Controllers\TodosController; use App\Http\Controllers\CategoriesController;
2)Después uso Route y llamo al método que requiero. Por ejemplo un get y le paso la ruta que va a pedir desde el navegador, el controller que tiene que usar y le pongo name en el caso de que en la applicación le de un nombre distino a la ruta.
Route::get('/tareas', [TodosController::class, 'index'])->name('todos');
Qué es cada parte de la siguiente linea de código del router?
Route::get(‘/tareas’, [TodosController::class, ‘index’])->name(‘todos’);
Route : : get ( ‘/tareas’, [ TodosController : : class, ‘index’ ] ) -> name( ‘todos’ );
1) Usa el Router y su método estático get
2) Los parametros que se le pasan son
- La ruta que se pasa desde la url
- Un array con el controller y separado por coma, el método del controller a usar.
- el name indicando que en la app se lo llama por la ruta ‘todos’.
Cómo se hace una plantilla para rellenarla con contenido?
Se hace una view por ejemplo app.blade.php
En esa view se hace el html y en la parte donde quiero que se le inyecte contenido pongo @yield(‘content’)
Para usar esa plantilla hago otra view y desde ella llamo a app poniendo al principio del archivo
@extends(‘app’)
Luego pongo @section(‘content’) y entre esa directiva y su fin ( @endsection ) pongo el contenido de ese archivo.
Ej.
@extends(‘app’)
@section(‘content’)
<div>Hola</div>
@endsection
Cómo haces en el router si queres retornar directamente un vista?
Router::get ( ‘/todos’ , function ( ){
return view ( ‘todos.index’);
}
Entonces retorna la vista index que está en la carpeta todos dentro de las views.
Qué son las migraciones?
Las migraciones en la Laravel son como un control de versiones de la base de datos, las cuales nos permiten gestionar de una mejor manera los cambios que se van realizando con el tiempo.
Permiten definir y aplicar cambios en la estructura de la base de datos de forma ordenada y sencilla.
Es lo que usamos en la base de datos en vez de queries.
Hacen referencia a un control de versiones para nuestra base de datos.
Se usan como una capa de abstracción llamada eloquent.
Qué es un ORM?
Object Relational Mapper: un mapeador relacional de objetos.
Un ORM es un modelo de programación que permite mapear las estructuras de una base de datos relacional.
Qué te permite hacer eloquent?
Eloquent es un ORM que nos facilita el contacto de nuestra aplicación en Laravel con una base de datos relacional donde solo tendremos que hacer un llamado al modelo de la entidad que se necesita y empezar a operar sobre ella desde el controlador.
Tener una relación entre nuestras tablas y nuestros modelos.
Cómo se crea un nuevo modelo con su respectiva tabla?
1) Si todavia no la cree, creo la db en mysql. (CREATE DATABASE ejemplo) y la agrego en .env donde dice DB_DATABASE=nombre-de-mi-db
2) En la terminal:
php artisan make:model Nombre-del-modelo -m
el -m es de migration. Es para que cuando cree el modelo también cree su migración.
3)voy a la carpeta database busco la de migrations en el proyecto y busco el archivo que tiene fecha_create_todos_table
En ese archivo agrego los campos que necesita mi tabla en la public function up.
Ejemplo:
public function up() { Schema::create('todos', function (Blueprint $table) { $table->id(); $table->string('title'); $table->timestamps(); }); }
Defino de esa manera si el campo es string, o integer etc.
4) Por último voy a la terminal y corro la migración:
php artisan migrate
Si me equivoqué en en mi tabla y ya hice la migración, como hago para deshacer la migración y corregir mi error?
corro en la terminal:
php artisan migrate:rollback
eso deshace la migración y puedo y me permite hacer los cambio que necesite y despues volver a correrla.
Donde están los controllers en el proyecto?
App=>Http=>Controllers
Cómo creo un controlador?
php artisan make:controller TodosController
atención que se pone en plural xq TodosController, CategoriesController, …etc.
Cuál es la convención de nombres para los métodos en Laravel?
index -> para mostrar todos los elementos
store -> para guardar un elemento
update -> para actualizar un elemento
destroy -> para eliminar un elemento
edit -> para mostrar el formulario de edición
Donde trabajo los métodos de los objetos?
En el controlador.
Ejemplo:
class TodosController extends Controller
{
public function store(){
….
}
}
Cómo se hace la validación de un elemento que quiero insertar en mi base de datos?
Dentro del método store en el controller uso el metodo de la request llamado validate. A validate se le pasa un array asociativo donde se define que se espera de cada campo de la tabla.
Ejemplo
public function store(Request $request){ $request -> validate([ 'title'=>'required|min:3' ]) $todo=new Todo; $todo->title = $request->title; $todo->save(); return redirect()->route('todos')->with('success','tarea agregada correctamente'); }
De esta manera se establece que el campo title tiene que ser required y tiene que tener un mínimo de 3 caracteres.
Cómo se le da al método store acceso a la request?
se le escribe como parámetro Request $request
Ejemplo:
public function store(Request $request){ $request -> validate([ 'title'=>'required|min:3' ]) }
Como se escribe el método store en el controller?
use App\Models\Todo;
class TodosController extends Controller { public function store(Request $request) { $request -> validate([ 'title'=>'required|min:3' ]) $todo=new Todo; $todo->title = $request->title; $todo->save(); return redirect()->route('todos')->with('success','tarea agregada correctamente'); } }
Cómo se levanta el post para guardar un elemento en la bd desde route?
En routes/web.php
use App\Http\Controllers\TodoController;
Route : : post ( ‘/todos’, [ TodosController : : class, ‘store’ ]);
Cómo hago si quiero cambiar el nombre de la ruta sin tener que cambiar todo el código?
uso ->name(‘…….’);
Ejemplo:
si tengo :
Route : : post ( ‘/todos’, [ TodosController : : class, ‘store’ ]);
pero quiero que ahora desde el navegador se use tareas entonces :
Route : : post ( ‘/tareas’, [ TodosController : : class, ‘store’ ])->name( ‘todos’ );
Cómo hago para que el formulario envie el post a la ruta correspondiente? Por ejemplo en el caso del post para hacer un store.
Uso route():
<form method="POST" action="{{route('todos')}}"> .... </form>
Qué necesitan todos los formularios para funcionar por temas de seguridad?
Necesitan el CROSS SITE REQUEST FORGERY
@csrf
Cómo se agrega un if en una view?
@if(condicion)
<div>cumple condición</div>
@endif
Cómo recibo los mensajes de confirmación que el controller envía para confirmar que realizó una accion?
Por medio de session(‘key’).
Por ejemplo si se agrego algo correctamente el controller manda un array associativo con la key ‘success’
@if(session(‘success’))
<h6>{{ session('success') }}</h6>
@endif
Cómo se maneja un error de validación en las views para mostrar el mensaje?
se usa @error con la variable $message
Ejemplo:
@error(‘title’)
<h6>{{ $message }}</h6>
@enderror
Cómo se hace el boton de delete en el form?
Se usa un form:
<form action="{{route(todos-destroy, [$todo->id])}}" method="POST"> @csrf @method('DELETE') <button> eliminar </button> </form>
Cómo hago la route para delete?
Route::delete(‘/tareas/{id}’, [TodosController::class, ‘destroy’])->name(‘todos-destroy’);
el query parameter se pone despues de / y entre {}
Cómo hago el controller para delete?
public function destroy($id){
$todo=Todo::find($id);
$todo->delete();
return redirect()->route(‘todos’)->with(‘success’,’tarea eliminada correctamente’);
}
Cómo se hace el link para ir al form para modificar algo?
< a href=”{{ route ( ‘todos-show’, [‘id’=>$todo->id ] ) }}”>
{{$todo->title}}
</a>
Cómo se hace el route para tomar la request hacia el form de modificar algo?
Route::get(‘/tareas/{id}’, [TodosController::class, ‘show’])->name(‘todos-show’);
Cómo es el método en el controller que permite el show by id en el form de modificar?
public function show( $id ) {
$todo=Todo::find($id);
return view(‘todos.show’, [‘todo’=>$todo]);
}
Atención aca retornar la vista de show que esta dentro de la carpeta de todos, por eso hace todos.show .
Es distinto cuando hace un route a todos-show porque ahi esta llamando al controllador.
Cómo hago el form para que muestre el elemento a modificar y mande a hacer la modificación?
<form action="{{route( 'todos-update',['id'=>$todo->id])}}" method="POST"> @csrf @method('PATCH') <input name='title' type='text' value="{{$todo->title}}"> <button > send </button> </form>
Cómo hago el route para levantar el update?
Route::patch(‘/tareas/{id}’, [ TodosController::class, ‘update’])->name(‘todos-update’);
Cómo se hace una la función de update en el controller?
public function update(Request $request, $id){ $request->validate([ 'title'=> 'required|min:3' ]); $todo=Todo::find($id); $todo->title=$request->title; $todo->save(); return redirect()->route('todos')->with('success','Tarea actualizada con exito.'); }
Cómo se hace una la función de update en el controller?
public function update(Request $request, $id){ $request -> validate([ 'title'=> 'required|min:3' ]); $todo=Todo::find($id); $todo->title=$request->title; $todo->save(); return redirect()->route('todos')->with('success','Tarea actualizada con exito.'); }
Cómo se hace un console log de la request?
dd($request);
Qué es resource controller?
Un Resource Controller en Laravel es un tipo especial de controlador que se utiliza para gestionar las operaciones CRUD (crear, leer, actualizar y borrar) relacionadas con un recurso.
Cómo se hace un resource controller?
php artisan make:controller CategoriesController --resource
cuando hacemos esto laravel crea directamente todas las public functions en el controlador (aunque nosotros tenemos que hacer el funcionamiento de estas).
Cómo ves la lista de rutas disponibles en tu aplicación?
php artisan route:list
Cómo se ve el status de una migración?
php artisan migrate:status
Cómo se crea una tabla que tiene un campo en común con otra?
Checkear bien cuál es el orden porque no estoy segura.
1) php artisan make:migration add_category_id_to_todos_table –table=todos
2)Después en el archivo de migrations add_category_id_to_todos_table:
public function up(){ Schema::table('todos', function(Blueprint $table){ $table->biginteger('category_id')->unsigned(); $table ->foreign('category_id'); ->reference('id'); ->on('categories'); ->after('title'); }) }
3) corro la migracion php artisan migrate
4)En el category model:
use App\Models\Todo class category extends model{ use hasFactory; public function todos(){ return this->hasMany(Todo::class) } }
Cómo se maneja desde el router un controlador que es resource?
Para poder usar estos recurse tenemos que hacer el siguiente router:
use App\Http\Controllers\CategoriesController; Route::resource('categories', CategoriesController::class);
y esto maneja todo, no hace falta hacer más routes, esa sirve para todo.