Version: current

# Class ContentController

The most common kind of controller; effectively a controller linked to a `DataObject`.

ContentControllers are most useful in the content-focused areas of a site. This is generally the bulk of a site; however, they may be less appropriate in, for example, the user management section of an application.

On its own, content controller does very little. Its constructor is passed a `DataObject` which is stored in $this->dataRecord. Any unrecognised method calls, for example, Title() and Content(), will be passed along to the data record,

Subclasses of ContentController are generally instantiated by ModelAsController; this will create a controller based on the URLSegment action variable, by looking in the SiteTree table.

  Object
  ViewableData implements IteratorAggregate
  RequestHandler
  Controller
  ContentController

### Direct known subclasses

`Import1C_Controller`, `LastDoc_Controller`, `Page_Controller`, `PageCommentInterface_Controller`, `RatingExtension_Controller`

### Indirect known subclasses

`Announcement_Controller`, `AnnouncementHolder_Controller`, `ErrorPage_Controller`, `Event_Controller`, `EventHolder_Controller`, `FaqHolder_Controller`, `FaqSection_Controller`, `FavoritePage_Controller`, `Guestbook_Controller`, `HomePage_Controller`, `ImportCatalog1C_Controller`, `MapObject_Controller`, `BookingAdminPage_Controller`, `MapObjectGroup_Controller`, `MapPage_Controller`, `MediawebPage_Controller`, `Monument_Controller`, `MonumentCatalog_Controller`, `MonumentForm_Controller`, `NewsArchive_Controller`, `NewsEntry_Controller`, `NewsHolder_Controller`, `Orders1CExchange_Controller`, `BookingPage_Controller`, `PhotoAlbumPage_Controller`, `PhotoGalleryPage_Controller`, `Product_Controller`, `ProductSearchPage_Controller`, `ProfilePage_Controller`, `PublHolder_Controller`, `Publication_Controller`, `RedirectorPage_Controller`, `RegistrationPage_Controller`, `Room_Controller`, `CartPage_Controller`, `RoomCatalog_Controller`, `Search_Controller`, `SimpleOrderForm_Controller`, `SimpleOrderPage_Controller`, `SiteMap_Controller`, `Socle_Controller`, `SocleSize_Controller`, `SpecialCatalog_Controller`, `StartCatalog_Controller`, `SubscribeForm_Controller`, `Catalog_Controller`, `SubsitesSelectorPage_Controller`, `SubsitesVirtualPage_Controller`, `Unsubscribe_Controller`, `UserDefinedForm_Controller`, `VideoBankPage_Controller`, `VirtualPage_Controller`, `VirtualProduct_Controller`, `CheckoutPage_Controller`, `ContactsPage_Controller`, `DocPage_Controller`, `DocumentsPage_Controller`

Package: sapphire\control
Located at sapphire/core/control/ContentController.php

## Methods summary

`public` | # `__construct( mixed $dataRecord = null )` The ContentController will take the URLSegment parameter from the URL and use that to look up a SiteTree record. The ContentController will take the URLSegment parameter from the URL and use that to look up a SiteTree record. #### Overrides `RequestHandler::__construct`
`public string` | # `Link( mixed $action = null )` Return the link to this controller, but force the expanded link to be returned so that form methods and similar will function properly. Return the link to this controller, but force the expanded link to be returned so that form methods and similar will function properly. #### Returns `string` string
`public `DataObjectSet`` | # `ChildrenOf( string|integer $parentRef )` Return the children of a given page. The parent reference can either be a page link or an ID. Return the children of a given page. The parent reference can either be a page link or an ID. #### Parameters $parentRef string|int $parentRef #### Returns ``DataObjectSet`` DataObjectSet
`public `DataObjectSet`` | # `Page( mixed $link )` #### Returns ``DataObjectSet`` DataObjectSet
`public` | # `init( )` Initialisation function that is run before any action on the controller is called. Initialisation function that is run before any action on the controller is called. #### Uses ``BasicAuth::requireLogin()`` #### Overrides `Controller::init`
`public `SS_HTTPResponse`` | # `handleRequest( `SS_HTTPRequest` $request )` This acts the same as `Controller::handleRequest()`, but if an action cannot be found this will attempt to fall over to a child controller in order to provide functionality for nested URLs. This acts the same as `Controller::handleRequest()`, but if an action cannot be found this will attempt to fall over to a child controller in order to provide functionality for nested URLs. #### Parameters $request $request The `SS_HTTPRequest` object that is responsible for distributing request parsing. #### Returns ``SS_HTTPResponse`` SS_HTTPResponse #### Overrides `Controller::handleRequest`
`public` | # `httpError( integer $code, string $message = null )` #### Parameters $code int $errorCode $message string $errorMessage #### Uses ``ErrorPage::response_for()`` #### Overrides `RequestHandler::httpError`
`public `RequestHandler`` | # `handleWidget( )` Handles widgets attached to a page through one or more `WidgetArea` elements. Iterated through each $has_one relation with a `WidgetArea` and looks for connected widgets by their database identifier. Assumes URLs in the following format: <URLSegment>/widget/<Widget-ID>. Handles widgets attached to a page through one or more `WidgetArea` elements. Iterated through each $has_one relation with a `WidgetArea` and looks for connected widgets by their database identifier. Assumes URLs in the following format: <URLSegment>/widget/<Widget-ID>. #### Returns ``RequestHandler`` RequestHandler
`public string` | # `project( )` Get the project name Get the project name #### Returns `string` string
`public` | # `data( )` Returns the associated database record Returns the associated database record
`public `DataObjectSet`` | # `getMenu( mixed $level = 1 )` Returns a fixed navigation menu of the given level. Returns a fixed navigation menu of the given level. #### Returns ``DataObjectSet`` DataObjectSet
`public` | # `Menu( mixed $level )`
`public` | # `LoginForm( )` Returns the default log-in form. Returns the default log-in form.
`public` | # `SilverStripeNavigator( )`
`public` | # `PageComments( )` Returns a page comment system Returns a page comment system
`public` | # `SiteConfig( )`
`public` | # `LangAttributes( )` Returns the xml:lang and lang attributes. Returns the xml:lang and lang attributes. #### Deprecated 2.5 Use ContentLocale() instead and write attribute names suitable to XHTML/HTML templates directly in the template.
`public string` | # `ContentLocale( )` Returns an RFC1766 compliant locale string, e.g. 'fr-CA'. Inspects the associated `ContentController::$dataRecord` for a SiteTree->Locale value if present, and falls back to `Translatable::get_current_locale()` or `i18n::default_locale()`, depending if Translatable is enabled. Returns an RFC1766 compliant locale string, e.g. 'fr-CA'. Inspects the associated `ContentController::$dataRecord` for a SiteTree->Locale value if present, and falls back to `Translatable::get_current_locale()` or `i18n::default_locale()`, depending if Translatable is enabled. Suitable for insertion into lang= and xml:lang= attributes in HTML or XHTML output. #### Returns `string` string
`public` | # `successfullyinstalled( )` This action is called by the installation system This action is called by the installation system
`public` | # `deleteinstallfiles( )`

