Re: cached views don't retain document mime type (xml, json, etc.)

2009-01-26 Thread skylar

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.)

2009-01-26 Thread AD7six



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.)

2009-01-26 Thread skylar

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
-~--~~~~--~~--~--~---