/**
  * Add method to definition
  *
  * @param  array|Zend_Server_Method_Definition $method
  * @param  null|string $name
  * @return Zend_Server_Definition
  * @throws Zend_Server_Exception if duplicate or invalid method provided
  */
 public function addMethod($method, $name = null)
 {
     if (is_array($method)) {
         // require_once 'Zend/Server/Method/Definition.php';
         $method = new Zend_Server_Method_Definition($method);
     } elseif (!$method instanceof Zend_Server_Method_Definition) {
         // require_once 'Zend/Server/Exception.php';
         throw new Zend_Server_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 'Zend/Server/Exception.php';
         throw new Zend_Server_Exception('No method name provided');
     }
     if (!$this->_overwriteExistingMethods && array_key_exists($name, $this->_methods)) {
         // require_once 'Zend/Server/Exception.php';
         throw new Zend_Server_Exception(sprintf('Method by name of "%s" already exists', $name));
     }
     $this->_methods[$name] = $method;
     return $this;
 }
Ejemplo n.º 2
0
 /**
  * Here we need to be able to add new functions to the call list
  *
  * @param array $functions
  */
 public function addFunctionsAsMethods($functions)
 {
     foreach ($functions as $key => $function) {
         // do a reflection on the function interface
         $reflection = new Zend_Server_Reflection_Function(new ReflectionFunction($function));
         // build up the method definition
         $definition = new Zend_Server_Method_Definition();
         $definition->setName($key)->setCallback($this->_buildCallback($reflection))->setMethodHelp($reflection->getDescription())->setInvokeArguments($reflection->getInvokeArguments());
         // here is where the parameters really get built up
         foreach ($reflection->getPrototypes() as $proto) {
             $prototype = new Zend_Server_Method_Prototype();
             $prototype->setReturnType($this->_fixType($proto->getReturnType()));
             foreach ($proto->getParameters() as $parameter) {
                 $param = new Zend_Server_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);
         }
         // finally add the new function definition to the available call stack
         $this->_table->addMethod($definition, $key);
     }
 }
Ejemplo n.º 3
0
 /**
  * Dispatch method
  *
  * @param  Zend_Server_Method_Definition $invocable
  * @param  array $params
  * @return mixed
  */
 protected function _dispatch(Zend_Server_Method_Definition $invocable, array $params)
 {
     $callback = $invocable->getCallback();
     $type = $callback->getType();
     if ('function' == $type) {
         $function = $callback->getFunction();
         return call_user_func_array($function, $params);
     }
     $class = $callback->getClass();
     $method = $callback->getMethod();
     if ('static' == $type) {
         return call_user_func_array(array($class, $method), $params);
     }
     $object = $invocable->getObject();
     if (!is_object($object)) {
         $invokeArgs = $invocable->getInvokeArguments();
         if (!empty($invokeArgs)) {
             $reflection = new ReflectionClass($class);
             $object = $reflection->newInstanceArgs($invokeArgs);
         } else {
             $object = new $class();
         }
     }
     return call_user_func_array(array($object, $method), $params);
 }
Ejemplo n.º 4
0
 /**
  * Get method return type
  *
  * @param  Zend_Server_Reflection_Function_Abstract $method
  * @return string|array
  */
 protected function _getReturnType(Zend_Server_Method_Definition $method)
 {
     $return = array();
     foreach ($method->getPrototypes() as $prototype) {
         $return[] = $prototype->getReturnType();
     }
     if (1 == count($return)) {
         return $return[0];
     }
     return $return;
 }
 public function testPassingOptionsToConstructorShouldSetObjectState()
 {
     $options = array('name' => 'foo.bar', 'callback' => array('function' => 'foo', 'type' => 'function'), 'prototypes' => array(array('returnType' => 'struct', 'parameters' => array('string', 'array'))), 'methodHelp' => 'foo bar', 'object' => new stdClass(), 'invokeArguments' => array('foo', array('bar', 'baz')));
     $definition = new Zend_Server_Method_Definition($options);
     $test = $definition->toArray();
     $this->assertEquals($options['name'], $test['name']);
     $this->assertEquals($options['callback'], $test['callback']);
     $this->assertEquals($options['prototypes'], $test['prototypes']);
     $this->assertEquals($options['methodHelp'], $test['methodHelp']);
     $this->assertEquals($options['object'], $test['object']);
     $this->assertEquals($options['invokeArguments'], $test['invokeArguments']);
 }