Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Drupal può essere considerato un CMS che permette una rapida creazione di portali con funzionalità abbastanza standard, ma può anche essere considerato uno strumento usato per la creazione ditrumento usato per la creazione di siti usando le potenzialità di framework che lo strumento presenta.
In questo intervento verranno presentate le API del sistema che permettono una ampia espandibilità e velocità di scrittura di codice. Inoltre verrà descritta l’anatomia di un modulo presentandone la struttura e come questo interagisca con il sistema di base.
L’intervento chiuderà con una carrellata di vantaggi e svantaggi dell’uso di Drupal mettendone in evidenza la differenza dai classici framework
Le novità introdotte in TYPO3 CMS 7.3, nuova versione rilasciata il 16 giugno 2015.
A voi i commenti sulle nuove funzionalità introdotte, in attesa del rilascio LTS definitivo, che renderà questo cms ancora più veloce e stabile.
Drupal 8 - dal download del core alla pubblicazione in produzionesparkfabrik
Inizializzare una nuova installazione Drupal è una procedura un po' più tricky rispetto al passato. Cos'è cambiato? Cos'è il Configuration Management e come dovremo scrivere le nostre Feature? Di cosa dobbiamo tenere conto nello scrivere i nostri moduli? Una volta risposto a queste domande c'è da portare tutto in stage e successivamente in produzione in maniera sicura ed indolore magari automatizzando il tutto, se possibile.
Un breve talk per introdurre ad alcune funzioni native di Joomla! ( e del suo framework ) che ci permettono di riconsiderare il CMS a liverllo di sviluppo.
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Massimo Cenci
La naming convention è una componente fondamentale di ogni progetto informatico.
L’obiettivo di questo articolo è quello di suggerire uno standard di nomenclatura
pratico ed efficace per un progetto di Data Warehouse.
(parte 1)
Descrizione dei componenti principali di Xamarin che permettono di comporre interfacce grafiche usando Xamarin.Forms. Principali layout manager di Xamarin From StackLayout, AbsoluteLayout, RelativeLayout, Grid e ListView
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriGrUSP
Joomla! è un CMS ritenuto troppo spesso una soluzione esclusivamente for dummies : in questo intervento cercheremo di sfatare questa convinzione andando ad analizzare le feature che la versione 1.5 ha “introdotto” a favore degli sviluppatori.
Verranno proposte, per ogni capitolo del talk, slide introduttive e di approfondimento, concludendo con un case study per ogni tematica proposta.
Obiettivo del talk sarà quello di comprendere quanto Joomla! sia una soluzione che offre grandi vantaggi fondendo abbattimento di costi, elevata relazionabilità con il cliente finale e buona estendibilità per le esigenze dello sviluppatore.
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Drupal può essere considerato un CMS che permette una rapida creazione di portali con funzionalità abbastanza standard, ma può anche essere considerato uno strumento usato per la creazione ditrumento usato per la creazione di siti usando le potenzialità di framework che lo strumento presenta.
In questo intervento verranno presentate le API del sistema che permettono una ampia espandibilità e velocità di scrittura di codice. Inoltre verrà descritta l’anatomia di un modulo presentandone la struttura e come questo interagisca con il sistema di base.
L’intervento chiuderà con una carrellata di vantaggi e svantaggi dell’uso di Drupal mettendone in evidenza la differenza dai classici framework
Le novità introdotte in TYPO3 CMS 7.3, nuova versione rilasciata il 16 giugno 2015.
A voi i commenti sulle nuove funzionalità introdotte, in attesa del rilascio LTS definitivo, che renderà questo cms ancora più veloce e stabile.
Drupal 8 - dal download del core alla pubblicazione in produzionesparkfabrik
Inizializzare una nuova installazione Drupal è una procedura un po' più tricky rispetto al passato. Cos'è cambiato? Cos'è il Configuration Management e come dovremo scrivere le nostre Feature? Di cosa dobbiamo tenere conto nello scrivere i nostri moduli? Una volta risposto a queste domande c'è da portare tutto in stage e successivamente in produzione in maniera sicura ed indolore magari automatizzando il tutto, se possibile.
Un breve talk per introdurre ad alcune funzioni native di Joomla! ( e del suo framework ) che ci permettono di riconsiderare il CMS a liverllo di sviluppo.
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Massimo Cenci
La naming convention è una componente fondamentale di ogni progetto informatico.
L’obiettivo di questo articolo è quello di suggerire uno standard di nomenclatura
pratico ed efficace per un progetto di Data Warehouse.
(parte 1)
Descrizione dei componenti principali di Xamarin che permettono di comporre interfacce grafiche usando Xamarin.Forms. Principali layout manager di Xamarin From StackLayout, AbsoluteLayout, RelativeLayout, Grid e ListView
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriGrUSP
Joomla! è un CMS ritenuto troppo spesso una soluzione esclusivamente for dummies : in questo intervento cercheremo di sfatare questa convinzione andando ad analizzare le feature che la versione 1.5 ha “introdotto” a favore degli sviluppatori.
Verranno proposte, per ogni capitolo del talk, slide introduttive e di approfondimento, concludendo con un case study per ogni tematica proposta.
Obiettivo del talk sarà quello di comprendere quanto Joomla! sia una soluzione che offre grandi vantaggi fondendo abbattimento di costi, elevata relazionabilità con il cliente finale e buona estendibilità per le esigenze dello sviluppatore.
Slide e riferimenti al codice del Meetup del 28/02/2019 del Vue JS Milano dove parlo di creazione di componenti, passaggio di parametri, computed properties
Enterprise Applications - Angular Day 2018Paolo Galfione
Angular 6 introduce il concetto di workspace per la creazione di applicazioni Angular aziendali complesse e articolate. Grazie ad un approccio basato sul pattern mono-repo un workspace può contenere più applicazioni e librerie condivisibili tra le applicazioni stesse. Vedremo come progettare un workspace e sfruttare la potenza dei nuovi @angular-devkit/schematics per automatizzare la generazione di codice applicativo pronto all’uso
Prepariamoci al cambiamento. ASP.NET MVC e ASP.NET Web API saranno unificati in un unico framework chiamato ASP.NET MVC 6, e questo è solo la prima di una serie di novità che stanno per arrivare.
Tutto si semplifica. Le performance migliorano. Un altro salto tecnologico in avanti portato da ASP.NET 5.
In questa sessione, infatti, vedremo tutte le novità che ASP.NET MVC 6 porta con se, e cercheremo di andare in dettaglio in modo da capire cosa voglia dire realizzare (da zero) o migrare (un'applicazione essitente) a questa nuova versione
Corso base linux, percorre i concetti fondamentali per l'amministrazione di una distribuzione linux. In particolar modo, ci sofferma su: file system, partizionamento, shell, bash, kernel, distribuzioni, amministrazione utenti, sicurezza e cron. Sono presenti alcuni esercizi pratici di programmazione bash per una comprensione pratica dello strumento.
2. Corso Laravel di B. Ferrari2
Laravel
Laravel è un Framework PHP free e opensource, creato da
Taylor Oftwell, ideato per applicazioni Web MVC basato su
Symphony.
Si interfaccia con database relazionali tramite ORM (Object
Relational Mapper) e ha un sistema di routing estremamente
flessibile e configurabile.
3. Corso Laravel di B. Ferrari3
MVC
MVC è l’acronimo di Model View Controller, rappresenta
l’architettura adottata dagli sviluppatori per lo sviluppo del
software. Questo pattern separa l’applicazione in 3 parti, il
model, la view e il controller.
Il Model gestisce il comportamento di base e la gestione dei
dati dell’applicazione. La View gestisce l’interfaccia grafica e
renderizza i dati in una forma tale che questi vengano
visualizzati correttamente. I Controller ricevono gli input
dall’utente, mettono in comunicazione i model con le view.
5. Corso Laravel di B. Ferrari5
ORM
Object-relational mapping è una tecnica per convertire tipi usando un
linguaggio orientato agli oggetti. Viene spesso usato con database
relazionali per renderli compatibili con modelli ad oggetti.
ES. SQL query
SELECT * FROM Flights WHERE active = 1 ORDER BY name
Es. Laravel ORM
$flights = AppFlight::where('active', 1)
->orderBy('name')
->get();
6. Corso Laravel di B. Ferrari6
Composer
Composer è uno strumenti per gestire dipendenze fra i
componenti software PHP, detto Dependency management.
Laravel utilizza Composer per gestire le proprie dipendenze.
Prima di poter utilizzare Laravel è necessario essere sicuri di
avere installato composer sulla propria macchina.
7. Corso Laravel di B. Ferrari7
1 Installare Laravel
Su Windows
1. Installare XAMPP (https://www.apachefriends.org/)
2. Installare Composer (https://getcomposer.org/)
3. Riavviare
4. Installare laravel comando da dos: “composer global require
laravel/installer”
5. Creazione progetto dalla cartella di root (htdocs) su windows
C:xampphtdocs, es “laravel new FirstProject” dove FirstProject è
il nome del nostro primo progetto
6. Lanciare progetto aprire nel browser
http://localhost/FirstProject/public/
9. Corso Laravel di B. Ferrari9
1- Debug con Visual Studio Code
1 – Scaricare e installare Visual Studio Code da https://code.visualstudio.com/
2- Installare PHP debugging exension, per fare ciò dal menu principale scegliere View →
Extension → PHP Debug (Felix Beker)
3 – Lanciare Apache da XMPP Control Panel
4 – Scaricare xdebug Aprire url localhost/dashboard/phpinfo.php da questa pagina capiamo
che versione di php abbiamo installato, visitiamo il sito xdebug.org/download e scarichiamo la dll
corrispondente (es.php_xdebug-2.9.5-7.4-vc15-x86_64.dll)
5 - Installare xdebug andiamo a copiare la dll scaricata prima nella directory delle estensioni di
php (nel mio caso C:xamppphpext)
6 – Apriamo php.ini e aggiungiamo la configurazione per abilitare XDEBUG
[XDEBUG]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
zend_extension = C:xamppphpextphp_xdebug-2.9.5-7.4-vc15-x86_64.dll
10. Corso Laravel di B. Ferrari10
2- Debug con Visual Studio Code
7 – Verifica installazione: riavviamo il Apache e apriamo da
browser localhost/dashboard/phpinfo.php dovremmo vedere
l’estensione abilitata
11. Corso Laravel di B. Ferrari11
3- Debug con Visual Studio Code
8 – Configurazione Debug Apriamo un progetto PHP (es. apriamo una cartella C:xampp
htdocstestdebug conentente file index.php ) da icona debug o ctrl+shift+ D e aggiungiamo
configurazione per il debug cliccando su “create lunch.json file” e selezionare environment
PHP
13. Corso Laravel di B. Ferrari13
4- Debug con Visual Studio Code
9 – Avviare il debug premere tasto debug e Run listen for xDebug e aprire da
broswer il progetto che stiamo usando (es. http://localhost/testdebug) ora
impostando un breakpoint dovremmo osservare che all’apertura della pagina il
debug inizi a funzionare
14. Corso Laravel di B. Ferrari14
Struttura dell’applicazione
La struttura dell’applicazione è composta del cartelle e sotto
cartelle incluse in un progetto.
App è la cartella che contiene buona parte dei sorgenti
dell’applicazione model e controller;
- apphttpcontrollers dove sono presenti controllers;
- appresources qui troviamo i file per gli assets html, views e le
risorse l’internazionalizzazione;
- routes qui troviamo i punti di accesso all’applicazione web
- databasemigrations qui troviamo gli script di migrazione,
ovvero, gli script che permettono di trasformare il database in nelle
varie versioni necessarie per lo sviluppo dell’applicazione;
16. Corso Laravel di B. Ferrari16
Blade
Blade è un semplice e allo stesso potente mezzo che laravel
ci mette a disposizione per risolvere il problema dei template
in PHP.
I template permetto di non ripetere e di riutilizzare parti di
codice all’interno delle view.
Le view blade terminano con estensione .blade.php e sono
salvate tipicamente nella cartella resources/views
17. Corso Laravel di B. Ferrari17
1- Esempio view
Posso creare una view come salvata come
resources/views/greeting.blade.php
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
18. Corso Laravel di B. Ferrari18
2- Esempio view
Posso mostrare la view precedente da una route
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
Quello che accadrà è che verrà mostrata la pagina greeting e
al posto di {{ $name }} verrà sostituito con James
19. Corso Laravel di B. Ferrari19
1 - Blade definizione layout
I due benefici principali che blade apporta alle nostre
applicazione sono l’eredità e le sezioni.
Le view blade contengono HTML arricchito dalle direttive
@section, @yeld, @exetends e @parent.
20. Corso Laravel di B. Ferrari20
Ereditarietà e override di campi
In una view padre possono definire un titolo così:
@yield('title', 'Default Title');
Questo vuoldire che se alla view sarà definito ‘title’ verrà
mostrato ‘Default Title’.
Nella view figlio possono impostare title
@section('title','Custom Title')
21. Corso Laravel di B. Ferrari21
Ereditarietà e ovverride di sezioni html
In una view padre possono definire una sezione html così:
@section('some_div')
<h1>Default Heading1</h1>
<p>Default Paragraph <span>Default Span</span> </p>
@show
In una view figlia possono ridefinire una sezione html così:
@section('some_div')
@parent
<h1>Custom Heading1</h1>
<p>Custom Paragraph <span>Custom Span</span> </p>
@endsection
@parent mi permette di ripetere la sezione del padre nella view figlia
22. Corso Laravel di B. Ferrari22
Es. View 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>
<!-- Salvato in resources/views/layouts/app.blade.php -->
23. Corso Laravel di B. Ferrari23
Es. View Figlio
@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
<!-- salvato in resources/views/child.blade.php -->
24. Corso Laravel di B. Ferrari24
1 - Laravel 7 CRUD MySQL
1) Installare Laravel
composer create-project --prefer-dist laravel/laravel Blog
2) Creare database laravel e configurare credenziali database
Aprire il file .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=il nome del tuo database (laravel)
DB_USERNAME=il nome utente del tuo database (root)
DB_PASSWORD=la password del tuo database
25. Corso Laravel di B. Ferrari25
2 - Laravel 7 CRUD MySQL
3) Generare Model e Migrazione
Generiamo la tabella “product” e il suo migration file usando il
seguente comando:
php artisan make:model Product -m
Questo comando permette di creare un model con nome Product e
il migraton file per la tabella product con lla data corrente in
database/migrations/
2020_05_18_124707_create_products_table.php
In questo file andiamo ad inserire il seguente codice che ci
permette di creare una nuova tabella con campi id, title,
product_code, description e i timestamp (created_at e updated_at).
27. Corso Laravel di B. Ferrari27
4 - Laravel 7 CRUD MySQL
4 – Migrare ora per ottenere la creazione della tabella
eseguiamo la migrazione, con il seguente comando:
php artisan migrate
Questo ci permette di aggiornare il database all’ultima
versione, eseguendo un’operazione di migrazione ovvero una
trasformazione da una struttura del database a un’altra
28. Corso Laravel di B. Ferrari28
5 - Laravel 7 CRUD MySQL
5- Fillable property questo ci permette di determinare i campi
modificabili nella nostra tabella durante le operazioni di crud,
quindi aggiungiamo il seguente codice nel Model Product file
app/product.php
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Product extends Model
{
protected $fillable = [
'title',
'product_code',
'description',
];
}
29. Corso Laravel di B. Ferrari29
6 - Laravel 7 CRUD MySQL
6 – Resoruce route e Controller questo operazione ci
permette di creare il controller ProductController e al suo
interno i 7 metodi creati di default index, store, create, update,
destroy show e edit
php artisan make:controller ProductController --resource
Dopo questo comando eseguiamo una risorsa nel file di route,
quindi andiamo nel file routes/web.php e inseriamo il codice
seguente.
30. Corso Laravel di B. Ferrari30
Metodi controller
HTTP Verb Path (URL) Action (Method) Route Name
GET /product index product.index
GET /product/create create product.create
POST /product store product.store
GET /product/{id} show product.show
GET /product/{id}/edit edit product.edit
PUT/PATCH /product/{id} update product.update
DELETE /product/{id} destroy product.destroy
31. Corso Laravel di B. Ferrari31
7 - Laravel 7 CRUD MySQL
<?php
Route::get('/', function () {
return view('welcome');
});
Route::resource('products', 'ProductController');
32. Corso Laravel di B. Ferrari32
8 - Laravel 7 CRUD MySQL
8 – Implementazione del Controller:
Abbiamo ottenuto il controller con i vari metodi CRUD
dichiarati ma non implementati, quindi ora ci serve
implementare il metodi del controller
Apriamo il file del controller
app/HTTP/Controller/ProductController e andiamo a riempire i
metodi generato con il codice seguente.
33. Corso Laravel di B. Ferrari33
9 - Laravel 7 CRUD MySQL
namespace AppHttpControllers;
use AppProduct;
use IlluminateHttpRequest;
use Redirect;
use PDF;
class ProductController extends Controller
{
public function index()
{
$data['products'] = Product::orderBy('id','desc')->get();
return view('product.list',$data);
}
34. Corso Laravel di B. Ferrari34
10 - Laravel 7 CRUD MySQL
public function create()
{
return view('product.create');
}
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'product_code' => 'required',
'description' => 'required',
]);
Product::create($request->all());
return Redirect::to('products')
->with('success','Greate! Product created successfully.');
}
35. Corso Laravel di B. Ferrari35
10.1 - Laravel 7 CRUD MySQL
Action Create si preoccupa di mostrare la view
product.create tramite l’istruzione return view('product.create');
Action Store prende in ingresso un oggetto di tipo Request
che contiene i dati provenienti dalla form presente nella view
product.create. Questi dati vengono validati tramite metodo
validate, se la validazione fallisce verrà mostrata la
view.create con un oggetto $errors contente gli errori generati
dalla validazione.
Se la validazione va a buon fine viene eseguito il metodo
create del model Product e ad esso vengono passati i dati per
eseguire la query di insert a database
36. Corso Laravel di B. Ferrari36
11 - Laravel 7 CRUD MySQL
public function edit($id)
{
$where = array('id' => $id);
$data['product_info'] = Product::where($where)->first();
return view('product.edit', $data);
}
37. Corso Laravel di B. Ferrari37
11 - Laravel 7 CRUD MySQL
public function update(Request $request, $id)
{
$request->validate([
'title' => 'required',
'product_code' => 'required',
'description' => 'required',
]);
$update = ['title' => $request->title, 'description' => $request->description];
Product::where('id',$id)->update($update);
return Redirect::to('products')
->with('success','Great! Product updated successfully');
}
public function destroy($id)
{
Product::where('id',$id)->delete();
return Redirect::to('products')->with('success','Product deleted successfully');
}
}
38. Corso Laravel di B. Ferrari38
11.1 - Laravel 7 CRUD MySQL
Action Edit mostra recupera i dati del prodotto attraverso il
suo id, li passa alla view product.edit
Action Update riceve i dati del prodotto dalla view
product.edit esegue la validazione e se questa va buon fine
esegue l’aggiornamento dei dati a database tramite istruzione
Product::where('id',$id)->update($update);
39. Corso Laravel di B. Ferrari39
12 - Laravel 7 CRUD MySQL
9 – Implementazione delle view: a questo punto andremo a
comporre le views. Andiamo a creare una cartella product
all’interno della cartella app/resources/views/. Creiamo 4 files
- Layout.blade.php che andrà a contenere il layout principale
dell’applicazione
- List.blade.php la view che conterrà la lista dei prodotti
- Create.blade.php che conterrà la view per la creazione di
un prodotto
- Edit.blate.php che conterrà il modulo per editare un prodotto
44. Corso Laravel di B. Ferrari44
13 - Laravel 7 CRUD MySQL
10 – Lancio dell’applicativo a questo punto possiamo
lanciare l’applicativo usando il comando
php artisan serve --port=8080
E visualizzare il risultato nel browser all’indirizzo
http://localhost:8080/products
45. Corso Laravel di B. Ferrari45
Esercizio
Aggiunger per ogni riga delle tabella un pulsante che
mostra attraverso il metodo show tutti i dati della riga
selezionata