vuoi
o PayPal
tutte le volte che vuoi
$HOST.
Se in un file contenente solo codice php, è buona norma non chiudere la tag php, quindi lasciarla
aperta.
Instanza della classe PDO (PHP Data Object) è un oggetto che mi permette di accedere ad un
database (no tramite sqli).
Il vantaggio del PDO è ci permette di avere più portabilità. I meteodi PDO sono indipendenti dal
tipo di database con cui ci
si interfaccia. Solo primo parametro nel PDO è obbligatorio (configura connessione: valore host che
contiene db cui mi voglio
connettere, il secondo è il nome del db cui mi voglio connettere). $pdo = null chiude la
connessione. Tre metodi rilevanti che posso
applicare all'oggetto pdo :
- exec() : esegue istruzione SQL, e ritorna num di righe interessate dall'istruzione richiesta, viene
usata per insert/delete/update
- query() : esegue istruzione SQL, però ritorna dati prodotti, difatti è usata per le select
- prepare() : esecuzione differita, preparo istruzione e posso lasciare vuoti alcuni parametri della
richiesta, che poi posso passare
successivamente.
Gli ultimi due restituiscono un oggetto di classe PDOStatement, che hanno a sua volta dei
predefiniti metodi:
-bindParam($parm, $value) : associa il valore $value al parametro $parm definito nella prepare() in
maniera generica nella prepareu
-execute($params) : eseguo il comando prepared
-fetch($mode) : estraggo uno dei dati estratti in sequenza (fetch assoc nella mysqli)
-fetchAll($mode) : estraggo tutti i dati
PDO:FETCH_ASSOC -> dati estratti in maniera associativo.
PDO::FETCH_NUM -> dati estratti come array associativo con indice che è data dalla posizione
del valore.
PDO::FETCH_OBJ -> estrae dati come oggetto (uno per ogni libro ad esempio)
05/05/2025
6️-LARAVEL
componenti principali:
-Blade : processo nell'applicazione laravel che gestisce le viste. Hacker spesso inseriscono
all'interno di una form del testo che rappresenta un
codice PHP. Per questo PHP ha creato un meccanismo di sanificazione in cui si prende in
input una stringa tutti i caratteri speciali
e si trasfomano in codice UNICODE. Esempio {{ $username }}.
Ecco alcune direttive che poi vengono compilate in PHP, queste permettono di scrivere HTML con
direttive personalizzate (@if @foreach) che
semplificano il codice.
@auth @endauth -> fai vedere questo solo se ho utente autenticato
@guest @endguest -> fai vedere questo solo se ho utente non autenticato
bisogna anche gestire direttive riguardanti comunicazione tra client e server (possibile codice
hacker). Tramite @csrf si genera un codice
univoco CSRF all'interno di un form. Laravel verificherà che token sia valido prima di accettare
richiesta (solitamente POST/PUT/DELETE)
@error @enderror gestione errore form
@include consente di includere all'interno di una vista un altra vista
@extends questa vista eredita
@parent vista che è imparentata con un altra vista
@section @endsection parti di vista che posso richiamare
@yield('nome') in Laravel Blade crea uno "spazio vuoto" (placeholder) in un layout principale.
Serve a dire: "Qui dentro verrà messo qualcosa dalla
pagina figlia". @section riempie quel segnaposto nella view, e @extends indica quale layout
estendere.
-Artisan: : linguaggio di comandi definito per gestire creazione applicazione laravel. Permette di
attivare comandi (codificati come script PHP) che
permette di...
Ecco alcuni esempi di comandi
-list: ottengo la lista di tutti i comandi artisan
-make:controller <controller_name> : serve per creare automaticamente un nuovo controller in
Laravel
optimize:clear : cancella tutte le cache (comando da effettuare quando ho errori che non riesco a
capire).
Primo passaggio nella creazione di una applicazione web è la gestione delle rotte. Nella cartella
fileweb.php contieme tutte le rotte della nostra
applicazione.
Route::get definisco cosa deve fare il laravel quando riceve quel URl con richiesta di tipo get (al
posto di get ci posso mettere post). Il secondo
parametro è l'azione che accade quando utente visita quel URL.
Route::get('/utente/{id}', [UtenteController::class, 'mostra']); Qui {id} è un parametro dinamico e
laravel lo passerà al metodo mostra($id) del
controller.
Ricorda : un ancora manda sempre richiesta di tipo GET!!!
12/05/2025
slide 16️ laravel
Non c'è l'obbligo di scrivere tutto in raw SQL o in query builder o eloquent.
Eloquent ORM è un wrapper che gestice i dati di tipo relazionale (es: da un database relazionale)
trasformandoli in oggetti.
Eloquent e' un meccanismo di mappattura che assegna ogni tabella del mio database ad un oggetto
php.
E' una sorta di query builder più potente, in cui non vedo più la tabella ma mi ritrovo direttamente
una classe che mappa la tabella stessa.
In automatico ad ogni tabella del mio DB con lettera minuscola iniziale si va a generare grazie
all'eloquent una classe con lettera maiuscola iniziale
con eliminazione della 's' finale.
Posso cambiare i valori convenzionali come il nome della tabella, con $table a cui assegnerò il
valore voluto.
Nella $request ci sono i dati che vogliamo memorizzare nella nuova tupla.
metodo predefinito 'fill' che ha scopo di riempire oggetti.
metodo predefinito 'find' ci metto l'indentificatore dell'oggetto che voglio modificare.
metodo predefinito 'hasOne' mi permette di mettere due oggetti di due classi diverse in
corrispondenza :
- il primo parametro che prende è nome della classe
del model correlato
- Il secondo parametro è il nome della chiave esterna nella tabella correlata.
- il terzo parametro il nome della chiave locale
LaraProj2 -> prodotti saranno ordinati per percentuale di sconto decrescente
Model dell'applicazione
Costruiremo un model che si interfaccia con un DB. Creeremo Resource model (instanza di
Abstract Model Resource) da cui si creara un application model.
A ogni tabella sarà associata una classe (categoria e prodotto), ma ci servirà una superclasse che
permetterà di effettuare operazione ad entrambe le
tabelle. Il controller teoricamente non deve fare operazione sui dati, ma prenderli e basta , infatti ciò
è dovere del model.
Nella cartella Models ci vanno a finire le classi che rappresentano le tabelle del DB.
Grazie a laravel posso crare un file di migrazione che permette di salvare la struttura di una tabella
del DB (descrizione tabella), in modo tale
che poi posso tramite comando specifico crearla quando voglio, permette il versioning (tornare alla
versione precedente).
Nella cartella resources classi associate ad ogni singola tabella.
Nella cartella seeders invece ci vanno i dati da inserire nelle tabelle.
L'application model è classe unica che ha i metodi che fanno uso delle classi che sono presenti nelle
singole tabelle.
Migration
.....
up() cosa fare alla creazione
down() ...
Seeding
Il metodo run() serve nella parte di seeding per popolare le tabelle con valori salvati nella cartella
seeders.
Paginazione dei dati da DB
Processo in cui dati estratti vengono visualizzati in blocchi detti pagine. paginate prende unico
parametro, cioè numero di risultati per pagina.
Il metodo paginate() incapsula i dati in un oggetto nel quale vengono definiti metodi utili per la
gestione della paginazione a livello visivo.
Il processo di paginazione viene gestito da laravel, è il laravel che genera i dati e i link della
paginazione, ma è il client che fa richiesta al server
per cambiare pagina.
I parametri del PDO vengono definiti nel file database.php
13/05/2025
Application model avrà tutte le funzioni necessarie per il nostro controller, mentre resource model...
Si può fare override delle proprietà della classe model (come vediamo nel laraproj2 nel file
Category.php, dove estendo la classe model alla classe
Product, nella quale andremo a fare ovveride $table, $primaryKey e $timestamps, oltre a creare
funzioni getPrice() e prodCat() ).
$paginator->firstItem () restituisce l'id del primo item della pagina corrente.
$paginator->total () resituisce numero di item totali.
$paginator->url(..) serve per ottenre URL completo per una pagina specifica della paginazione.
$paginator->hasMorePages() se true significa che ci sono ancora altre pagine da scorrere.
Consiglio : fare un diff fra laraProj1 e laraProj2
laraProj3 : aggiunta area amministrazione in cui si può fare inserimento prodotto all'interno del
catologo
Laravel permette il caricamento di file in modo tale da permettere l'upload di due file di stesso
nome da due dispositivi diversi, questo grazie a un
algoritmo che salva i file con un nome casuale e in modo che non sia salvati con lo stesso identico
file.
16️/05/2025
Se utente clicca su ancona 'Amministratore' aprire la nuova pagina dedicata agli amministratori
(nuova rotta), questa pagina avrà una navbar diversa di quella
presente sulle altre rotte.
Ricorda pt2!!! le ancore mandano sempre metodo GET -> non invia dati nel corpo della richiesta,
tutti i parametri (se presenti) vengono passati nell'URL dopo
il ?.
Le immagini vengono spostate rispetto al laraProj2 nella cartella storage in una sottocartella
prodImg??.
Nel file di configurazione filesystems.php c'è la configurazione dei link...
Devo ricreare il link tra le due cartelle di immagini, tramite comando laravel -> php artisan
storange:link.
Nel file web.php aggiungiamo le nuove rotte rispetto a laraProj2.
File AdminController.php
Dobbiamo anche aggiungere inoltre il file AdminController.php. Se processo di validazione del
nuovo prodotto aggiunto da amministratore va a buon fine bisogna
creare una nuova instanza della classe prodotto (cioè un oggetto prodotto). $product lo riempio con
Qui devo anche estrarre l'immagine del prodotto inserito dall'amministratore per poi salvarlo sulla
sottocartella prodImg di public.
basename è metodo predefinito di laravel che estrae l'ultima parte della nostra stringa quindi
elimina tutto il percorso di cartelle ecc.. e lascia solamente
il nome del file che ci interessa.
Al termine di inserimento del nuovo prodotto da parte dell'amministratore si ritorna alla pagina
home dell'amministratore
app/Models/Resources ci aggiungiamo Admin.php
unica funzione che ci sara sarà getProdsCats() che ...
Per aggiungere nella navbar l'ancora Amministratore andiamo a aggiungere alla navbar un <a
href="{{route('amministratore')}}".
app/Http/Requests ci sarà file NewProductRequest.php ci saranno le regole di validazione per
aggiungere nuovi prodotti. (php artisan make:request è comando che
crea sche