我有两个看起来几乎相同的函数,并且作为来自JavaScript函数的AJAX请求一个接一个地调用。
/**
* get all Airports for autocomplete
*/
public function getAirports(){
if(Cache::has('airports')){
return Cache::get('airports');
}
$airportModel = new Airport;
$airports = json_encode($airportModel -> _getForAutocomplete('iata_faa_code'));
Cache::put('airports', $airports, 600);
return $airports;
}
/**
* get all Countries for autocomplete
*/
public function getCountries(){
if(Cache::has('countries')){
return Cache::get('countries');
}
$countryModel = new Country;
$countries = json_encode($countryModel -> _getForAutocomplete('two_letter_code'));
Cache::put('countries', $countries, 600);
return $countries;
}
现在,当我第一次访问该页面时,我正确地获取了数据(因为它还没有被缓存)。如果我第二次访问该页面,我会收到这些国家/地区,但是我在机场遇到错误并且看不清楚原因。
{"error":{"type":"Illuminate\\Encryption\\DecryptException","message":"Invalid data.","file":"C:\\xampp\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Encryption\\Encrypter.php","line":132}}
我发现,它必须通过谷歌缓存和删除缓存部分做一些事情。如果有人能帮我解决这个问题,我会很高兴。
顺便说一下,我正在使用数据库作为我的缓存驱动程序。
最好的问候,Marcel
答案 0 :(得分:5)
我相信序列化有些可疑。在序列化过程中,$机场可能会被破坏。
如果机场字符串值对于MySQL字段来说太长,则会以静默方式截断结束,并且数据解密失败。
默认情况下,Laravel建议将值字段类型设置为文本。为了使它更大,你可以使用mediumText或longText字段。