Version 3 end of life
This version of Silverstripe CMS will not recieve any additional bug fixes or documentation updates. Go to documentation for the most recent stable version.


Upgrading notes

Upgrading from 3.3 to 3.4 shouldn't require any code changes.

Note that if you are upgrading from 3.1, you should review the 3.2 upgrade notes.

Other changes to be aware of

These changes are unlikely to affect your upgrade, but we've noted them just in case you had unusual project code that was affected by these:

  • When FormFields are rendered, leading & trailing whitespace is now stripped. The resulting HTML for form fields is the same for the default fields, but if you have a custom form field that is relying on trailing whitespace being outputted.
  • DataObject::isChanged() now defaults to only checking database fields. If you rely on this method for checking changes to non-db field properties, use getChangedFields() instead.

Error handling

Up until 3.4.0 error responses handled by SilverStripe have normally returned HTTP 200. The correct http response code can be turned on by setting Debug.friendly_error_httpcode config to true. This option will be removed in 4.0 and fixed to always on.

Name: mydebug

friendly_error_httpcode: true

Change Log

API Changes

  • 2016-05-18 c55777c Enable friendly error HTTP code by default for new projects (Damian Mooyman)
  • 2016-05-18 757cfae Enable Debug.friendly_error_httpcode to correctly set HTTP status code for errors (Damian Mooyman)
  • 2016-05-12 7041c59 Enable requirements to persist between flushes (Damian Mooyman)
  • 2016-04-19 43b0052 Remove artifact datalist overrides from UnsavedRelationList (Damian Mooyman)
  • 2016-03-07 634e86f Include File.ParentID in fulltext search results (Damian Mooyman)
  • 2015-12-13 62f183d before/afterExtend now support parameters passed by reference (Damian Mooyman)
  • 2015-11-25 3842971 refactor into individually overridable components (Damian Mooyman)
  • 2015-08-28 f6fe142 Making ArrayList (and others) more consistent with DataList (Daniel Hensby)

Features and Enhancements

  • 2016-03-27 1e7281a Add onBeforeRender() hook to GridField (Loz Calver)
  • 2016-03-15 2923787 consistent file icons (Jonathon Menz)
  • 2016-02-23 375bbf9 and fix for issue #3186 (Tyler Kidd)
  • 2016-02-22 01c8d38 Passing $tmpFile to extension. (Taras Yemtsov)
  • 2015-12-22 c9ba0e4 Add ViewableData::setFailover() to refresh detected methods when changing failover (Loz Calver)


  • 2016-05-18 62bd26d Fix suppression of display_errors in ErrorControlChain (Damian Mooyman)
  • 2016-05-17 8ed25ae Fix DataObject::isChanged() detecting non saveable changes (#5545) (Damian Mooyman)
  • 2016-05-17 8947bb0 Fix filtersOnId ignoring WHERE "ID" IN () (#5546) (Damian Mooyman)
  • 2016-05-17 829f59e Fix link dialog box layout in CMS (Damian Mooyman)
  • 2016-05-16 79d0590 Fix singleton('DBLocale') (Damian Mooyman)
  • 2016-05-13 4d1ddf0 Prevent session hijackers from resetting a user password (Damian Mooyman)
  • 2016-05-10 3738d88 Empty FROM clause (Daniel Hensby)
  • 2016-05-10 d1df67d SQLSelect count methods now cast to int (fixes #5498) (Loz Calver)
  • 2016-05-05 cc7a2ae Add framework/admin tests (#118) (Daniel Hensby)
  • 2016-05-02 096f30e Fix GridFieldAddExistingAutocompleter (Damian Mooyman)
  • 2016-04-28 6934083 for #5410 to help focus errors occurring on tabs within GridField controlled DataObjects (et al). (Patrick Nelson)
  • 2016-04-21 fa5b8b8 Fix error when modals are displayed (Damian Mooyman)
  • 2016-04-21 b4f466f Correct framework/module dependencies for cms (Damian Mooyman)
  • 2016-04-21 ae268ae #5363 Add .JSON option for templates (Robbie Averill)
  • 2016-03-29 7907d20 changing all cases of filesize spelling to file size (Tim Kung)
  • 2016-03-17 96c586b only output $CleartextPassword if it has a value (Christopher Darling)
  • 2016-02-12 a34f17f for #5028: Ensure empty YML configs don't break when merging them in (i.e. make sure it's traversable before foreach'ing over it). (Patrick Nelson)
  • 2016-01-26 b1b403c Borders on CMS Actions (Daniel Hensby)
  • 2016-01-26 c5fc9dd CMS actions alignment (Daniel Hensby)
  • 2016-01-12 a7110be OptionsetField uses aria-required (Torleif West)
  • 2016-01-11 122784b OptionsetField input has required #4901 (torleif)
  • 2016-01-11 288c8a8 OptionsetField returns valid HTML #4901 (torleif)
  • 2016-01-06 bf6337c Changes needed to respond to whitespace changes. (Sam Minnee)
  • 2016-01-06 4aa5053 Fixes needed to adapt to whitespace changes. (Sam Minnee)
  • 2015-12-22 24660af Parameters passed to includes overwrite all scopes (fixes #2617) (Loz Calver)
  • 2015-11-04 fb43e59 Setting hide_ancestor=true causes a random page type to be hidden (Loz Calver)
  • 2015-10-07 7a81372 castingHelper failed to find many_many_extraFields data (fixes #4661) (Loz Calver)
  • 2015-08-04 e94c0fa extraClass() method to match parent method (Florian Thoma)
  • 2014-10-29 61a9b2a GridFieldPaginator now prevents viewing pages with no results (fixes #3192) (Loz Calver)