Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Best Practices in Symfony2
Search
Andreas Hucks
October 09, 2013
Programming
15
1.8k
Best Practices in Symfony2
Andreas Hucks
October 09, 2013
Tweet
Share
More Decks by Andreas Hucks
See All by Andreas Hucks
Divide and Conquer (LonghornPHP 2019)
meandmymonkey
0
140
Symfony Internals
meandmymonkey
3
830
Divide and Conquer
meandmymonkey
1
650
Deptrac - Keep Your Architecture Clean
meandmymonkey
0
670
Introduction to Docker at PHPBenelux2015
meandmymonkey
3
830
Best Practices in Symfony2
meandmymonkey
0
410
Introduction to Docker at PHPNW2014
meandmymonkey
4
400
O(ops), Authentication!
meandmymonkey
4
880
Best Practices in Symfony2
meandmymonkey
28
4.5k
Other Decks in Programming
See All in Programming
関数型まつりレポート for JuliaTokai #22
antimon2
0
100
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
210
從零到一:搭建你的第一個 Observability 平台
blueswen
1
910
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
680
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
650
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
200
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
150
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
110
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
300
カクヨムAndroidアプリのリブート
numeroanddev
0
420
GoのWebAssembly活用パターン紹介
syumai
3
10k
業務自動化をJavaとSeleniumとAWS Lambdaで実現した方法
greenflagproject
1
110
Featured
See All Featured
A better future with KSS
kneath
239
17k
The World Runs on Bad Software
bkeepers
PRO
68
11k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Visualization
eitanlees
146
16k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
GitHub's CSS Performance
jonrohan
1031
460k
Optimizing for Happiness
mojombo
379
70k
How to train your dragon (web standard)
notwaldorf
92
6.1k
Rails Girls Zürich Keynote
gr2m
94
14k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Embracing the Ebb and Flow
colly
86
4.7k
Being A Developer After 40
akosma
90
590k
Transcript
Best Practices in Symfony2 phpnw 2013 Manchester, Oct. 6th Andreas
Hucks Sonntag, 6. Oktober 13
@meandmymonkey Andreas Hucks Trainer & Consultant at Sonntag, 6. Oktober
13
Best Practices Sonntag, 6. Oktober 13
Bad Practices Sonntag, 6. Oktober 13
symfony Day 2009 Sonntag, 6. Oktober 13
Chapter One A Clean Project Sonntag, 6. Oktober 13
Naming Things in Symphony • Follow PSR-0, PSR-1, PSR-2 •
Find a common scheme for your team • Be explicit • Be consistent Sonntag, 6. Oktober 13
Care about your coding style • Again - follow PSR-0,
PSR-1, PSR-2 • Use PHPCSFixer http://goo.gl/tEK4y Sonntag, 6. Oktober 13
.gitignore /web/bundles/ /app/bootstrap.php.cache /app/cache/* /app/config/parameters.yml /app/logs/* /build/ /vendor/ /bin/ /composer.phar
/data/uploads .idea add your own Sonntag, 6. Oktober 13
.gitignore /web/bundles/ /app/bootstrap.php.cache /app/cache/* /app/config/parameters.yml /app/logs/* /build/ /vendor/ /bin/ /composer.phar
/data/uploads .idea should be in your global .gitignore Sonntag, 6. Oktober 13
.gitignore /web/bundles/ /app/bootstrap.php.cache /app/cache/* /app/config/parameters.yml /app/logs/* /build/ /vendor/ /bin/ /composer.phar
/data/uploads .idea probably this too Sonntag, 6. Oktober 13
.gitignore /web/bundles/ /app/bootstrap.php.cache /app/cache/* /app/config/parameters.yml /app/logs/* /build/ /vendor/ /bin/ /composer.phar
/data/uploads .idea this. Sonntag, 6. Oktober 13
Committing parameters.yml is a Three Kitten Offense Sonntag, 6. Oktober
13
Committing parameters.yml is a Three Kitten Offense Sonntag, 6. Oktober
13
Remove Acme\* Sonntag, 6. Oktober 13
Bundle Naming... Vendor\AwesomeBundle vs. Vendor\Bundle\AwesomeBundle Sonntag, 6. Oktober 13
Bundle Naming... Vendor\AwesomeBundle vs. Vendor\Bundle\AwesomeBundle Sonntag, 6. Oktober 13
FAIL a.k.a. „because I can“ • MyCompleteAppBundle (ok for small
projects) • MyAppNeedingGlobalResourcesBundle • MyBundleInsideAnotherBundleBundle Sonntag, 6. Oktober 13
What should go into a Bundle • Bundles should be
self-contained • Sets of Features • Examples: Forum, AdminPanel... • Configured in /app/config Sonntag, 6. Oktober 13
Your config options • YAML • XML • Annotations •
INI • PHP Sonntag, 6. Oktober 13
Your config options • YAML • XML • Annotations •
INI • PHP meh. Sonntag, 6. Oktober 13
Your config options • YAML • XML • Annotations •
INI • PHP special use cases Sonntag, 6. Oktober 13
Your config options • YAML • XML • Annotations •
INI • PHP not for everything Sonntag, 6. Oktober 13
Your config options • YAML • XML • Annotations •
INI • PHP Routing, Bundle Config, Parameters Services Validators, ORM/ODM Sonntag, 6. Oktober 13
Nest your routing files Sonntag, 6. Oktober 13
Chapter Two Controllers Sonntag, 6. Oktober 13
• Put Controllers on a Diet • Decouple them Sonntag,
6. Oktober 13
Try to lose the Boilerplate Sonntag, 6. Oktober 13
@Template([name]) Sonntag, 6. Oktober 13
@Cache(...) Sonntag, 6. Oktober 13
Inject the Request into Controllers Sonntag, 6. Oktober 13
New in 2.3: handleRequest() Sonntag, 6. Oktober 13
Events for add-on actions Sonntag, 6. Oktober 13
Service Layers Sonntag, 6. Oktober 13
Service Layers Sonntag, 6. Oktober 13
Using the BaseController? Wrap calls to the Container Sonntag, 6.
Oktober 13
Chapter Three Dependency Injection Sonntag, 6. Oktober 13
Injecting the Container Sonntag, 6. Oktober 13
Injecting the Container Sonntag, 6. Oktober 13
But... but Symfony is doing it! Sonntag, 6. Oktober 13
...\TwigBundle\Extension\AssetsExtension Sonntag, 6. Oktober 13
It‘s because of Scopes! Sonntag, 6. Oktober 13
Solution: Synchronized Services (>= 2.3) Sonntag, 6. Oktober 13
Alternative: Providing the Request (< 2.3) Sonntag, 6. Oktober 13
Alternative: Providing the Request (< 2.3) Sonntag, 6. Oktober 13
Service Organization Sonntag, 6. Oktober 13
Split up Service Definitions Sonntag, 6. Oktober 13
Dynamic Loading of Service Definitions Sonntag, 6. Oktober 13
Use Semantic Configuration! Sonntag, 6. Oktober 13
The Container as a Registry Sonntag, 6. Oktober 13
The Container as a Registry Sonntag, 6. Oktober 13
Instead: Proper Service Configuration Sonntag, 6. Oktober 13
Binding to the Environment Sonntag, 6. Oktober 13
Binding to the Environment Sonntag, 6. Oktober 13
Instead: Use Your config files Sonntag, 6. Oktober 13
Miscellaneous • Use XML for Service Definitions • Remember you
can use Environment Variables (Apache, Nginx, ...) • Use %kernel.root_dir% as a reference Sonntag, 6. Oktober 13
Intermezzo Random Tips Sonntag, 6. Oktober 13
PHP • Use 5.4/5.5, it‘s faster • Use APC (or
one of the alternatives) Sonntag, 6. Oktober 13
Composer • Use the --optimize-autoloader option Sonntag, 6. Oktober 13
Doctrine • Activate Metadata Cache • Activate Query Cache •
Use factory-service to register Repositories & ObjectManagers as Services • Do NOT inject the EntityManager into your entities Sonntag, 6. Oktober 13
Security • Make sure there are no leaks in the
security.yml access_control section! • Better: Check Authorization in Controller, possibly use JMSSecurityExtraBundle Sonntag, 6. Oktober 13
Translation • Work with translation keys instead of full text
to avoid breaking translations Sonntag, 6. Oktober 13
Searching • Look for „Symfony2“ (without the space) Sonntag, 6.
Oktober 13
Read the Documentation (and the Changelogs) Sonntag, 6. Oktober 13
Chapter Four Forms Sonntag, 6. Oktober 13
Forms in Controllers Sonntag, 6. Oktober 13
Forms in Controllers Sonntag, 6. Oktober 13
• Couples Form setup to Controller • No reusability Sonntag,
6. Oktober 13
Better: Use Type Classes Sonntag, 6. Oktober 13
Always set the data_class Sonntag, 6. Oktober 13
Using Data in Constructors Sonntag, 6. Oktober 13
Using Data in Constructors Sonntag, 6. Oktober 13
Use Form Events for Related Data Sonntag, 6. Oktober 13
Define Types as Services Sonntag, 6. Oktober 13
Define Types as Services Sonntag, 6. Oktober 13
Don‘t disable CSRF Sonntag, 6. Oktober 13
Don‘t disable CSRF Sonntag, 6. Oktober 13
Thanks! Questions? Please give feedback: http://goo.gl/yK97XK Sonntag, 6. Oktober 13