SlideShare ist ein Scribd-Unternehmen logo
1 von 74
Downloaden Sie, um offline zu lesen
@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?

Weitere ähnliche Inhalte

Was ist angesagt?

PROJECT ON WATER CONTROL IN AMUSEMENT PARK USING
PROJECT ON WATER CONTROL IN AMUSEMENT PARK USINGPROJECT ON WATER CONTROL IN AMUSEMENT PARK USING
PROJECT ON WATER CONTROL IN AMUSEMENT PARK USING
Prashant Shekhar
 

Was ist angesagt? (20)

Forward-Forward Algorithm
Forward-Forward AlgorithmForward-Forward Algorithm
Forward-Forward Algorithm
 
Striving for ultimate low latency. Mateusz Pusz ➠ CoreHard Autumn 2019
Striving for ultimate low latency. Mateusz Pusz ➠ CoreHard Autumn 2019Striving for ultimate low latency. Mateusz Pusz ➠ CoreHard Autumn 2019
Striving for ultimate low latency. Mateusz Pusz ➠ CoreHard Autumn 2019
 
Rethinking Attention with Performers
Rethinking Attention with PerformersRethinking Attention with Performers
Rethinking Attention with Performers
 
20210824 Pico session at CEDEC2021(旧)
20210824 Pico session at CEDEC2021(旧)20210824 Pico session at CEDEC2021(旧)
20210824 Pico session at CEDEC2021(旧)
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
강화학습 기초_2(Deep sarsa, Deep Q-learning, DQN)
 
PROJECT ON WATER CONTROL IN AMUSEMENT PARK USING
PROJECT ON WATER CONTROL IN AMUSEMENT PARK USINGPROJECT ON WATER CONTROL IN AMUSEMENT PARK USING
PROJECT ON WATER CONTROL IN AMUSEMENT PARK USING
 
Chapter 6 Deep feedforward networks - 1
Chapter 6 Deep feedforward networks - 1Chapter 6 Deep feedforward networks - 1
Chapter 6 Deep feedforward networks - 1
 
Introduction to Chainer 11 may,2018
Introduction to Chainer 11 may,2018Introduction to Chainer 11 may,2018
Introduction to Chainer 11 may,2018
 
딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향
 
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdfPS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
PS향유회 세미나 - 출제 뉴비를 위한 출제 a to b.pdf
 
Hackthissite
HackthissiteHackthissite
Hackthissite
 
Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
DL from scratch(6)
DL from scratch(6)DL from scratch(6)
DL from scratch(6)
 
Energy based models and boltzmann machines
Energy based models and boltzmann machinesEnergy based models and boltzmann machines
Energy based models and boltzmann machines
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
Domain Driven Design using Laravel
Domain Driven Design using LaravelDomain Driven Design using Laravel
Domain Driven Design using Laravel
 
Functional Java 8 in everyday life
Functional Java 8 in everyday lifeFunctional Java 8 in everyday life
Functional Java 8 in everyday life
 
Stol
StolStol
Stol
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

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...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
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...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
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
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
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
 
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
 

PhpStorm: Symfony2 Plugin