Merge "Make DBAccessBase use DBConnRef, rename $wiki, and hide getLoadBalancer()"
[lhc/web/wiklou.git] / includes / Rest / SimpleHandler.php
index 65bc0f5..3c19e48 100644 (file)
@@ -3,17 +3,38 @@
 namespace MediaWiki\Rest;
 
 /**
- * A handler base class which unpacks attributes from the path template and
+ * A handler base class which unpacks parameters from the path template and
  * passes them as formal parameters to run().
  *
  * run() must be declared in the subclass. It cannot be declared as abstract
  * here because it has a variable parameter list.
+ * @todo Declare it as abstract after dropping HHVM
  *
  * @package MediaWiki\Rest
  */
 class SimpleHandler extends Handler {
        public function execute() {
-               $params = array_values( $this->getRequest()->getAttributes() );
+               $paramSettings = $this->getParamSettings();
+               $validatedParams = $this->getValidatedParams();
+               $unvalidatedParams = [];
+               $params = [];
+               foreach ( $this->getRequest()->getPathParams() as $name => $value ) {
+                       $source = $paramSettings[$name][self::PARAM_SOURCE] ?? 'unknown';
+                       if ( $source !== 'path' ) {
+                               $unvalidatedParams[] = $name;
+                               $params[] = $value;
+                       } else {
+                               $params[] = $validatedParams[$name];
+                       }
+               }
+
+               if ( $unvalidatedParams ) {
+                       throw new \LogicException(
+                               'Path parameters were not validated: ' . implode( ', ', $unvalidatedParams )
+                       );
+               }
+
+               // @phan-suppress-next-line PhanUndeclaredMethod
                return $this->run( ...$params );
        }
 }