### Methods inherited from Controller

`CurrentMember()`, `Now()`, `PastMember()`, `PastVisitor()`, `can()`, `curr()`, `defaultAction()`, `disableBasicAuth()`, `getAction()`, `getFormOwner()`, `getRequest()`, `getResponse()`, `getSession()`, `getURLParams()`, `getViewer()`, `handleAction()`, `hasAction()`, `hasActionTemplate()`, `has_curr()`, `isAjax()`, `join_links()`, `popCurrent()`, `pushCurrent()`, `redirect()`, `redirectBack()`, `redirectedTo()`, `render()`, `setSession()`, `setURLParams()`

### Methods inherited from RequestHandler

`allowedActions()`, `checkAccessAction()`

### Methods inherited from ViewableData

`ATT_val()`, `BaseHref()`, `CSSClasses()`, `ColumnBreak()`, `ColumnCalc()`, `ColumnNumber()`, `ColumnPad()`, `ColumnPos()`, `CurrentPage()`, `Debug()`, `Even()`, `EvenOdd()`, `First()`, `FirstLast()`, `HasPerm()`, `IsAjax()`, `JS_val()`, `Last()`, `Me()`, `Middle()`, `MiddleString()`, `Modulus()`, `MultipleOf()`, `Odd()`, `Pos()`, `RAW_val()`, `SQL_val()`, `ThemeDir()`, `ThemeName()`, `Top()`, `TotalItems()`, `XML_val()`, `__get()`, `__isset()`, `__set()`, `buildCastingCache()`, `cachedCall()`, `castingClass()`, `castingHelper()`, `castingHelperPair()`, `castingObjectCreator()`, `castingObjectCreatorPair()`, `customise()`, `defineMethods()`, `escapeTypeForField()`, `getField()`, `getIterator()`, `getSecurityID()`, `getXMLValues()`, `hasField()`, `hasValue()`, `i18nLocale()`, `iteratorProperties()`, `obj()`, `renderWith()`, `setCustomisedObj()`, `setField()`

### Methods inherited from Object

`__call()`, `__toString()`, `__wakeup()`, `addMethodsFrom()`, `addStaticVars()`, `addWrapperMethod()`, `add_extension()`, `add_static_var()`, `allMethodNames()`, `cacheToFile()`, `cacheToFileWithArgs()`, `clearCache()`, `combined_static()`, `create()`, `createMethod()`, `create_from_string()`, `exists()`, `extInstance()`, `extend()`, `getCustomClass()`, `getExtensionInstance()`, `getExtensionInstances()`, `get_extensions()`, `get_static()`, `hasExtension()`, `hasMethod()`, `has_extension()`, `invokeWithExtensions()`, `is_a()`, `loadCache()`, `parentClass()`, `parse_class_spec()`, `remove_extension()`, `sanitiseCachename()`, `saveCache()`, `set_stat()`, `set_static()`, `set_uninherited()`, `stat()`, `strong_create()`, `uninherited()`, `uninherited_static()`, `useCustomClass()`

### Magic methods summary

## Properties summary

`protected mixed` | $dataRecord | #
`public static array` | $url_handlers | # Default URL handlers - (Action)/(ID)/(OtherID) Default URL handlers - (Action)/(ID)/(OtherID)
`public static array` | $allowed_actions | # Define a list of action handling methods that are allowed to be called directly by URLs. The variable should be an array of action names. This sample shows the different values that it can contain: Define a list of action handling methods that are allowed to be called directly by URLs. The variable should be an array of action names. This sample shows the different values that it can contain:
    array(
            'someaction', // someaction can be accessed by anyone, any time
            'otheraction' => true, // So can otheraction
            'restrictedaction' => 'ADMIN', // restrictedaction can only be people with ADMIN privilege
            'complexaction' '->canComplexAction' // complexaction can only be accessed if $this->canComplexAction() returns true
    );

### Properties inherited from Controller

`$action`, `$baseInitCalled`, `$basicAuthEnabled`, `$controller_stack`, `$request`, `$requestParams`, `$response`, `$session`, `$urlParams`

### Properties inherited from RequestHandler

`$brokenOnConstruct`

### Properties inherited from ViewableData

`$casting`, `$customisedObject`, `$default_cast`, `$failover`, `$iteratorPos`, `$iteratorTotalItems`

### Properties inherited from Object

`$class`, `$extension_instances`, `$extensions`

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -