The document summarizes new features and future plans for the Joomla Platform. Key points include:
- The platform split from the CMS in 2011 and has since expanded database support, added a new slim MVC, and improved error handling and unit testing.
- Version 12.1-12.2 added support for PostgreSQL, SQLite, Oracle databases and a database iterator. A new slim MVC using interfaces was introduced.
- Future plans include fully implementing exceptions for error handling, isolating packages for individual use, improving testability, and leveraging modern PHP features. More API consumers like JFacebook and JMediawiki are planned.
13. Platform split (or “forked”) in early 2011
First release (11.1) in July 2011 - mostly rebranded libraries from the CMS
14. Platform split (or “forked”) in early 2011
First release (11.1) in July 2011 - mostly rebranded libraries from the CMS
11.2 released only 3 weeks later
15. Platform split (or “forked”) in early 2011
First release (11.1) in July 2011 - mostly rebranded libraries from the CMS
11.2 released only 3 weeks later
shipped with Joomla! 1.7.0
16. Platform split (or “forked”) in early 2011
First release (11.1) in July 2011 - mostly rebranded libraries from the CMS
11.2 released only 3 weeks later
shipped with Joomla! 1.7.0
Not many big new features - but vastly better documentation.
17. Platform split (or “forked”) in early 2011
First release (11.1) in July 2011 - mostly rebranded libraries from the CMS
11.2 released only 3 weeks later
shipped with Joomla! 1.7.0
Not many big new features - but vastly better documentation.
One notable exception is support for CLI applications
20. 11.3 released in November 2011
Support for web applications (JWeb)
21. 11.3 released in November 2011
Support for web applications (JWeb)
HTTP client abstraction (JHttp)
22. 11.3 released in November 2011
Support for web applications (JWeb)
HTTP client abstraction (JHttp)
image manipulation (JImage)
23. 11.3 released in November 2011
Support for web applications (JWeb)
HTTP client abstraction (JHttp)
image manipulation (JImage)
GitHub API (JGitHub)
24. 11.3 released in November 2011
Support for web applications (JWeb)
HTTP client abstraction (JHttp)
image manipulation (JImage)
GitHub API (JGitHub)
Autoloader
43. Database iterator
Allows you to traverse trough rows 1 by 1
Very efficient for large datasets
Even more efficient when you need to abort midway
44. Database iterator
Allows you to traverse trough rows 1 by 1
Very efficient for large datasets
Even more efficient when you need to abort midway
Very inefficient for small datasets
45. Database iterator
Allows you to traverse trough rows 1 by 1
Very efficient for large datasets
Even more efficient when you need to abort midway
Very inefficient for small datasets
JDatabaseDriver::getIterator()
49. New slim MVC
Interface based
JController, JModel, JView
Old classes renamed to JControllerLegacy, etc.
50. New slim MVC
Interface based
JController, JModel, JView
Old classes renamed to JControllerLegacy, etc.
Some (very) basic classes (e.g. JModelBase, JModelDatabase) exist
51. New slim MVC
Interface based
JController, JModel, JView
Old classes renamed to JControllerLegacy, etc.
Some (very) basic classes (e.g. JModelBase, JModelDatabase) exist
All other plumbing needs to be done by you (no CRUD)
66. Crypt package
A well tested source for random data
JCrypt::genRandomBytes
If possible we tap openssl_random_pseudo_bytes
67. Crypt package
A well tested source for random data
JCrypt::genRandomBytes
If possible we tap openssl_random_pseudo_bytes
If not we gather our own entropy
68. Crypt package
A well tested source for random data
JCrypt::genRandomBytes
If possible we tap openssl_random_pseudo_bytes
If not we gather our own entropy
Based on a research paper that found issues in several PHP application’s
random number generation - including Joomla!
75. Crypt package
Interface JCryptPassword
Implementation JCryptPasswordSimple
Supports MD5, PBDKF, Blowfish and “Joomla”
Allows switching out the password handling library
for example PHP-PasswordLib
Not yet used by JUser
79. Composer support
Dependency management for
PHP
Allows for far easier integration of
the platform into other projects
De facto standard in the PHP
community
80. Composer support
Dependency management for
PHP
Allows for far easier integration of
the platform into other projects
De facto standard in the PHP
community
For more info see http://
getcomposer.org
89. Error handling
JError is already on its way out
JObject::getError and
JObject::setError are going too
90. Error handling
JError is already on its way out
JObject::getError and
JObject::setError are going too
Exceptions are the future
91. Error handling
JError is already on its way out
JObject::getError and
JObject::setError are going too
Exceptions are the future
throw new Exception(“Ups!”);
throw new RuntimeException(“Ups!”);
throw new LogicException(“Ups!);
95. Package isolation
Currently the platform is one big package
42 subpackages
We want to make them available as individual packages using composer
96. Package isolation
Currently the platform is one big package
42 subpackages
We want to make them available as individual packages using composer
Makes it easier for applications to cherry-pick what they need
99. Package isolation
We have a pretty good understanding of the dependencies between
subpackages
There are too many
100. Package isolation
We have a pretty good understanding of the dependencies between
subpackages
There are too many
We want to reduce them as much as feasible
104. Package isolation examples
DirectoryIterator instead of JFolder::files() and JFolder::folders()
Exceptions instead of JError
Not using per-package exceptions (JDatabaseException,
LogException)
106. Unit testing and being testable
There’s a lot of old code that’s
hard or impossible to isolate for
testing
107. Unit testing and being testable
There’s a lot of old code that’s
hard or impossible to isolate for
testing
JRequest
108. Unit testing and being testable
There’s a lot of old code that’s
hard or impossible to isolate for
testing
JRequest
JError
109. Unit testing and being testable
There’s a lot of old code that’s
hard or impossible to isolate for
testing
JRequest
JError
Replacing these classes with
object oriented replacements
110. Unit testing and being testable
There’s a lot of old code that’s
hard or impossible to isolate for
testing
JRequest
JError
Replacing these classes with
object oriented replacements
JInput
111. Unit testing and being testable
There’s a lot of old code that’s
hard or impossible to isolate for
testing
JRequest
JError
Replacing these classes with
object oriented replacements
JInput
Exception
116. Leveraging the power of PHP
Removing hacks and workarounds wherever possible (z.B.
JProfiler::getMemory)
117. Leveraging the power of PHP
Removing hacks and workarounds wherever possible (z.B.
JProfiler::getMemory)
Integrating with PHP trough interfaces like Countable, Serizeable,
JsonSeriazeable (PHP 5.4 only) Iterator and IteratorAggregate
118. Leveraging the power of PHP
Removing hacks and workarounds wherever possible (z.B.
JProfiler::getMemory)
Integrating with PHP trough interfaces like Countable, Serizeable,
JsonSeriazeable (PHP 5.4 only) Iterator and IteratorAggregate
Using SPL Exception (RuntimeException,
UnexpectedValueException)
119. Leveraging the power of PHP
Removing hacks and workarounds wherever possible (z.B.
JProfiler::getMemory)
Integrating with PHP trough interfaces like Countable, Serizeable,
JsonSeriazeable (PHP 5.4 only) Iterator and IteratorAggregate
Using SPL Exception (RuntimeException,
UnexpectedValueException)
Leveraging the SPL wherever possible (e.g. DirectoryItertor,
SplPriorityQueue)
135. PSR
PSR-2 support is almost complete
very few files don’t comply for good reason
the PSR-0 references is ignored
PSR-0 will be reconsidered when we move to namespaces. It’s all but
required for Composer
PSR-1 will not be supported
136.
137. “Another development that force me to
rethink ZF approach is the maturity of
Joomla-Platform itself. Ever since Joomla
decided to split the cms and platform part
of Joomla saperately, we noticed a marked
improvement in the platform code.”
-Azrul, JomSocial
138. Thank you for your attention!
Rouven Weßling
@RouvenWessling
www.rouvenwessling.de
me@rouvenwessling.de
139. Thank you for your attention!
My Workshops tomorrow:
•Building a standalone application on the platform
•Using the new MVC with a platform based web app
Both in Room 150
Rouven Weßling
@RouvenWessling
www.rouvenwessling.de
me@rouvenwessling.de