Пример #1
0
 public function serve($app)
 {
     $fileType = $app->request()->format();
     $filePath = null;
     $filename = (string) $app->parameters()->path . ($fileType ? '.' . $fileType : '');
     if ($fileType == 'css' || $fileType == 'js') {
         $data = $app->getService('assets')->compileFile($filename, !(bool) $app->parameters()->body);
         if ($data) {
             $filePath = $data['tempFilePath'];
         }
     } else {
         $file = $app->getService('assets')->findFile($filename);
         if ($file) {
             $filePath = $file->originalFilePath();
         }
     }
     $response = $app->response();
     if ($filePath) {
         $mtime = filemtime($filePath);
         $etag = md5($filePath . $mtime);
         if ($this->notModified($filePath, $etag)) {
             $this->setNotModifiedHeaders($response);
             return;
         }
         $response->addHeader('Last-Modified', date('D, d M Y H:i:s T'))->addHeader('ETag', $etag)->addHeader('Cache-control', 'public, must-revalidate')->setBody(file_get_contents($filePath))->setContentType(MimeTypes::getMimeType($fileType));
     } else {
         $response->setStatus(404);
     }
 }
Пример #2
0
 protected function setDefaultContentType($controller)
 {
     if (!$controller->response()->contentType()) {
         $controller->response()->setContentType(MimeTypes::getMimeType($controller->request()->format()));
     }
 }
Пример #3
0
 /**
  * Attempts to serialize $var according to $format, setting the
  * proper content type and returning the serialization.
  * TODO: improve content type.
  *
  * @return string
  */
 public function renderSerialized($var, $format)
 {
     if (is_string($var)) {
         $serialized = $var;
     } elseif (is_object($var)) {
         $toMethod = 'to' . ucFirst($format);
         if ($var instanceof \Rails\ActiveRecord\Relation) {
             $serialized = $var->records()->{$toMethod}();
         } else {
             if (is_callable([$var, $toMethod])) {
                 $serialized = $var->{$toMethod}();
             }
         }
     } elseif (is_array($var)) {
         if ($format == 'json') {
             $serialized = json_encode($var);
         }
     }
     if (!isset($serialized)) {
         if (is_object($var)) {
             $message = sprintf("Can't serialize object of class %s to format %s", get_class($var), $format);
         } else {
             $message = sprintf("Can't serialize variable of type %s to format %s", gettype($var), $format);
         }
         throw new Exception\RuntimeException($message);
     }
     $this->controller->response()->setContentType(MimeTypes::getMimeType($format));
     return $serialized;
 }