Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Why Puli?

Why Puli?

What is Puli? How can I use it in my application? Why is it the "next package revolution of PHP"?

Titouan Galopin

January 27, 2016
Tweet

More Decks by Titouan Galopin

Other Decks in Programming

Transcript

  1. Why Puli?
    Titouan Galopin
    SensioLabs University
    1

    View Slide

  2. About
    Titouan Galopin
    Puli core contributor
    puli.js lead developer
    @tgalopin // titouangalopin.com
    2

    View Slide

  3. Why this talk?
    3

    View Slide

  4. Agenda
    I. What’s Puli?
    II. How to use Puli in your
    application?
    III. Status of Puli and
    what’s coming in 2016
    4

    View Slide

  5. I. What’s Puli?
    5

    View Slide

  6. Currently in Packagist
    Libraries
    Symfony bundles
    Drupal modules
    Zend Framework modules
    Laravel packages
    What’s Puli?
    6

    View Slide

  7. All framework extensions
    do the same things
    What’s Puli?
    7

    View Slide

  8. Ideal world
    Libraries ✓
    Symfony bundles
    Drupal modules
    Zend Framework modules
    Laravel packages
    What’s Puli?
    8

    View Slide

  9. Why do we need
    framework extensions?
    What’s Puli?
    9

    View Slide

  10. What’s Puli?
    Application
    FOSUserBundle
    login.html.twig
    To simplify access to resources
    Before:
    return $this->render(
    __DIR__ . ‘/../../vendor/
    friendsofsymfony/user-
    bundle/Resources/views/Security/index.html.
    twig’
    );
    After:
    return $this->render(
    ‘FOSUserBundle:Security:login.html.twig’
    );
    10

    View Slide

  11. What’s Puli?
    Application translator
    FOSUserBundle
    messages.fr.xlst
    To autoload specialized files
    /FOS
    /UserBundle
    /Command
    /ActivateUserCommand.php <=
    /Controller
    /DependencyInjection
    /FOSUserBundleExtension.php <=
    /Resources
    /translations
    /messages.en.xlst <=
    /messages.fr.xlst <=
    /...
    11

    View Slide

  12. What’s Puli?
    To publish assets
    /web/bundles/fos-user-bundle
    /css
    /style.css
    /images
    /image.png
    /vendor/.../FOS/UserBundle
    /Resources
    /public
    /css
    /style.css
    /images
    /image.png
    12

    View Slide

  13. Puli replaces framework
    extensions by solving
    these 3 problems
    What’s Puli?
    13

    View Slide

  14. Three targets :
    Libraries developers
    Frameworks developers
    Applications developers
    What’s Puli?
    14

    View Slide

  15. Library developers
    A single config file
    and your library is
    available for everyone
    What’s Puli?
    15

    View Slide

  16. Frameworks developers
    Stop wasting efforts
    by reinventing the
    wheel
    What’s Puli?
    16

    View Slide

  17. Application developers
    Puli is usable in your
    application!
    What’s Puli?
    17

    View Slide

  18. II. How to use Puli in
    your application?
    18

    View Slide

  19. How to use Puli in your application?
    19
    Puli CLI
    vs
    puli.json

    View Slide

  20. How to use Puli in your application?
    20
    puli.json
    /app
    /src
    /vendor
    /web
    /composer.json
    /puli.json

    View Slide

  21. How to use Puli in your application?
    21
    Simplify access to resources

    View Slide

  22. How to use Puli in your application?
    22
    // puli.json
    {
    "resources": {
    "/app": "app/Resources",
    "/custom-library": "vendor/..."
    }
    }
    Simplify access to resources

    View Slide

  23. How to use Puli in your application?
    23
    require ‘vendor/autoload.php’;
    $puliClass = PULI_FACTORY_CLASS;
    $puli = new $puliClass();
    $repo = $puli->createRepository();
    Simplify access to resources

    View Slide

  24. How to use Puli in your application?
    24
    echo $repo->get('/app/views/index.html.twig')
    ->getBody();
    echo $repo->get('/app/views/index.html.twig')
    ->getFilesystemPath();
    echo $repo->get('/custom-library'.
    .'/views/index.html.twig')
    ->getFilesystemPath();
    Simplify access to resources

    View Slide

  25. meh.
    How to use Puli in your application?
    25

    View Slide

  26. puli/composer-plugin
    How to use Puli in your application?
    26

    View Slide

  27. Let library developers
    create their puli.json
    How to use Puli in your application?
    27

    View Slide

  28. How to use Puli in your application?
    28
    // /vendor/acme/custom-library/puli.json
    {
    "resources": {
    "/views": "views",
    ...
    }
    }
    Simplify access to resources

    View Slide

  29. How to use Puli in your application?
    29
    $ composer require acme/custom-library
    Updating dependencies (including require-dev)
    - Installing acme/custom-library (1.0.0)
    Downloading: 100%
    Synchronizing Puli with Composer
    Installing acme/custom-library
    Deleting the ".puli" directory
    Running "puli build"
    Simplify access to resources

    View Slide

  30. How to use Puli in your application?
    30
    echo $repo->get('/acme/custom-library'.
    .'/views/index.html.twig')
    ->getFilesystemPath();
    Simplify access to resources

    View Slide

  31. How to use Puli in your application?
    31
    Autoload specialized files

    View Slide

  32. How to use Puli in your application?
    32
    // your app puli.json
    {
    "resources": {
    "/app": "app",
    "/res": "app/Resources"
    },
    "provide": {
    "/app/config/services.yml": "symfony/services",
    "/res/translations/*.yml": "symfony/translations"
    }
    }
    Autoload specialized files
    Defined by Symfony to load your
    files using Puli
    $discovery->findBindings('...')

    View Slide

  33. How to use Puli in your application?
    33
    // /vendor/acme/custom-library/puli.json
    {
    "resources": {
    "/config": "res/config",
    "/translations": "res/translations"
    },
    "provide": {
    "/config/symfony-services.yml": "symfony/services",
    "/config/pimple-services.yml": "pimple/services",
    "/config/php-di-services.yml": "php-di/services",
    "/translations/*.xlst": "php-fig/xlst-translations"
    }
    }
    Autoload specialized files
    Usable by libraries!
    Binding are not necessarily
    used by the “consumer”

    View Slide

  34. How to use Puli in your application?
    34
    $ composer require acme/custom-library
    => Services available in your container
    => Translations available in your translator
    => Doctrine entities, Twig extensions, ...
    Autoload specialized files
    Plug’n’Play (even more than bundles!)

    View Slide

  35. How to use Puli in your application?
    35
    Publish assets

    View Slide

  36. How to use Puli in your application?
    36
    Coming in 2016: puli.js
    JS library to resolve Puli path in
    filesystem paths
    Publish assets

    View Slide

  37. How to use Puli in your application?
    37
    // gulpfile.babel.js
    gulp.task('babel', () =>
    gulp.src(puli.paths('/app/**/*.jsx')
    .pipe(babel())
    .pipe(ulgify())
    .pipe(header('(c) SensioLabs'))
    .pipe(gulp.dest('web/built/min.js'))
    );
    Publish assets

    View Slide

  38. Let’s resume
    Why Puli is the future of PHP packages
    38

    View Slide

  39. Puli is for libraries
    developers
    39
    Let’s resume

    View Slide

  40. 40
    Less community
    fragmentation
    Let’s resume

    View Slide

  41. One library to rule
    them all
    Develop for every framework at
    the same time: single codebase
    41
    Let’s resume

    View Slide

  42. Puli is for framework
    developers
    42
    Let’s resume

    View Slide

  43. Don’t reinvent the wheel,
    use Puli
    puli/repository
    puli/manager
    puli/discovery
    43
    Let’s resume

    View Slide

  44. Puli is for applications
    developers
    44
    Let’s resume

    View Slide

  45. Remove framework
    extensions complexity
    Install Twig Bundle/Extension/Module
    Install Twig
    45
    Let’s resume

    View Slide

  46. Plug’n’Play packages
    composer require => ready to use
    46
    Let’s resume

    View Slide

  47. Less Magic
    Everything is configured
    47
    Let’s resume

    View Slide

  48. Easy to extend
    Add your own bindings,
    your own resources, ...
    48
    Let’s resume

    View Slide

  49. Powerful features
    Overriding, Versioning, Symbolic links, ...
    49
    Let’s resume

    View Slide

  50. Integrate in your
    development process
    Composer, puli.js
    50
    Let’s resume

    View Slide

  51. III. Status of Puli and
    what’s coming in 2016
    51

    View Slide

  52. 1.0.0-beta10
    52
    Status of Puli and what’s coming in 2016

    View Slide

  53. Already used in
    production
    53
    Status of Puli and what’s coming in 2016

    View Slide

  54. Documentation on
    docs.puli.io
    54
    Status of Puli and what’s coming in 2016

    View Slide

  55. Working Symfony
    bundle
    puli/symfony-bundle
    55
    Status of Puli and what’s coming in 2016

    View Slide

  56. Projects working on a Puli
    integration out of the box
    56
    Status of Puli and what’s coming in 2016

    View Slide

  57. Get involved!
    github.com/puli/issues
    57
    Status of Puli and what’s coming in 2016

    View Slide

  58. Questions?
    58
    Titouan Galopin
    SensioLabs University

    View Slide