I have a songs controller. Within the songs controller i have a ‘view’ action which get’s passed an id, eg
- /songs/view/1
- /songs/view/5
- /songs/view/500
When a user visits /songs/view/1, the file is cached correctly and saved as ‘songs_view_1.php’
Now for the problem, when a user hit’s a different song, eg /songs/view/2, the ‘songs_view_1.php’ is deleted and ‘/songs/view/2.php’ is in it’s place.
The cahced files will stay there for a day if I don’t visit a different url, and visiting a different action will not affect any other action’s cached file.
I’ve tried replacing my ‘cake’ folder (from 1.2 to 1.2.6), but that didn’t do anything. I get no error messages at all and nothing in the logs.
Here’s my code, I’ve tried umpteen variations all ending up with the same problem.
var $helpers = array('Cache');
var $cacheAction = array(
'view/' => '+1 day'
);
Any ideas?
EDIT:
After some more testing, this code
var $cacheAction = array(
'view/1' => "1 day",
'view/2' => "1 day"
);
will cache ‘view/1’ or ‘view/2’, but delete the previous page as before. If I visit ‘/view/3’ it will delete the cached page from before… sigh
EDIT:
Having the same issue on another server with same code…
After working hours on this, I finally figure out the reason why the cache keep being deleted, the REASON is because you had some operations that update your ‘song’ record in the database after you view the ‘song’. For my case, I keep a column in my database called ‘Hits’ to store the number of hits/reads, and it updates it everytime it read the record.
Cakephp has a feature to aumotically detect changes to your database and clear the cache for you.
Try remove any operations that update your ‘song’ record and the cacheaction should be working properly.
An alternative is to redefine the clearcache function in your ‘song’ model… it will disable the function to auto-clear off the cache.. but then remember to manually clear the cache yourself when an update is performed.