Laravel Push Notifications



Daniele Barbaro
Daniele Barbaro

Classe 84, workaholic, inge, in eterna lotta per la conquista del mondo. Da ormai 10 anni ha fatto del PHP la sua arma di conquista.
Cosa ci faccio qui?
Capire:
- chi è il bel capellone che parla
- brevemente cos'è Laravel
- come si gestiscono le notifiche senza paura in un progetto

Daniele Barbaro
Laravel
Il framework degli artigiani web
Laravel è un framework php sviluppato da Taylor Otwell come evoluzione/alternativa di CodeIgniter/Symfony.
Usa un pattern architetturale MVC e permette di avere un approccio logico e schematico di lavorare con il codice orientato agli oggetti.

Daniele Barbaro

Daniele Barbaro

Talk introduzione Laravel: https://bit.ly/2NL6LVY

Daniele Barbaro
Pro
- Artisan
- Documentazione
- Community
- Semplicità, leggibilità
- Packages
- ORM Eloquent
-
PSR-2 coding std and the PSR-4 autoloading std.
Contro
- ORM eloquent
- Oneman show framework
- accessibile a tutti
- troppa "magia"


Daniele Barbaro
Notifiche
Questo talk nasce dall'esigenza di capire, strutturare e affrontare al meglio la gestione delle notifiche in un progetto complesso evitando di perdere informazioni nella codebase .

Daniele Barbaro


Daniele Barbaro


Daniele Barbaro




Daniele Barbaro

Cominciamo

Daniele Barbaro
composer create-project --prefer-dist laravel/laravel shop-notifications
composer require --dev barryvdh/laravel-debugbar
composer require --dev barryvdh/laravel-ide-helper
composer require --dev phpunit/phpunit
composer require --dev squizlabs/php_codesniffer
composer require --dev rap2hpoutre/laravel-log-viewer
composer require doctrine/dbal
composer require guzzlehttp/guzzle
composer require predis/predisPacchetti Base sviluppo:
Standards: https://bit.ly/2I2eA6h

Auth Scaffolding

Daniele Barbaro
composer require laravel/ui
php artisan ui:authLaravel offre un layer base di autenticazione e registrazione semplicemente con un comando
Product
Costruzione entità base per il progetto
Creiamo migration, Model, Controller, la Factory, Seeder

Daniele Barbaro
php artisan make:model Product --allphp artisan make:request ProductRequest
php artisan make:observer ProductObserverCreiamo la request e l'observer

Daniele Barbaro

Requests
Gestiamo le requests dei controller in maniera efficiente
Decidiamo rules, auth e messages per gestire al meglio e in maniera atomica ogni singola richiesta

Daniele Barbaro
Observers
Isoliamo le notifiche e deleghiamo agli observer il lavoro
Mettendoci in ascolto sulle "azioni" created, updated dobbiamo scrivere in un solo punto le notifiche

Daniele Barbaro

<?php
namespace App\Observers;
use App\Models\Product;
use App\Notifications\ProductUpdatedNotification;
use Illuminate\Support\Facades\Notification;
class ProductObserver
{
/**
* Handle the product "created" event.
*
* @param Product $product
* @return void
*/
public function created(Product $product)
{
//
}
/**
* Handle the product "updated" event.
*
* @param Product $product
* @return void
*/
public function updated(Product $product)
{
//
}
}
Product Controller

Daniele Barbaro


Daniele Barbaro
ProductController:
public function __construct()
{
$this->middleware('auth')->except('index');
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return view('products.form');
}
/**
* Store a newly created resource in storage.
*
* @param ProductRequest $request
* @return RedirectResponse
*/
public function store(ProductRequest $request)
{
try {
$product = new Product();
$product->fill($request->validated())->save();
} catch (\Exception $exception) {
abort($exception->getCode(), $exception->getMessage());
}
return redirect()->route('products.index');
}

Daniele Barbaro
ProductController:
/**
* Show the form for editing the specified resource.
*
* @param Product $product
* @return View
*/
public function edit(Product $product)
{
return view('products.edit', [
'product' => $product
]);
}
/**
* Update the specified resource in storage.
*
* @param ProductRequest $request
* @param Product $product
* @return RedirectResponse
*/
public function update(ProductRequest $request, Product $product)
{
try {
$product->fill($request->validated())->save();
} catch (\Exception $exception) {
abort($exception->getCode(), $exception->getMessage());
}
return redirect()->route('products.index');
}Routes

Daniele Barbaro
Auth::routes(['verify' => true]);
Route::get('/home', 'HomeController@index')->name('home');
Route::resource('products', 'ProductController')->only([
'create', 'store', 'update', 'index', 'edit'
]);
Daniele Barbaro


Daniele Barbaro

Tests tests and Tests!

Daniele Barbaro
php artisan make:test ForgotPasswordTest
php artisan make:test LoginTest
php artisan make:test RegisterTest
php artisan make:test ResetPasswordTest
php artisan make:test ProductUpdateNotificationTest
php artisan make:test PostNewProductTest
php artisan make:test UpdateProductTest
Daniele Barbaro


Daniele Barbaro


Daniele Barbaro
Notification Time!
Scrivimi a
barbaro.daniele@gmail.com
antani@iakta.it

Daniele Barbaro
Grazie!
https://github.com/danielebarbaro/shop-notifications
https://slides.com/danielebarbaro/laravel-push-notifications
Laravel Push Notifications
By Daniele Barbaro
Laravel Push Notifications
- 572