public function getCommandName()
 {
     if (is_null($this->action) || is_null($this->resource)) {
         return null;
     }
     return Sonata_Utils::camelize($this->action) . Sonata_Utils::camelize($this->resource);
 }
<?php

/**
 * This file is part of the Sonata RESTful PHP framework
 * (c) 2009-2010 Pascal Cremer <*****@*****.**>
 *
 * @author Pascal Cremer <*****@*****.**>
 */
require_once dirname(__FILE__) . '/bootstrap.php';
$t = new LimeTest();
// @Test: ::camelize()
$t->is(Sonata_Utils::camelize('foo_bar_baz'), 'FooBarBaz', 'The string was camelized correctly');
$t->is(Sonata_Utils::camelize('foo_bar_baz', true), 'fooBarBaz', 'The string was camelized correctly, starting lower-case');
$t->is(Sonata_Utils::camelize('foo _ bar _baz'), 'FooBarBaz', 'Whitespaces are ignored');
$t->is(Sonata_Utils::camelize(''), '', 'Empty strings are retuned untouched');
// @Test: ::underscore()
$t->is(Sonata_Utils::underscore('FooBar'), 'foo_bar', 'The string was underscored correctly');
$t->is(Sonata_Utils::underscore('myFooBar'), 'my_foo_bar', 'It even works for camelized strings that start lower-case');
$t->is(Sonata_Utils::underscore('Foo Bar-!/#Baz'), 'foo_bar_baz', 'Whitespaces and non-digit characters are ignored');
$t->is(Sonata_Utils::underscore(''), '', 'Empty strings are retuned untouched');
// @Test: ::slugify()
$t->is(Sonata_Utils::slugify('Here be dragons!'), 'here-be-dragons', 'The string was slugified correctly');
$t->is(Sonata_Utils::slugify('Hérè be drägons!'), 'here-be-dragons', 'Transforms UTF-8 characters correctly');
$t->is(Sonata_Utils::slugify(''), 'n-a', '\'n-a\' is returned for empty strings');
 public function getControllerClassName(Sonata_Request $request)
 {
     $resource = $request->getParameter('resource');
     if (!$resource) {
         return null;
     }
     return ucfirst(Sonata_Utils::camelize($resource)) . 'Controller';
 }
 /**
  * Renders a template and returns the raw data
  *
  * @param string $name The name of the template 
  * @param string $resource The name of the resource | NULL for generic templates
  * @param string $format The response format
  * @return string The rendered data
  */
 public function render($name, $resource = null, $format = 'xml')
 {
     if ($resource) {
         $templatePath = $this->dir . '/' . Sonata_Utils::underscore($resource) . '/' . $name . 'Success.' . $format . '.php';
     } else {
         $templatePath = dirname(__FILE__) . '/../data/templates/' . $name . 'Success.' . $format . '.php';
     }
     if (!is_readable($templatePath)) {
         throw new Sonata_Exception_Template(sprintf("The template '%s' does not exist or is not readable.", $name));
     }
     ob_start();
     include $templatePath;
     $data = ob_get_clean();
     return $data;
 }