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/predis

Pacchetti Base sviluppo:

Standards: https://bit.ly/2I2eA6h

Auth Scaffolding

Daniele Barbaro

composer require laravel/ui
php artisan ui:auth

Laravel 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 --all
php artisan make:request ProductRequest
php artisan make:observer ProductObserver

Creiamo 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