<?php namespace SilverStripe\Control\Tests\RequestHandlingTest; use SilverStripe\Control\Controller; use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\HTTPResponse; use SilverStripe\Control\HTTPResponse_Exception; use SilverStripe\Dev\TestOnly; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\FormAction; use SilverStripe\View\SSViewer; /** * Controller for the test */ class TestController extends Controller implements TestOnly { private static $url_segment = 'TestController'; private static $allowed_actions = [ 'method', 'legacymethod', 'virtualfile', 'TestForm', 'throwexception', 'throwresponseexception', 'throwhttperror', ]; private static $url_handlers = [ // The double-slash is need here to ensure that '$Action//$ID/$OtherID' => "handleAction", ]; private static $extensions = [ ControllerExtension::class, AllowedControllerExtension::class, ]; public function __construct() { $this->failover = new ControllerFailover(); parent::__construct(); if (Controller::has_curr()) { $this->setRequest(Controller::curr()->getRequest()); } } public function index(HTTPRequest $request) { return "This is the controller"; } public function method(HTTPRequest $request) { return "This is a method on the controller: " . $request->param('ID') . ', ' . $request->param('OtherID'); } public function legacymethod(HTTPRequest $request) { return "\$this->urlParams can be used, for backward compatibility: " . $this->urlParams['ID'] . ', ' . $this->urlParams['OtherID']; } public function virtualfile(HTTPRequest $request) { return "This is the virtualfile method"; } public function TestForm() { return new TestForm( $this, "TestForm", new FieldList( new TestFormField("MyField"), new SubclassedFormField("SubclassedField") ), new FieldList( new FormAction("myAction") ) ); } public function throwexception() { throw new HTTPResponse_Exception('This request was invalid.', 400); } public function throwresponseexception() { throw new HTTPResponse_Exception(new HTTPResponse('There was an internal server error.', 500)); } public function throwhttperror() { $this->httpError(404, 'This page does not exist.'); } public function getViewer($action) { return new SSViewer('BlankPage'); } }