/** * @override * @see \Magento\Framework\App\Action\Action::execute() * @return \Magento\Framework\Controller\Result\Raw */ public function execute() { /** * 2015-11-29 * @see \Magento\Framework\App\Response\Http::setNoCacheHeaders() * https://github.com/magento/magento2/blob/2.0.0/lib/internal/Magento/Framework/App/Response/Http.php#L133-L138 */ df_response_code(200); df_response_content_type('image/' . $this->type()); df_response_cache_max(); df_response_headers(['Content-Transfer-Encoding' => 'binary', 'Content-Length' => strlen($this->contents())]); $this->_actionFlag->set('', self::FLAG_NO_POST_DISPATCH, true); return df_controller_raw($this->contents()); }
/** * 2015-12-09 * На странице может быть сразу несколько данных элементов управления. * Возникает проблема: как синхронизировать их одновременные обращения к серверу за данными? * Проблемой это является, потому что генерация образцов шрифтов — * длительная (порой минуты) задача со множеством файловых операций. * Параллельный запуск сразу двух таких генераций * (а они будут выполняться разными процессами PHP) * почти наверняка приведёт к файловым конфликтам и ошибкам, * да и вообще смысла в этом никакого нет: * зачем параллельно делать одно и то же с одними и теми же объектами? * Эта проблема была решена в серверной части применением функции @uses df_sync * @override * @see \Magento\Framework\App\Action\Action::execute() * @return Json */ public function execute() { df_response_cache_max(); $this->_actionFlag->set('', self::FLAG_NO_POST_DISPATCH, true); return df_sync($this, function () { return Json::i(Cache::i(null, 30 * 86400)->p(function () { return df_json_encode(['sprite' => $this->sprite()->url(), 'fonts' => array_filter(df_map(function (Font $font) { return array_filter(array_map(function (Variant $variant) { return $this->sprite()->datumPoint($variant->preview()); }, $font->variants())); }, _Fonts::s()))]); }, __METHOD__, df_request(), null)); }); }