public static function getById($id)
{
$id = intval($id);
if ($id < 1) {
return null;
}
$cacheKey = "document_" . $id;
try {
$document = \Zend_Registry::get($cacheKey);
if (!$document) {
throw new \Exception("Document in registry is null");
}
} catch (\Exception $e) {
try {
if (!($document = \Pimcore\Cache::load($cacheKey))) {
$document = new Document();
$document->getDao()->getById($id);
$className = "Pimcore\\Model\\Document\\" . ucfirst($document->getType());
// this is the fallback for custom document types using prefixes
// so we need to check if the class exists first
if (!Tool::classExists($className)) {
$oldStyleClass = "Document_" . ucfirst($document->getType());
if (Tool::classExists($oldStyleClass)) {
$className = $oldStyleClass;
}
}
$document = \Pimcore::getDiContainer()->make($className);
\Zend_Registry::set($cacheKey, $document);
$document->getDao()->getById($id);
\Pimcore\Cache::save($document, $cacheKey);
} else {
\Zend_Registry::set($cacheKey, $document);
}
} catch (\Exception $e) {
Logger::warning($e->getMessage());
return null;
}
}
if (!$document) {
return null;
}
return $document;
}