SlideShare une entreprise Scribd logo
1  sur  74
Télécharger pour lire hors ligne
@Annotation 
Daniel Espendiller 
espend.de - daniel@espendiller.net
Symfony2 Plugin 
2013-03 - Downloads: ~900.000 - daily usage: 20.000 – 40.000 
PHP Annotations 
2013-09 - daily usage: ~15.000 
Laravel Plugin 
2014-08 - daily usage: 1.000-2.000 
Shopware Plugin 
2014-02 - daily usage: ~1.000 
Drupal Symfony2 Bridge 
2014-06 - daily usage: ~500 
Android Studio Prettify 
Not working for them :) Daniel Espendiller 
espend.de - daniel@espendiller.net
● About PhpStorm / IntelliJ 
● IntelliJ: Java Lexer / Pattern 
● IntelliJ: Extension Points 
● PhpStorm Plugin Overview 
● Symfony2 Plugin (all Features :)) 
● Dev Enviroment, Tools, Resources 
● Questions 
Roadmap
PhpStorm / IntelliJ 
● PhpStorm based on IntelliJ IDEA (Java) 
– With plugins: PHP, Twig, Yaml, … 
● „PhpStorm 1.0 & WebStorm 1.0 are public, it is official!“ 
– May 27, 2010 
● PhpStorm 5: Symfony2 Framework Integration :( 
– September 12, 2012 
– Closed source, so no public API 
● PhpStorm6: PHP OpenApi 
– March 12, 2013
PhpStorm / IntelliJ 
● PhpTypeProvider2 (ContainerInterface::get) 
– PhpTypeProvider(1) freeze not usable 
– Magento Plugin, Adrien Brault and PhpStorm Core Developer 
– Help on debug 
– What do we need and how do we use it? 
– More user feedback from real life projects; only on Symfony2 Plugin 
– Time issue for release date 
● Twig as separate plugin (before: inside PHP) 
● PhpStorm 7.0 
– Improved PhpDoc support (Annotations) 
● PhpStorm 7.1: 
– Dev in sync with IntelliJ IDEA
PhpStorm / IntelliJ 
● IntelliJ / PhpStorm doc and code examples 
– Decompile and try on your own :) 
● API, stopHere :) 
● Single person project(s) 
● My project(s) time window: ~4 hours per week 
● Better JetBrains support, because of your downloads 
– Faster API updates 
– Pls update to PhpStrom8; only 35%
IntelliJ IDEA 
Java, Lexer, Pattern, PsiElement, ...
PhpStorm / IntelliJ IDEA 
● No PHP interpreter all magic in Java 
● Closed Source for Plugins (PHP, Twig, Yaml, ...) 
● Open-Source IntelliJ Community Edition 
● Display document structure (Lexer output) with Plugin: 
PsiViewer 
● Code wrapped into PsiElements, which are targets for all 
extensions 
● Just references [MethodReference → resolve() → Method()] 
PsiViewer: https://plugins.jetbrains.com/plugin/227
PsiViewer / PHP Language - Lexer
PsiViewer / PHP Language
PsiViewer / Twig + Pattern
Twig Lexer in PHP? 
SymfonyCon Warsaw 2013 - Matthias Noback - Diving Deep Into Twig 
http://www.youtube.com/watch?v=jDM0u0B_tXo
Translations: Array To Java 
PHP 
Java
Plugin Overview
Symfony2 Plugin 
without Plugin
Symfony2 Plugin 
fr.adrienbrault.idea.symfony2plugin
0 
2013-04 
2013-05 
2013-06 
2013-07 
2013-08 
2013-09 
2013-10 
2013-11 
2013-12 
2014-01 
2014-02 
2014-03 
2014-04 
2014-05 
2014-06 
2014-07 
2014-08 
2014-09 
10000 
20000 
30000 
40000 
50000 
60000 
70000 
80000 
90000 
100000 
Symonfy2 - PhpStorm Plugin 
Downloads Per Month 
Symfony2 Plugin
PHP Annotation 
Index
PHP Annotation 
Entity completion and navigation together with Symfony2 Plugin
PHP Annotation 
Reference between “use” and docblock tag 
Code > Optimize Imports
Drupal Symfony2 Bridge 
Routing, Service Container (Yaml), Twig 
modules/<module>/<module>.services.info.yml
Drupal Symfony2 Bridge 
modules/<module>/<module>.info.yml
Laravel 
- Better Blade (Template) support of PhpStorm8: Linemaker, include, overwrites, … 
- (Symfony2) Translations 
- (Symfony2) Config 
- ...
Laravel
Shopware 
- Subscriber (Enlight): events, hooks and proxy classes 
- Template: Smarty 
- Doctrine for database
Shopware
Shopware 
… Doctrine ORM QueryBuilder support :) 
ShopwareModelsArticleRepository::getArticleQueryBuilder
Android Studio Prettify 
Google Android team is switching to IntelliJ IDEA (Android Studio) 
Google I/O 2013 - What's New in Android Developer Tools 
Google I/O 2014 - What's new in Android development tools
Android Studio Prettify 
Generator: XML Layout to Java
Android Studio Prettify 
Generator: XML Layout to Java
Android Studio Prettify 
Inspection: Cast check of view declaration 
Linemarker: View as icon
Productivity 
double your productivity (per month)? 
1 User * 6 hours per day * 20 days = 120 hours 
20.000 Users ...
Extension Points
Extension 
<Plugin>/META_INF/plugin.xml 
http://confluence.jetbrains.com/display/IntelliJIDEA/Custom+Language+Support
Extension: 
completion.contributor 
On demand: ctrl+space or in our custom auto popup (completion.confidence) 
Lookup string Type text 
Tip: Press „Tab“ for element selection; matches underlying string 
Twig 
hack :) 
Tail text
Extension 
gotoDeclarationHandler 
On demand: ctrl+mousover
Extension 
psi.referenceContributor 
● Can provide completion (deprecated) and navigation 
● Live event: On file change, inspection, reference search ... 
● „Php Annotation“: references between „use“ and „Annotation“ 
● >30ms
Extension - fileBasedIndex 
● Primary extension of IntelliJ IDEA (“Invalidate Caches / Restart”) 
● Application storage (not per Project!) for strings 
● Storage structure: File -> Key -> Values[] 
● File change listener 
● Background job, switching to „block mode“ on mass changes (project initialize) 
● Only lexer output 
<- Class index
Extension - fileBasedIndex 
Path: %HOMEPATH%/WebIde80/system/index 
On Symfony2 Plugin 
Replacement for appDevDebugProjectContainer.xml: 
- Services: Definition, Parameter, Tags 
- Twig usage for extends, include, macros, … 
- Translations 
- Routes 
- ...
Extension 
PhpTypeProvider2 
● Adds types (Classes, Interface) to methods, variables, … (the yellow ones) 
● Signature modification: Append string parameter for higher application level
Extension 
PhpTypeProvider2 
Signature 
#Ő#M#P#CespendDoctrineModelBundleControllerDefaultController.container.getƀtwig 
X - core 
X - our changes: special utf-8 char to split and get „twig“ parameter
Extension 
annotator / inspections
Extension 
lang.foldingBuilder 
Reformat string values for better readability 
Example in Java: Anonymous class
Extension 
lineMarkerProvider
Symfony2 Plugin
Service Container 
Data from appDevDebugProjectContainer.xml, also from FileIndex
Service Container
Service Container
Form 
FormTypes, Extension (setDefaultOptions)
Form 
Doctrine / Class support
Form 
Translations: FileIndex or app/cache/dev/translations/catalogue.*.php
Doctrine
Doctrine 
Find* parameter and QueryBuilder with mapping on Annotation or Yaml
Twig
Twig
Twig
Twig 
Forms
Twig 
Assets
Twig
Twig 
Type docblock 
Deprecated: performance
„Template Create“ Quickfix 
with „extends“ and „block“ context search
Service Builder
Translation Extractor
Profiler 
app/cache/dev/profiler/index.csv 
3f318b,127.0.0.1,GET,http://127.0.0.1:8000/hello/test,1414590230, 
Serialized DataCollector -> Regular Expressions :)
Symbol Search / Search Everywhere 
Navigate -> Symfony2 Symbol...
Server Storage? 
Vagrant, VMs, Sync, Remote for „app/cache“ Folder. 
Other Frameworks: Zend, Typo3 / Flow, “external” Doctrine, Silex, ... 
JSON 
HTTP 
http://*:22221 
http://127.0.0.1:22221/project 
http://127.0.0.1:22221/project/idea-espend 
http://127.0.0.1:22221/project/idea-espend/clear 
PHP Example: https://github.com/Haehnchen/ide-tools
Server Storage
Server Storage
Dev Environment / Tools
Dev Environment / Tools 
Java Decompiler: JD-GUI - http://jd.benow.ca/ 
JetBrainsPhpStorm 8.0.1pluginsphplibphp.jar 
JetBrainsPhpStorm 8.0.1pluginsphplibphp-openapi.jar 
JetBrainsPhpStorm 8.0.1pluginstwiglibtwig.jar
Dev Environment / Tools 
Add external plugin as library
Dev Environment / Tools 
Decompile PHP plugin and add sourcepath, to get source code support for 
externals
Dev Environment / Tools 
● idea-php-symfony2-plugin-test 
● github: idea-* 
● Wissenwertes über die IntelliJ IDEA / PhpStorm Plugin Entwicklung 
● JetBrains: JetBrains: Custom Language Support 
● Doc: symfony2-plugin.espend.de 
● JetBrains: Symfony Development using PhpStorm 
● JetBrains: Drupal Development using PhpStorm
Questions?

