/** * Return debugging information, as XHTML. If a field name is passed, it will show debugging information on that * field, otherwise it will show information on all methods and fields. * * @param string $field the field name * @return string */ public function forTemplate($field = null) { // debugging info for a specific field if ($field) { return "<b>Debugging Information for {$this->class}->{$field}</b><br/>" . ($this->object->hasMethod($field) ? "Has method '{$field}'<br/>" : null) . ($this->object->hasField($field) ? "Has field '{$field}'<br/>" : null); } // debugging information for the entire class $reflector = new ReflectionObject($this->object); $debug = "<b>Debugging Information: all methods available in '{$this->object->class}'</b><br/><ul>"; foreach ($this->object->allMethodNames() as $method) { // check that the method is public if ($method[0] === strtoupper($method[0]) && $method[0] != '_') { if ($reflector->hasMethod($method) && ($method = $reflector->getMethod($method))) { if ($method->isPublic()) { $debug .= "<li>\${$method->getName()}"; if (count($method->getParameters())) { $debug .= ' <small>(' . implode(', ', $method->getParameters()) . ')</small>'; } $debug .= '</li>'; } } else { $debug .= "<li>\${$method}</li>"; } } } $debug .= '</ul>'; if ($this->object->hasMethod('toMap')) { $debug .= "<b>Debugging Information: all fields available in '{$this->object->class}'</b><br/><ul>"; foreach ($this->object->toMap() as $field => $value) { $debug .= "<li>\${$field}</li>"; } $debug .= "</ul>"; } // check for an extra attached data if ($this->object->hasMethod('data') && $this->object->data() != $this->object) { $debug .= ViewableData_Debugger::create($this->object->data())->forTemplate(); } return $debug; }