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
180
Symfony Internals
meandmymonkey
3
910
Divide and Conquer
meandmymonkey
1
690
Deptrac - Keep Your Architecture Clean
meandmymonkey
0
750
Introduction to Docker at PHPBenelux2015
meandmymonkey
3
880
Best Practices in Symfony2
meandmymonkey
0
480
Introduction to Docker at PHPNW2014
meandmymonkey
4
420
O(ops), Authentication!
meandmymonkey
4
980
Best Practices in Symfony2
meandmymonkey
28
4.6k
Other Decks in Programming
See All in Programming
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
260
Python札幌 LT資料
t3tra
7
1.1k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
150
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
150
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.2k
JETLS.jl ─ A New Language Server for Julia
abap34
2
470
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
430
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
CSC307 Lecture 01
javiergs
PRO
0
650
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.2k
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
200
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
26
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
130
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Making Projects Easy
brettharned
120
6.5k
WENDY [Excerpt]
tessaabrams
9
35k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
85
Typedesign – Prime Four
hannesfritz
42
2.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
Producing Creativity
orderedlist
PRO
348
40k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
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