Overview

Namespaces

  • api
  • config
  • database
  • PHP
  • Slim
    • Exception
    • Http
    • Middleware
  • utiliy

Classes

  • ContentTypes
  • Flash
  • MethodOverride
  • PrettyExceptions
  • SessionCookie
  • Overview
  • Namespace
  • Class
  • Tree
 1: <?php
 2: /**
 3:  * Slim - a micro PHP 5 framework
 4:  *
 5:  * @author      Josh Lockhart <info@slimframework.com>
 6:  * @copyright   2011 Josh Lockhart
 7:  * @link        http://www.slimframework.com
 8:  * @license     http://www.slimframework.com/license
 9:  * @version     2.2.0
10:  * @package     Slim
11:  *
12:  * MIT LICENSE
13:  *
14:  * Permission is hereby granted, free of charge, to any person obtaining
15:  * a copy of this software and associated documentation files (the
16:  * "Software"), to deal in the Software without restriction, including
17:  * without limitation the rights to use, copy, modify, merge, publish,
18:  * distribute, sublicense, and/or sell copies of the Software, and to
19:  * permit persons to whom the Software is furnished to do so, subject to
20:  * the following conditions:
21:  *
22:  * The above copyright notice and this permission notice shall be
23:  * included in all copies or substantial portions of the Software.
24:  *
25:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26:  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27:  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28:  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29:  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30:  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31:  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32:  */
33: namespace Slim\Middleware;
34: 
35:  /**
36:   * HTTP Method Override
37:   *
38:   * This is middleware for a Slim application that allows traditional
39:   * desktop browsers to submit psuedo PUT and DELETE requests by relying
40:   * on a pre-determined request parameter. Without this middleware,
41:   * desktop browsers are only able to submit GET and POST requests.
42:   *
43:   * This middleware is included automatically!
44:   *
45:   * @package    Slim
46:   * @author     Josh Lockhart
47:   * @since      1.6.0
48:   */
49: class MethodOverride extends \Slim\Middleware
50: {
51:     /**
52:      * @var array
53:      */
54:     protected $settings;
55: 
56:     /**
57:      * Constructor
58:      * @param  \Slim  $app
59:      * @param  array  $settings
60:      */
61:     public function __construct($settings = array())
62:     {
63:         $this->settings = array_merge(array('key' => '_METHOD'), $settings);
64:     }
65: 
66:     /**
67:      * Call
68:      *
69:      * Implements Slim middleware interface. This method is invoked and passed
70:      * an array of environment variables. This middleware inspects the environment
71:      * variables for the HTTP method override parameter; if found, this middleware
72:      * modifies the environment settings so downstream middleware and/or the Slim
73:      * application will treat the request with the desired HTTP method.
74:      *
75:      * @param  array         $env
76:      * @return array[status, header, body]
77:      */
78:     public function call()
79:     {
80:         $env = $this->app->environment();
81:         if (isset($env['X_HTTP_METHOD_OVERRIDE'])) {
82:             // Header commonly used by Backbone.js and others
83:             $env['slim.method_override.original_method'] = $env['REQUEST_METHOD'];
84:             $env['REQUEST_METHOD'] = strtoupper($env['X_HTTP_METHOD_OVERRIDE']);
85:         } elseif (isset($env['REQUEST_METHOD']) && $env['REQUEST_METHOD'] === 'POST') {
86:             // HTML Form Override
87:             $req = new \Slim\Http\Request($env);
88:             $method = $req->post($this->settings['key']);
89:             if ($method) {
90:                 $env['slim.method_override.original_method'] = $env['REQUEST_METHOD'];
91:                 $env['REQUEST_METHOD'] = strtoupper($method);
92:             }
93:         }
94:         $this->next->call();
95:     }
96: }
97: 
GeoApi API documentation generated by ApiGen 2.8.0