/**
  * URL for Subject
  *
  * @param Subject $subject
  * @return string url
  */
 public function linkSubject(Subject $subject)
 {
     $arrParams = $this->lateralLink();
     $arrParams['field'] = 'subject';
     $arrParams['query'] = $subject->value;
     return $this->request->url_for($arrParams);
 }
 /**
  * Redirect to a new URL
  * 
  * @param array|string $location	location to redirect to
  * 
  * @return RedirectResponse
  */
 protected function redirectTo($location)
 {
     $url = $location;
     if (is_array($location)) {
         $url = $this->request->url_for($location, true);
     }
     return new RedirectResponse($url);
 }
 /**
  * Add links for Category, Database, and Librarian
  * 
  * @param mixed $object  array|Category|Database
  * @param bool $deep     whether to go deep if a Category is supplied
  */
 public function injectDataLinks($object, $deep = true)
 {
     if ($object == null) {
         return null;
     }
     // array
     if (is_array($object) || $object instanceof \ArrayIterator) {
         foreach ($object as $item) {
             $this->injectDataLinks($item, $deep);
         }
         return null;
     }
     // not an object and not an array, so what is it?
     if (!is_object($object)) {
         throw new \DomainException('Param must be of type array, Category or Database');
     }
     // Database
     if ($object instanceof Database) {
         // record url
         $params = array('controller' => $this->request->getParam('controller'), 'action' => 'database', 'id' => $object->getId());
         $object->url = $this->request->url_for($params, true);
         // proxy url
         $params['action'] = 'proxy';
         $object->url_proxy = $this->request->url_for($params, true);
     } elseif ($object instanceof Category) {
         // category link
         $params = array('controller' => 'databases', 'action' => 'subject', 'subject' => $object->getNormalized());
         $object->url = $this->request->url_for($params, true);
         // embed link
         $params = array('controller' => 'embed', 'action' => 'gen-subject', 'subject' => $object->getNormalized());
         $object->url_embed = $this->request->url_for($params, true);
         // embed link
         $params = array('controller' => 'embed', 'action' => 'gen-subject', 'subject' => $object->getNormalized());
         $object->url_embed = $this->request->url_for($params);
         // only continue if we are going deep
         if ($deep == true) {
             // Librarian
             foreach ($object->getLibrarians() as $librarian) {
                 $params = array('controller' => 'databases', 'action' => 'librarian', 'id' => $librarian->getId());
             }
             // Databases
             foreach ($object->getSubcategories() as $subcategory) {
                 foreach ($subcategory->getDatabases() as $database_sequence) {
                     $this->injectDataLinks($database_sequence->getDatabase(), $deep);
                 }
             }
         }
     }
 }