Пример #1
0
 /**
  * Add method to definition
  *
  * @param  array|Rest_Method_Definition $method
  * @param  null|string $name
  * @return Rest_Definition
  * @throws Rest_Exception if duplicate or invalid method provided
  */
 public function addMethod($method, $name = null)
 {
     if (is_array($method)) {
         require_once 'classes/rest/method/Definition.php';
         $method = new Rest_Method_Definition($method);
     } elseif (!$method instanceof Rest_Method_Definition) {
         require_once 'Exception.php';
         throw new Rest_Exception('Invalid method provided');
     }
     if (is_numeric($name)) {
         $name = null;
     }
     if (null !== $name) {
         $method->setName($name);
     } else {
         $name = $method->getName();
     }
     if (null === $name) {
         require_once 'Exception.php';
         throw new Rest_Exception('No method name provided');
     }
     if (!$this->_overwriteExistingMethods && array_key_exists($name, $this->_methods)) {
         require_once 'Exception.php';
         throw new Rest_Exception(sprintf('Method by name of "%s" already exists', $name));
     }
     $this->_methods[$name] = $method;
     return $this;
 }
Пример #2
0
 /**
  * Build a method signature
  *
  * @param  Rest_Reflection_Function_Abstract $reflection
  * @param  null|string|object $class
  * @return Rest_Method_Definition
  * @throws Rest_Exception on duplicate entry
  */
 protected function _buildSignature(Rest_Reflection_Function_Abstract $reflection, $class = null)
 {
     $ns = $reflection->getNamespace();
     $name = $reflection->getName();
     $method = empty($ns) ? $name : $ns . '.' . $name;
     if (!$this->_overwriteExistingMethods && $this->_table->hasMethod($method)) {
         require_once 'Exception.php';
         throw new Rest_Exception('Duplicate method registered: ' . $method);
     }
     $definition = new Rest_Method_Definition();
     $definition->setName($method)->setCallback($this->_buildCallback($reflection))->setMethodHelp($reflection->getDescription())->setInvokeArguments($reflection->getInvokeArguments());
     foreach ($reflection->getPrototypes() as $proto) {
         $prototype = new Rest_Method_Prototype();
         $prototype->setReturnType($this->_fixType($proto->getReturnType()));
         foreach ($proto->getParameters() as $parameter) {
             $param = new Rest_Method_Parameter(array('type' => $this->_fixType($parameter->getType()), 'name' => $parameter->getName(), 'optional' => $parameter->isOptional()));
             if ($parameter->isDefaultValueAvailable()) {
                 $param->setDefaultValue($parameter->getDefaultValue());
             }
             $prototype->addParameter($param);
         }
         $definition->addPrototype($prototype);
     }
     if (is_object($class)) {
         $definition->setObject($class);
     }
     $this->_table->addMethod($definition);
     return $definition;
 }