Translations
Info
All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh

MVC Framework/Features of other Frameworks

From TYPO3Wiki
Jump to: navigation, search
This page belongs to the Extension coordination team (category ECT)
This page belongs to the MVC Framework aka lib/div project (category Project)

Main editor: Nick Weisser

What do current MVC Frameworks achieve?

The following overview aims to outline the main features of other frameworks for MVC known to me:

It is indendent to be a discussion base for potential features of the upcoming T3 lib/div api.


Model

  • Automatic model generation from either DB tables or XML description file. This requires strict naming conventions.
  • Standard model methods for every model like findAll, findBy[fieldname], delete, save etc. For a full list see: http://manual.cakephp.org/chapter/models or http://www.symfony-project.com/book/trunk/model
  • Every standard method provides a hook before and after execution e.g "before/afterSave".
  • Model association and automatic fetching of related models.
  • Model relations are defined within the model either via php array or xml. E.g :
   var $belongsTo = array('User' =>
                          array('className'  => 'User',
                                'conditions' => ,
                                'order'      => ,
                                'foreignKey' => 'user_id'
                          )
                    );
  • Association is considered on fetching, writing and deletion.
  • Association can be unbound on demand. (To avoid fetching of assioated records if they are not needed)
  • Association can be also defined by a custom SQL query to keep things flexible.
  • Validation rules can be defined within the model. They are evaluated on save/update and an error code is returned to the particular controller. A set of predefined validation rules is existing e.g isRequired, isEmail etc.

Controller

  • Automatic controller model binding on naming conventions. (Can be extended by setting a variable in case a controller uses several models)
  • Filters/hocks are provided by the controller prototype class (e.g. before/after).
  • Functions needed by several controllers can be packaged as so called components and embeded into every controller. There is a set of usefull standart components e.g a request handler which allows to determine whether a request is an ajax request or not.
  • ActionRequest enables a controller to call an action from another controller without perfoming an "header location redirect" and use the returned view within its own view.

View

  • Opportunity to use the template parser of your choice (where phphtml is default)
  • Powerfull set of helper classes for generating common html tags.
  • Automatical handling of form validation errors (see model). If the validation for the field body of the model note fails an error message is displayed. E.g:
echo $html->tagErrorMsg('Note/body','Please enter in a body for this note.')
  • HTML/Template subparts needed in several views/templates can be packaged as so called elements.
  • Ajax helper class using prototype/scriptaculous.
  • Master template can be defined via a so called layout. E.g:
<div id="header">
    <div id="menu">...</div>
</div>
<!-- Here's where I want my views to be displayed -->
<?php echo $content_for_layout ?>
 <!-- Add a footer to each displayed page -->
<div id="footer">...</div>
  • The default layout can be overwritten by the controller. This is especially usefull in conjunction with the requestHandler component and Ajax.