Example #1
0
 /**
  * @param string $resourceName
  * @param Request\Request $request
  *
  * @return Resource
  * @throws Exception
  */
 public function loadResourceWithName($resourceName, $request = NULL)
 {
     $formattedResourceName = ucfirst($resourceName);
     if (!isset($this->loadedResources[$resourceName])) {
         $resourceDir = $this->config->getResourceDirectory();
         $jsonPath = "{$resourceDir}/{$formattedResourceName}.json";
         $classPath = "{$resourceDir}/{$formattedResourceName}.php";
         // verify resource existence
         if (file_exists($jsonPath)) {
             $jsonResource = new JSONResource($this, $resourceName, $jsonPath);
             $this->setupResource($jsonResource);
             $this->loadedResources[$resourceName] = $jsonResource;
         } else {
             if (FALSE && file_exists($classPath)) {
                 // TODO: deprecate PHP resource classes (should only be JSON + computers)
                 // load the class, check if failed
                 /** @noinspection PhpIncludeInspection */
                 require_once $classPath;
                 if (!class_exists($formattedResourceName, FALSE)) {
                     throw new Exception(Exception::Config, "Class '{$formattedResourceName}' not found in file '{$classPath}'");
                 }
                 $frestResourceClassName = '\\FREST\\Resource';
                 if (!is_subclass_of($formattedResourceName, $frestResourceClassName)) {
                     throw new Exception(Exception::Config, "Class '{$formattedResourceName}' is not a subclass of {$frestResourceClassName}");
                 }
                 /** @var \FREST\Resource $resource */
                 $classResource = new $formattedResourceName($this, $resourceName);
                 $this->setupResource($classResource);
                 $this->loadedResources[$resourceName] = $classResource;
             } else {
                 throw new Exception(Exception::Config, "File for resource '{$resourceName}' not found in directory '{$resourceDir}'");
             }
         }
     }
     /** @var Resource $resource */
     $resource = $this->loadedResources[$resourceName];
     return $resource;
 }