Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Why Puli?
Search
Titouan Galopin
January 27, 2016
Programming
0
110
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
Share
More Decks by Titouan Galopin
See All by Titouan Galopin
Concevoir son API pour le futur
tgalopin
2
1.7k
Content editing in Symfony
tgalopin
3
1.1k
Symfony UX: a new JavaScript ecosystem for Symfony
tgalopin
4
4.1k
[SymfonyLive Paris 2020] Pragmatic frontend for Symfony developers
tgalopin
2
1.2k
SymfonyInsight: How to setup quality processes in Symfony apps
tgalopin
2
420
Symfony 5 - AFUP Day Lille 2020
tgalopin
1
990
Pragmatic frontend for Symfony developers
tgalopin
2
1.3k
Demystifying React for Symfony developers
tgalopin
3
820
Symfony 5
tgalopin
1
730
Other Decks in Programming
See All in Programming
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
710
SwiftUIで本格音ゲー実装してみた
hypebeans
0
320
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
3
700
React Native New Architecture 移行実践報告
taminif
1
150
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7.1k
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.2k
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.3k
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
220
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
150
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
GraphQLとの向き合い方2022年版
quramy
50
14k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
54k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Navigating Team Friction
lara
191
16k
Designing for humans not robots
tammielis
254
26k
Why Our Code Smells
bkeepers
PRO
340
57k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Transcript
Why Puli? Titouan Galopin SensioLabs University 1
About Titouan Galopin Puli core contributor puli.js lead developer @tgalopin
// titouangalopin.com 2
Why this talk? 3
Agenda I. What’s Puli? II. How to use Puli in
your application? III. Status of Puli and what’s coming in 2016 4
I. What’s Puli? 5
Currently in Packagist Libraries Symfony bundles Drupal modules Zend Framework
modules Laravel packages What’s Puli? 6
All framework extensions do the same things What’s Puli? 7
Ideal world Libraries ✓ Symfony bundles Drupal modules Zend Framework
modules Laravel packages What’s Puli? 8
Why do we need framework extensions? What’s Puli? 9
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
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
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
Puli replaces framework extensions by solving these 3 problems What’s
Puli? 13
Three targets : Libraries developers Frameworks developers Applications developers What’s
Puli? 14
Library developers A single config file and your library is
available for everyone What’s Puli? 15
Frameworks developers Stop wasting efforts by reinventing the wheel What’s
Puli? 16
Application developers Puli is usable in your application! What’s Puli?
17
II. How to use Puli in your application? 18
How to use Puli in your application? 19 Puli CLI
vs puli.json
How to use Puli in your application? 20 puli.json /app
/src /vendor /web /composer.json /puli.json
How to use Puli in your application? 21 Simplify access
to resources
How to use Puli in your application? 22 // puli.json
{ "resources": { "/app": "app/Resources", "/custom-library": "vendor/..." } } Simplify access to resources
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
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
meh. How to use Puli in your application? 25
puli/composer-plugin How to use Puli in your application? 26
Let library developers create their puli.json How to use Puli
in your application? 27
How to use Puli in your application? 28 // /vendor/acme/custom-library/puli.json
{ "resources": { "/views": "views", ... } } Simplify access to resources
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
How to use Puli in your application? 30 echo $repo->get('/acme/custom-library'.
.'/views/index.html.twig') ->getFilesystemPath(); Simplify access to resources
How to use Puli in your application? 31 Autoload specialized
files
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('...')
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”
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!)
How to use Puli in your application? 35 Publish assets
How to use Puli in your application? 36 Coming in
2016: puli.js JS library to resolve Puli path in filesystem paths Publish assets
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
Let’s resume Why Puli is the future of PHP packages
38
Puli is for libraries developers 39 Let’s resume
40 Less community fragmentation Let’s resume
One library to rule them all Develop for every framework
at the same time: single codebase 41 Let’s resume
Puli is for framework developers 42 Let’s resume
Don’t reinvent the wheel, use Puli puli/repository puli/manager puli/discovery 43
Let’s resume
Puli is for applications developers 44 Let’s resume
Remove framework extensions complexity Install Twig Bundle/Extension/Module Install Twig 45
Let’s resume
Plug’n’Play packages composer require => ready to use 46 Let’s
resume
Less Magic Everything is configured 47 Let’s resume
Easy to extend Add your own bindings, your own resources,
... 48 Let’s resume
Powerful features Overriding, Versioning, Symbolic links, ... 49 Let’s resume
Integrate in your development process Composer, puli.js 50 Let’s resume
III. Status of Puli and what’s coming in 2016 51
1.0.0-beta10 52 Status of Puli and what’s coming in 2016
Already used in production 53 Status of Puli and what’s
coming in 2016
Documentation on docs.puli.io 54 Status of Puli and what’s coming
in 2016
Working Symfony bundle puli/symfony-bundle 55 Status of Puli and what’s
coming in 2016
Projects working on a Puli integration out of the box
56 Status of Puli and what’s coming in 2016
Get involved! github.com/puli/issues 57 Status of Puli and what’s coming
in 2016
Questions? 58 Titouan Galopin SensioLabs University