API: Replace Director::direct() with Director::handleRequest().

There was no longer any code in direct() and so I opted to expose the
handleRequest() method instead.
This commit is contained in:
Sam Minnee 2017-06-23 15:12:15 +12:00 committed by Damian Mooyman
parent 72a7655e95
commit 10866c0809
4 changed files with 23 additions and 42 deletions

View File

@ -16,13 +16,13 @@ use SilverStripe\View\TemplateGlobalProvider;
/** /**
* Director is responsible for processing URLs, and providing environment information. * Director is responsible for processing URLs, and providing environment information.
* *
* The most important part of director is {@link Director::direct()}, which is passed a URL and will * The most important part of director is {@link Director::handleRequest()}, which is passed an HTTPRequest and will
* execute the appropriate controller. * execute the appropriate controller.
* *
* Director also has a number of static methods that provide information about the environment, such as * Director also has a number of static methods that provide information about the environment, such as
* {@link Director::$environment_type}. * {@link Director::$environment_type}.
* *
* @see Director::direct() * @see Director::handleRequest()
* @see Director::$rules * @see Director::$rules
* @see Director::$environment_type * @see Director::$environment_type
*/ */
@ -100,40 +100,10 @@ class Director implements TemplateGlobalProvider
protected static $environment_type; protected static $environment_type;
/** /**
* Process the given URL, creating the appropriate controller and executing it. * Test a URL request, returning a response object. This method is a wrapper around
* * Director::handleRequest() to assist with functional testing. It will execute the URL given, and
* Request processing is handled as follows:
* - Director::direct() creates a new HTTPResponse object and passes this to
* Director::handleRequest().
* - Director::handleRequest($request) checks each of the Director rules and identifies a controller
* to handle this request.
* - Controller::handleRequest($request) is then called. This will find a rule to handle the URL,
* and call the rule handling method.
* - RequestHandler::handleRequest($request) is recursively called whenever a rule handling method
* returns a RequestHandler object.
*
* In addition to request processing, Director will manage the session, and perform the output of
* the actual response to the browser.
*
* @uses handleRequest() rule-lookup logic is handled by this.
* @uses TestController::handleRequest() This handles the page logic for a Director::direct() call.
* @param HTTPRequest $request
* @return HTTPResponse
* @throws HTTPResponse_Exception
*/
public static function direct(HTTPRequest $request)
{
// Generate output
return static::handleRequest($request);
}
/**
* Test a URL request, returning a response object. This method is the counterpart of
* Director::direct() that is used in functional testing. It will execute the URL given, and
* return the result as an HTTPResponse object. * return the result as an HTTPResponse object.
* *
* @uses TestController::handleRequest() Handles the page logic for a Director::direct() call.
*
* @param string $url The URL to visit. * @param string $url The URL to visit.
* @param array $postVars The $_POST & $_FILES variables. * @param array $postVars The $_POST & $_FILES variables.
* @param array|Session $session The {@link Session} object representing the current session. * @param array|Session $session The {@link Session} object representing the current session.
@ -162,7 +132,7 @@ class Director implements TemplateGlobalProvider
) { ) {
return static::mockRequest( return static::mockRequest(
function (HTTPRequest $request) { function (HTTPRequest $request) {
return static::direct($request); return static::handleRequest($request);
}, },
$url, $url,
$postVars, $postVars,
@ -315,13 +285,24 @@ class Director implements TemplateGlobalProvider
} }
/** /**
* Handle an HTTP request, defined with a HTTPRequest object. * Process the given URL, creating the appropriate controller and executing it.
*
* Request processing is handled as follows:
* - Director::handleRequest($request) checks each of the Director rules and identifies a controller
* to handle this request.
* - Controller::handleRequest($request) is then called. This will find a rule to handle the URL,
* and call the rule handling method.
* - RequestHandler::handleRequest($request) is recursively called whenever a rule handling method
* returns a RequestHandler object.
*
* In addition to request processing, Director will manage the session, and perform the output of
* the actual response to the browser.
* *
* @skipUpgrade
* @param HTTPRequest $request * @param HTTPRequest $request
* @return HTTPResponse * @return HTTPResponse
* @throws HTTPResponse_Exception
*/ */
protected static function handleRequest(HTTPRequest $request) public static function handleRequest(HTTPRequest $request)
{ {
$rules = Director::config()->uninherited('rules'); $rules = Director::config()->uninherited('rules');

View File

@ -96,7 +96,7 @@ class HTTPApplication implements Application
// Ensure boot is invoked // Ensure boot is invoked
return $this->execute($request, function (HTTPRequest $request) { return $this->execute($request, function (HTTPRequest $request) {
return Director::direct($request); return Director::handleRequest($request);
}, $flush); }, $flush);
} }

View File

@ -846,7 +846,7 @@ class HTTPRequest implements ArrayAccess
* Using GET for the "_method" override is not supported, * Using GET for the "_method" override is not supported,
* as GET should never carry out state changes. * as GET should never carry out state changes.
* Alternatively you can use a custom HTTP header 'X-HTTP-Method-Override' * Alternatively you can use a custom HTTP header 'X-HTTP-Method-Override'
* to override the original method in {@link Director::direct()}. * to override the original method.
* The '_method' POST parameter overrules the custom HTTP header. * The '_method' POST parameter overrules the custom HTTP header.
* *
* @param string $origMethod Original HTTP method from the browser request * @param string $origMethod Original HTTP method from the browser request
@ -857,7 +857,7 @@ class HTTPRequest implements ArrayAccess
{ {
if (isset($postVars['_method'])) { if (isset($postVars['_method'])) {
if (!in_array(strtoupper($postVars['_method']), array('GET','POST','PUT','DELETE','HEAD'))) { if (!in_array(strtoupper($postVars['_method']), array('GET','POST','PUT','DELETE','HEAD'))) {
user_error('Director::direct(): Invalid "_method" parameter', E_USER_ERROR); user_error('HTTPRequest::detect_method(): Invalid "_method" parameter', E_USER_ERROR);
} }
return strtoupper($postVars['_method']); return strtoupper($postVars['_method']);
} else { } else {

View File

@ -1032,7 +1032,7 @@ class Form extends ViewableData implements HasRequestHandler
* As most browsers only support GET and POST in * As most browsers only support GET and POST in
* form submissions, all other HTTP methods are * form submissions, all other HTTP methods are
* added as a hidden field "_method" that * added as a hidden field "_method" that
* gets evaluated in {@link Director::direct()}. * gets evaluated in {@link HTTPRequest::detect_method()}.
* See {@link FormMethod()} to get a HTTP method * See {@link FormMethod()} to get a HTTP method
* for safe insertion into a <form> tag. * for safe insertion into a <form> tag.
* *