Rapid application development for the Joomla! CMS using FOF (Framework on Framework), the RAD framework by Akeeba Ltd. Presentation given in Joomla! Day Bosnia and Herzegovina 2013.
19. Some general thoughts
Web services. Integrated JSON support and transparent
authentication, opening the door for data provisioning to apps (web,
desktop, mobile,...)
Almost RESTful, not entirely
HMVC components right here, right now, without having to
relearn Joomla! component development, i.e. the exact opposite of the
proposed Joomla! Framework, whenever that’s ready.
20. Structure
Dispatcher
Controller
Model View
ToolbarHelpers
“triad”
Table
The Dispatcher is the entry point (a.k.a. “router”). It will setup,
run and render the MVC triad.
The Controller is a thin interface to push data to the model state
and instantiate views
The Model is the workhorse. Business logic goes here.
The Table class is a hybrid data adapter, controller and model
(following J!'s convention)
The View fetches model state data and renders them in a
meaningful way
The Toolbar handles the rendering of titles, buttons and so onNon-OOP stuff. Basically, a nice way to say “cruft”
22. Convention over configuration in
the Dispatcher
The Dispatcher is your component’s router. It routes the request to
the appropriate Controller based on conventions:
A POST request gets routed to the save task
A GET request to a plural view name gets routed to the browse
task
A front-end GET request with an ID gets routed to the read task
A back-end GET request with an ID gets routed to the edit task
23. Convention over configuration in
Models
Tables are named as #__component_view, e.g. #__todo_items
Auto increment field is named component_view_id, e.g.
todo_item_id
Magic fields: enabled, created_by, created_on, modified_by,
modified_on, locked_by, locked_on, hits
You can override defaults without copying & pasting code, ever.
Copy & paste is the devil!
24. Convention over configuration in
Controllers
Default tasks (not RESTful!): browse, read, edit, add, delete, save,
apply, ...
Customize with onBeforeMethod and onAfterMethod methods, e.g.
onBeforeSave. Don't copy & paste code.
All MVC objects can be passed a $config array to customize them. It
"flows" from dispatcher to component to model and view.
FOF guesses the task if it's missing based on plural/singular view
name and existence of ID in the query
25. Convention over configuration in
Views
Views inherit from FOFView and its specialized children, e.g.
FOFViewHtml
Customize using the onTask methods, e.g. onBrowse
The toolbar is handled outside the view, in a FOFToolbar descendant
class. Override it with a toolbar.php file in the component's root.
Magic toolbar methods, e.g. onItemsBrowse allow you to customize
the toolbar without copying & pasting code.
27. HMVC – Hierarchical MVC
Include the results of component views anywhere (other views, other
component, modules, ...)
FOFDispatcher::getTmpInstance(‘com_foobar’, ‘items’, array(‘layout’
=> ‘fancy’))->dispatch();
28. Reuse view templates
Load a view template from another view, component, ...
echo $this->loadAnyTemplate('site:com_foobar/item/form');
29. Media files overrides
Load media files like this:
FOFTemplateUtils::addCSS('media://com_foobar/css/frontend.css');
Media overrides are inside the template folder, e.g.
templates/tpl_example/media/com_foobar/css/frontend.css
30. Web services & automatic JSON
and CSV views
Just add format=json or format=csv
JSON: You have an instant JSON-based remote API for your
components
CSV: You can quickly export whatever you see in the backend to
Excel, Numbers, LibreOffice, Google Docs, etc.
Transparent authentication support using URL parameters or HTTP
Basic Authentication
31. XML-based views
It’s JForm on double dose of steroids
Browse, read and edit views from XML templates
You don’t need to write any PHP or HTML, but you can mix
traditional PHP-based and XML-based templates, even in the same
view
Overridable with Joomla! template overrides
You can write components with virtually no PHP code at all