Re: cached views don't retain document mime type (xml, json, etc.)
That's interesting. It suggests this might only be a major issue when caching is used in conjunction with parseExtensions() (which, though a bit of magic, automatically inserts the proper Content-type header for you). It seems a bit hackish to have to explicitly not cache these headers in your views. I'll post a bug... skylar On Jan 26, 10:59 am, AD7six wrote: > On Jan 26, 7:38 pm, skylar wrote: > > > > > Hi, > > > I'm working on a site using CakePHP that has various feeds in JSON and > > XML. I tried caching some of those feeds today using controller-level > > view caching and ran into an annoying problem - cached views don't > > seem to retain the mime type of the document. That is, in most cases, > > a cached view (not elements) will be served up as text/html by > > CakePHP, not the type of the original document. > > > To recreate this, simply try offering a XML or JSON based view in a > > controller, cache it, then load it twice. (using parseExtensions() > > might also help) The first request works correctly (uncached request), > > but the second request will come back as text/html (except for an edge > > case around XML). > > > The problem seems to be at line 508 of cake/libs/view/view.php. (I'm > > using 1.2.0.7962) This is where the view class outputs a cached view > > file, if valid. The only check here for alternative document mime- > > types is this confusing check for a layout named 'xml': > > > if ($this->layout === 'xml') { > > header('Content-type: text/xml'); > > } > > > The cache file doesn't have any properties that retain the extension > > or type that would have been used by RequestHandler (or other code) to > > find the right content type. However, $this->here does capture the > > extension implicitly. > > > It seems the proper thing for the caching mechanism to do is to store > > the content type as a variable in the view cache file (eg, $this->ext > > or $this->content_type) so that the proper header can be recreated > > with the cache request. However, I don't know much about the CakePHP > > internals so I'll defer primarily to explaining the situation in hopes > > of filing a good bug and rallying a fix. This seems like a major > > oversight in the caching system as feeds (ajax, json, xml) are > > becoming an increasingly critical part of any modern web application. > > > Has anyone noticed this before? Known workaround (without modifying > > cake lib code)? Is a bug already filed on this that I couldn't find? > > Anything else I'm missing here? > > That's how the book handles > it:http://thechaw.com/cakebook/source/views/layouts/rss/default.ctp > > hth, > > AD --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~--~~~~--~~--~--~---
Re: cached views don't retain document mime type (xml, json, etc.)
On Jan 26, 7:38 pm, skylar wrote: > Hi, > > I'm working on a site using CakePHP that has various feeds in JSON and > XML. I tried caching some of those feeds today using controller-level > view caching and ran into an annoying problem - cached views don't > seem to retain the mime type of the document. That is, in most cases, > a cached view (not elements) will be served up as text/html by > CakePHP, not the type of the original document. > > To recreate this, simply try offering a XML or JSON based view in a > controller, cache it, then load it twice. (using parseExtensions() > might also help) The first request works correctly (uncached request), > but the second request will come back as text/html (except for an edge > case around XML). > > The problem seems to be at line 508 of cake/libs/view/view.php. (I'm > using 1.2.0.7962) This is where the view class outputs a cached view > file, if valid. The only check here for alternative document mime- > types is this confusing check for a layout named 'xml': > > if ($this->layout === 'xml') { > header('Content-type: text/xml'); > } > > The cache file doesn't have any properties that retain the extension > or type that would have been used by RequestHandler (or other code) to > find the right content type. However, $this->here does capture the > extension implicitly. > > It seems the proper thing for the caching mechanism to do is to store > the content type as a variable in the view cache file (eg, $this->ext > or $this->content_type) so that the proper header can be recreated > with the cache request. However, I don't know much about the CakePHP > internals so I'll defer primarily to explaining the situation in hopes > of filing a good bug and rallying a fix. This seems like a major > oversight in the caching system as feeds (ajax, json, xml) are > becoming an increasingly critical part of any modern web application. > > Has anyone noticed this before? Known workaround (without modifying > cake lib code)? Is a bug already filed on this that I couldn't find? > Anything else I'm missing here? That's how the book handles it: http://thechaw.com/cakebook/source/views/layouts/rss/default.ctp hth, AD --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~--~~~~--~~--~--~---
cached views don't retain document mime type (xml, json, etc.)
Hi, I'm working on a site using CakePHP that has various feeds in JSON and XML. I tried caching some of those feeds today using controller-level view caching and ran into an annoying problem - cached views don't seem to retain the mime type of the document. That is, in most cases, a cached view (not elements) will be served up as text/html by CakePHP, not the type of the original document. To recreate this, simply try offering a XML or JSON based view in a controller, cache it, then load it twice. (using parseExtensions() might also help) The first request works correctly (uncached request), but the second request will come back as text/html (except for an edge case around XML). The problem seems to be at line 508 of cake/libs/view/view.php. (I'm using 1.2.0.7962) This is where the view class outputs a cached view file, if valid. The only check here for alternative document mime- types is this confusing check for a layout named 'xml': if ($this->layout === 'xml') { header('Content-type: text/xml'); } The cache file doesn't have any properties that retain the extension or type that would have been used by RequestHandler (or other code) to find the right content type. However, $this->here does capture the extension implicitly. It seems the proper thing for the caching mechanism to do is to store the content type as a variable in the view cache file (eg, $this->ext or $this->content_type) so that the proper header can be recreated with the cache request. However, I don't know much about the CakePHP internals so I'll defer primarily to explaining the situation in hopes of filing a good bug and rallying a fix. This seems like a major oversight in the caching system as feeds (ajax, json, xml) are becoming an increasingly critical part of any modern web application. Has anyone noticed this before? Known workaround (without modifying cake lib code)? Is a bug already filed on this that I couldn't find? Anything else I'm missing here? Thanks, skylar --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~--~~~~--~~--~--~---