Contenu connexe

Tendances

Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
Dmitry Buzdin
 
Whmcs addon module docs
Whmcs addon module docsWhmcs addon module docs
Whmcs addon module docs
quyvn
 

Tendances (20)

The redux saga begins
The redux saga beginsThe redux saga begins
The redux saga begins
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
Introduction to JSX
Introduction to JSXIntroduction to JSX
Introduction to JSX
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Php Unit 1
Php Unit 1Php Unit 1
Php Unit 1
 
Service workers
Service workersService workers
Service workers
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshop
 
PHP Tutorials
PHP TutorialsPHP Tutorials
PHP Tutorials
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Object oreinted php | OOPs
Object oreinted php | OOPsObject oreinted php | OOPs
Object oreinted php | OOPs
 
Php
PhpPhp
Php
 
Le Wagon - React 101
Le Wagon - React 101Le Wagon - React 101
Le Wagon - React 101
 
Web worker in your angular application
Web worker in your angular applicationWeb worker in your angular application
Web worker in your angular application
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 
Whmcs addon module docs
Whmcs addon module docsWhmcs addon module docs
Whmcs addon module docs
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooks
 
The Rust Programming Language: an Overview
The Rust Programming Language: an OverviewThe Rust Programming Language: an Overview
The Rust Programming Language: an Overview
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript Basics
 
Atomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterAtomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas Hunter
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 

En vedette

Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ss
Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ssAlphorm.com Support de la Formation Symfony 3 , les fondamentaux-ss
Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ss
Alphorm
 

En vedette (6)

Improve your web and app development with the Symfony3 framework.
Improve your web and app development with the Symfony3 framework.Improve your web and app development with the Symfony3 framework.
Improve your web and app development with the Symfony3 framework.
 
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
PhpStormで始める快適なWebアプリケーション開発 #phpcon2013
 
Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shell
 
Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ss
Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ssAlphorm.com Support de la Formation Symfony 3 , les fondamentaux-ss
Alphorm.com Support de la Formation Symfony 3 , les fondamentaux-ss
 
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your ShellWhy Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shell
 
What's new in Symfony3
What's new in Symfony3What's new in Symfony3
What's new in Symfony3
 

Similaire à PhpStorm: Symfony2 Plugin

In Act Developers Platform
In Act Developers PlatformIn Act Developers Platform
In Act Developers Platform
Eris Ristemena
 
GoogleDSC_ GHRCE_ flutter_firebase.pptx
GoogleDSC_ GHRCE_  flutter_firebase.pptxGoogleDSC_ GHRCE_  flutter_firebase.pptx
GoogleDSC_ GHRCE_ flutter_firebase.pptx
GoogleDeveloperStude22
 
JAVA Developer_Resume_Vaibhav Srivastav
JAVA Developer_Resume_Vaibhav SrivastavJAVA Developer_Resume_Vaibhav Srivastav
JAVA Developer_Resume_Vaibhav Srivastav
Vaibhav Srivastav
 

Similaire à PhpStorm: Symfony2 Plugin (20)

Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC
 
Django by rj
Django by rjDjango by rj
Django by rj
 
dhiraj_ghavate
dhiraj_ghavatedhiraj_ghavate
dhiraj_ghavate
 
solution Challenge design and flutter day.pptx
solution Challenge design and flutter day.pptxsolution Challenge design and flutter day.pptx
solution Challenge design and flutter day.pptx
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
 
Plugin development demystified 2017
Plugin development demystified 2017Plugin development demystified 2017
Plugin development demystified 2017
 
Django
DjangoDjango
Django
 
A Practical Road to SaaS in Python
A Practical Road to SaaS in PythonA Practical Road to SaaS in Python
A Practical Road to SaaS in Python
 
Introduction to Google App Engine with Python
Introduction to Google App Engine with PythonIntroduction to Google App Engine with Python
Introduction to Google App Engine with Python
 
In Act Developers Platform
In Act Developers PlatformIn Act Developers Platform
In Act Developers Platform
 
Web Development in Django
Web Development in DjangoWeb Development in Django
Web Development in Django
 
Google app-engine-with-python
Google app-engine-with-pythonGoogle app-engine-with-python
Google app-engine-with-python
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
 
Introduction to PHP (SDPHP)
Introduction to PHP   (SDPHP)Introduction to PHP   (SDPHP)
Introduction to PHP (SDPHP)
 
GoogleDSC_ GHRCE_ flutter_firebase.pptx
GoogleDSC_ GHRCE_  flutter_firebase.pptxGoogleDSC_ GHRCE_  flutter_firebase.pptx
GoogleDSC_ GHRCE_ flutter_firebase.pptx
 
Simplify your professional web development with symfony
Simplify your professional web development with symfonySimplify your professional web development with symfony
Simplify your professional web development with symfony
 
JAVA Developer_Resume_Vaibhav Srivastav
JAVA Developer_Resume_Vaibhav SrivastavJAVA Developer_Resume_Vaibhav Srivastav
JAVA Developer_Resume_Vaibhav Srivastav
 
Complete python toolbox for modern developers
Complete python toolbox for modern developersComplete python toolbox for modern developers
Complete python toolbox for modern developers
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
 
Python Developer Certification
Python Developer CertificationPython Developer Certification
Python Developer Certification
 

Dernier

Dernier (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

PhpStorm: Symfony2 Plugin